Lines Matching refs:Expr
35 bool evaluate(StringRef Expr) const { in evaluate()
37 Expr = Expr.trim(); in evaluate()
38 size_t EQIdx = Expr.find('='); in evaluate()
43 StringRef LHSExpr = Expr.substr(0, EQIdx).rtrim(); in evaluate()
49 return handleError(Expr, LHSResult); in evaluate()
51 return handleError(Expr, unexpectedToken(RemainingExpr, LHSExpr, "")); in evaluate()
54 StringRef RHSExpr = Expr.substr(EQIdx + 1).ltrim(); in evaluate()
59 return handleError(Expr, RHSResult); in evaluate()
61 return handleError(Expr, unexpectedToken(RemainingExpr, RHSExpr, "")); in evaluate()
64 Checker.ErrStream << "Expression '" << Expr << "' is false: " in evaluate()
112 StringRef getTokenForError(StringRef Expr) const { in getTokenForError()
113 if (Expr.empty()) in getTokenForError()
117 if (isalpha(Expr[0])) in getTokenForError()
118 std::tie(Token, Remaining) = parseSymbol(Expr); in getTokenForError()
119 else if (isdigit(Expr[0])) in getTokenForError()
120 std::tie(Token, Remaining) = parseNumberString(Expr); in getTokenForError()
123 if (Expr.startswith("<<") || Expr.startswith(">>")) in getTokenForError()
125 Token = Expr.substr(0, TokLen); in getTokenForError()
146 bool handleError(StringRef Expr, const EvalResult &R) const { in handleError() argument
148 Checker.ErrStream << "Error evaluating expression '" << Expr in handleError()
153 std::pair<BinOpToken, StringRef> parseBinOpToken(StringRef Expr) const { in parseBinOpToken()
154 if (Expr.empty()) in parseBinOpToken()
158 if (Expr.startswith("<<")) in parseBinOpToken()
159 return std::make_pair(BinOpToken::ShiftLeft, Expr.substr(2).ltrim()); in parseBinOpToken()
160 if (Expr.startswith(">>")) in parseBinOpToken()
161 return std::make_pair(BinOpToken::ShiftRight, Expr.substr(2).ltrim()); in parseBinOpToken()
165 switch (Expr[0]) { in parseBinOpToken()
167 return std::make_pair(BinOpToken::Invalid, Expr); in parseBinOpToken()
182 return std::make_pair(Op, Expr.substr(1).ltrim()); in parseBinOpToken()
207 std::pair<StringRef, StringRef> parseSymbol(StringRef Expr) const { in parseSymbol()
208 size_t FirstNonSymbol = Expr.find_first_not_of("0123456789" in parseSymbol()
212 return std::make_pair(Expr.substr(0, FirstNonSymbol), in parseSymbol()
213 Expr.substr(FirstNonSymbol).ltrim()); in parseSymbol()
222 std::pair<EvalResult, StringRef> evalDecodeOperand(StringRef Expr) const { in evalDecodeOperand()
223 if (!Expr.startswith("(")) in evalDecodeOperand()
224 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalDecodeOperand()
225 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalDecodeOperand()
289 std::pair<EvalResult, StringRef> evalNextPC(StringRef Expr, in evalNextPC() argument
291 if (!Expr.startswith("(")) in evalNextPC()
292 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalNextPC()
293 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalNextPC()
327 std::pair<EvalResult, StringRef> evalStubAddr(StringRef Expr, in evalStubAddr() argument
329 if (!Expr.startswith("(")) in evalStubAddr()
330 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalStubAddr()
331 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalStubAddr()
342 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubAddr()
350 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubAddr()
358 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalStubAddr()
372 std::pair<EvalResult, StringRef> evalSectionAddr(StringRef Expr, in evalSectionAddr() argument
374 if (!Expr.startswith("(")) in evalSectionAddr()
375 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalSectionAddr()
376 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalSectionAddr()
387 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalSectionAddr()
395 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalSectionAddr()
412 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr, in evalIdentifierExpr() argument
416 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr); in evalIdentifierExpr()
451 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const { in parseNumberString()
453 if (Expr.startswith("0x")) { in parseNumberString()
454 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2); in parseNumberString()
456 FirstNonDigit = Expr.size(); in parseNumberString()
458 FirstNonDigit = Expr.find_first_not_of("0123456789"); in parseNumberString()
460 FirstNonDigit = Expr.size(); in parseNumberString()
462 return std::make_pair(Expr.substr(0, FirstNonDigit), in parseNumberString()
463 Expr.substr(FirstNonDigit)); in parseNumberString()
469 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const { in evalNumberExpr()
472 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr); in evalNumberExpr()
485 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr, in evalParensExpr() argument
487 assert(Expr.startswith("(") && "Not a parenthesized expression"); in evalParensExpr()
491 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim(), PCtx), PCtx); in evalParensExpr()
496 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalParensExpr()
505 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const { in evalLoadExpr()
506 assert(Expr.startswith("*") && "Not a load expression"); in evalLoadExpr()
507 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalLoadExpr()
547 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr, in evalSimpleExpr() argument
552 if (Expr.empty()) in evalSimpleExpr()
555 if (Expr[0] == '(') in evalSimpleExpr()
556 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr, PCtx); in evalSimpleExpr()
557 else if (Expr[0] == '*') in evalSimpleExpr()
558 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr); in evalSimpleExpr()
559 else if (isalpha(Expr[0]) || Expr[0] == '_') in evalSimpleExpr()
560 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr, PCtx); in evalSimpleExpr()
561 else if (isdigit(Expr[0])) in evalSimpleExpr()
562 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr); in evalSimpleExpr()
565 unexpectedToken(Expr, Expr, in evalSimpleExpr()