Lines Matching refs:Expr

57   bool evaluate(StringRef Expr) const {  in evaluate()
59 Expr = Expr.trim(); in evaluate()
60 size_t EQIdx = Expr.find('='); in evaluate()
65 StringRef LHSExpr = Expr.substr(0, EQIdx).rtrim(); in evaluate()
71 return handleError(Expr, LHSResult); in evaluate()
73 return handleError(Expr, unexpectedToken(RemainingExpr, LHSExpr, "")); in evaluate()
76 StringRef RHSExpr = Expr.substr(EQIdx + 1).ltrim(); in evaluate()
81 return handleError(Expr, RHSResult); in evaluate()
83 return handleError(Expr, unexpectedToken(RemainingExpr, RHSExpr, "")); in evaluate()
86 Checker.ErrStream << "Expression '" << Expr << "' is false: " in evaluate()
134 StringRef getTokenForError(StringRef Expr) const { in getTokenForError()
135 if (Expr.empty()) in getTokenForError()
139 if (isalpha(Expr[0])) in getTokenForError()
140 std::tie(Token, Remaining) = parseSymbol(Expr); in getTokenForError()
141 else if (isdigit(Expr[0])) in getTokenForError()
142 std::tie(Token, Remaining) = parseNumberString(Expr); in getTokenForError()
145 if (Expr.starts_with("<<") || Expr.starts_with(">>")) in getTokenForError()
147 Token = Expr.substr(0, TokLen); in getTokenForError()
168 bool handleError(StringRef Expr, const EvalResult &R) const { in handleError() argument
170 Checker.ErrStream << "Error evaluating expression '" << Expr in handleError()
175 std::pair<BinOpToken, StringRef> parseBinOpToken(StringRef Expr) const { in parseBinOpToken()
176 if (Expr.empty()) in parseBinOpToken()
180 if (Expr.starts_with("<<")) in parseBinOpToken()
181 return std::make_pair(BinOpToken::ShiftLeft, Expr.substr(2).ltrim()); in parseBinOpToken()
182 if (Expr.starts_with(">>")) in parseBinOpToken()
183 return std::make_pair(BinOpToken::ShiftRight, Expr.substr(2).ltrim()); in parseBinOpToken()
187 switch (Expr[0]) { in parseBinOpToken()
189 return std::make_pair(BinOpToken::Invalid, Expr); in parseBinOpToken()
204 return std::make_pair(Op, Expr.substr(1).ltrim()); in parseBinOpToken()
229 std::pair<StringRef, StringRef> parseSymbol(StringRef Expr) const { in parseSymbol()
230 size_t FirstNonSymbol = Expr.find_first_not_of("0123456789" in parseSymbol()
234 return std::make_pair(Expr.substr(0, FirstNonSymbol), in parseSymbol()
235 Expr.substr(FirstNonSymbol).ltrim()); in parseSymbol()
244 std::pair<EvalResult, StringRef> evalDecodeOperand(StringRef Expr) const { in evalDecodeOperand()
245 if (!Expr.starts_with("(")) in evalDecodeOperand()
246 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalDecodeOperand()
247 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalDecodeOperand()
344 std::pair<EvalResult, StringRef> evalNextPC(StringRef Expr, in evalNextPC() argument
346 if (!Expr.starts_with("(")) in evalNextPC()
347 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalNextPC()
348 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalNextPC()
389 evalStubOrGOTAddr(StringRef Expr, ParseContext PCtx, bool IsStubAddr) const { in evalStubOrGOTAddr() argument
390 if (!Expr.starts_with("(")) in evalStubOrGOTAddr()
391 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalStubOrGOTAddr()
392 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalStubOrGOTAddr()
403 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubOrGOTAddr()
420 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalStubOrGOTAddr()
435 std::pair<EvalResult, StringRef> evalSectionAddr(StringRef Expr, in evalSectionAddr() argument
437 if (!Expr.starts_with("(")) in evalSectionAddr()
438 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalSectionAddr()
439 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalSectionAddr()
450 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalSectionAddr()
460 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalSectionAddr()
477 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr, in evalIdentifierExpr() argument
481 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr); in evalIdentifierExpr()
518 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const { in parseNumberString()
520 if (Expr.starts_with("0x")) { in parseNumberString()
521 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2); in parseNumberString()
523 FirstNonDigit = Expr.size(); in parseNumberString()
525 FirstNonDigit = Expr.find_first_not_of("0123456789"); in parseNumberString()
527 FirstNonDigit = Expr.size(); in parseNumberString()
529 return std::make_pair(Expr.substr(0, FirstNonDigit), in parseNumberString()
530 Expr.substr(FirstNonDigit)); in parseNumberString()
536 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const { in evalNumberExpr()
539 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr); in evalNumberExpr()
552 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr, in evalParensExpr() argument
554 assert(Expr.starts_with("(") && "Not a parenthesized expression"); in evalParensExpr()
558 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim(), PCtx), PCtx); in evalParensExpr()
563 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalParensExpr()
572 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const { in evalLoadExpr()
573 assert(Expr.starts_with("*") && "Not a load expression"); in evalLoadExpr()
574 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalLoadExpr()
619 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr, in evalSimpleExpr() argument
624 if (Expr.empty()) in evalSimpleExpr()
627 if (Expr[0] == '(') in evalSimpleExpr()
628 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr, PCtx); in evalSimpleExpr()
629 else if (Expr[0] == '*') in evalSimpleExpr()
630 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr); in evalSimpleExpr()
631 else if (isalpha(Expr[0]) || Expr[0] == '_') in evalSimpleExpr()
632 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr, PCtx); in evalSimpleExpr()
633 else if (isdigit(Expr[0])) in evalSimpleExpr()
634 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr); in evalSimpleExpr()
637 unexpectedToken(Expr, Expr, in evalSimpleExpr()