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()
383 evalStubOrGOTAddr(StringRef Expr, ParseContext PCtx, bool IsStubAddr) const { in evalStubOrGOTAddr() argument
384 if (!Expr.starts_with("(")) in evalStubOrGOTAddr()
385 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalStubOrGOTAddr()
386 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalStubOrGOTAddr()
397 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubOrGOTAddr()
414 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalStubOrGOTAddr()
429 std::pair<EvalResult, StringRef> evalSectionAddr(StringRef Expr, in evalSectionAddr() argument
431 if (!Expr.starts_with("(")) in evalSectionAddr()
432 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalSectionAddr()
433 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalSectionAddr()
444 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalSectionAddr()
454 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalSectionAddr()
471 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr, in evalIdentifierExpr() argument
475 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr); in evalIdentifierExpr()
512 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const { in parseNumberString()
514 if (Expr.starts_with("0x")) { in parseNumberString()
515 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2); in parseNumberString()
517 FirstNonDigit = Expr.size(); in parseNumberString()
519 FirstNonDigit = Expr.find_first_not_of("0123456789"); in parseNumberString()
521 FirstNonDigit = Expr.size(); in parseNumberString()
523 return std::make_pair(Expr.substr(0, FirstNonDigit), in parseNumberString()
524 Expr.substr(FirstNonDigit)); in parseNumberString()
530 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const { in evalNumberExpr()
533 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr); in evalNumberExpr()
546 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr, in evalParensExpr() argument
548 assert(Expr.starts_with("(") && "Not a parenthesized expression"); in evalParensExpr()
552 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim(), PCtx), PCtx); in evalParensExpr()
557 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalParensExpr()
566 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const { in evalLoadExpr()
567 assert(Expr.starts_with("*") && "Not a load expression"); in evalLoadExpr()
568 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalLoadExpr()
613 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr, in evalSimpleExpr() argument
618 if (Expr.empty()) in evalSimpleExpr()
621 if (Expr[0] == '(') in evalSimpleExpr()
622 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr, PCtx); in evalSimpleExpr()
623 else if (Expr[0] == '*') in evalSimpleExpr()
624 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr); in evalSimpleExpr()
625 else if (isalpha(Expr[0]) || Expr[0] == '_') in evalSimpleExpr()
626 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr, PCtx); in evalSimpleExpr()
627 else if (isdigit(Expr[0])) in evalSimpleExpr()
628 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr); in evalSimpleExpr()
631 unexpectedToken(Expr, Expr, in evalSimpleExpr()