Lines Matching refs:Expr

37   bool evaluate(StringRef Expr) const {  in evaluate()
39 Expr = Expr.trim(); in evaluate()
40 size_t EQIdx = Expr.find('='); in evaluate()
45 StringRef LHSExpr = Expr.substr(0, EQIdx).rtrim(); in evaluate()
51 return handleError(Expr, LHSResult); in evaluate()
53 return handleError(Expr, unexpectedToken(RemainingExpr, LHSExpr, "")); in evaluate()
56 StringRef RHSExpr = Expr.substr(EQIdx + 1).ltrim(); in evaluate()
61 return handleError(Expr, RHSResult); in evaluate()
63 return handleError(Expr, unexpectedToken(RemainingExpr, RHSExpr, "")); in evaluate()
66 Checker.ErrStream << "Expression '" << Expr << "' is false: " in evaluate()
114 StringRef getTokenForError(StringRef Expr) const { in getTokenForError()
115 if (Expr.empty()) in getTokenForError()
119 if (isalpha(Expr[0])) in getTokenForError()
120 std::tie(Token, Remaining) = parseSymbol(Expr); in getTokenForError()
121 else if (isdigit(Expr[0])) in getTokenForError()
122 std::tie(Token, Remaining) = parseNumberString(Expr); in getTokenForError()
125 if (Expr.startswith("<<") || Expr.startswith(">>")) in getTokenForError()
127 Token = Expr.substr(0, TokLen); in getTokenForError()
148 bool handleError(StringRef Expr, const EvalResult &R) const { in handleError() argument
150 Checker.ErrStream << "Error evaluating expression '" << Expr in handleError()
155 std::pair<BinOpToken, StringRef> parseBinOpToken(StringRef Expr) const { in parseBinOpToken()
156 if (Expr.empty()) in parseBinOpToken()
160 if (Expr.startswith("<<")) in parseBinOpToken()
161 return std::make_pair(BinOpToken::ShiftLeft, Expr.substr(2).ltrim()); in parseBinOpToken()
162 if (Expr.startswith(">>")) in parseBinOpToken()
163 return std::make_pair(BinOpToken::ShiftRight, Expr.substr(2).ltrim()); in parseBinOpToken()
167 switch (Expr[0]) { in parseBinOpToken()
169 return std::make_pair(BinOpToken::Invalid, Expr); in parseBinOpToken()
184 return std::make_pair(Op, Expr.substr(1).ltrim()); in parseBinOpToken()
209 std::pair<StringRef, StringRef> parseSymbol(StringRef Expr) const { in parseSymbol()
210 size_t FirstNonSymbol = Expr.find_first_not_of("0123456789" in parseSymbol()
214 return std::make_pair(Expr.substr(0, FirstNonSymbol), in parseSymbol()
215 Expr.substr(FirstNonSymbol).ltrim()); in parseSymbol()
224 std::pair<EvalResult, StringRef> evalDecodeOperand(StringRef Expr) const { in evalDecodeOperand()
225 if (!Expr.startswith("(")) in evalDecodeOperand()
226 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalDecodeOperand()
227 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalDecodeOperand()
311 std::pair<EvalResult, StringRef> evalNextPC(StringRef Expr, in evalNextPC() argument
313 if (!Expr.startswith("(")) in evalNextPC()
314 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalNextPC()
315 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalNextPC()
350 evalStubOrGOTAddr(StringRef Expr, ParseContext PCtx, bool IsStubAddr) const { in evalStubOrGOTAddr() argument
351 if (!Expr.startswith("(")) in evalStubOrGOTAddr()
352 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalStubOrGOTAddr()
353 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalStubOrGOTAddr()
364 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubOrGOTAddr()
372 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalStubOrGOTAddr()
386 std::pair<EvalResult, StringRef> evalSectionAddr(StringRef Expr, in evalSectionAddr() argument
388 if (!Expr.startswith("(")) in evalSectionAddr()
389 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalSectionAddr()
390 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalSectionAddr()
401 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalSectionAddr()
411 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalSectionAddr()
428 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr, in evalIdentifierExpr() argument
432 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr); in evalIdentifierExpr()
469 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const { in parseNumberString()
471 if (Expr.startswith("0x")) { in parseNumberString()
472 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2); in parseNumberString()
474 FirstNonDigit = Expr.size(); in parseNumberString()
476 FirstNonDigit = Expr.find_first_not_of("0123456789"); in parseNumberString()
478 FirstNonDigit = Expr.size(); in parseNumberString()
480 return std::make_pair(Expr.substr(0, FirstNonDigit), in parseNumberString()
481 Expr.substr(FirstNonDigit)); in parseNumberString()
487 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const { in evalNumberExpr()
490 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr); in evalNumberExpr()
503 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr, in evalParensExpr() argument
505 assert(Expr.startswith("(") && "Not a parenthesized expression"); in evalParensExpr()
509 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim(), PCtx), PCtx); in evalParensExpr()
514 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalParensExpr()
523 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const { in evalLoadExpr()
524 assert(Expr.startswith("*") && "Not a load expression"); in evalLoadExpr()
525 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalLoadExpr()
570 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr, in evalSimpleExpr() argument
575 if (Expr.empty()) in evalSimpleExpr()
578 if (Expr[0] == '(') in evalSimpleExpr()
579 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr, PCtx); in evalSimpleExpr()
580 else if (Expr[0] == '*') in evalSimpleExpr()
581 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr); in evalSimpleExpr()
582 else if (isalpha(Expr[0]) || Expr[0] == '_') in evalSimpleExpr()
583 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr, PCtx); in evalSimpleExpr()
584 else if (isdigit(Expr[0])) in evalSimpleExpr()
585 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr); in evalSimpleExpr()
588 unexpectedToken(Expr, Expr, in evalSimpleExpr()