Lines Matching refs:Expr
34 bool evaluate(StringRef Expr) const { in evaluate()
36 Expr = Expr.trim(); in evaluate()
37 size_t EQIdx = Expr.find('='); in evaluate()
42 StringRef LHSExpr = Expr.substr(0, EQIdx).rtrim(); in evaluate()
48 return handleError(Expr, LHSResult); in evaluate()
50 return handleError(Expr, unexpectedToken(RemainingExpr, LHSExpr, "")); in evaluate()
53 StringRef RHSExpr = Expr.substr(EQIdx + 1).ltrim(); in evaluate()
58 return handleError(Expr, RHSResult); in evaluate()
60 return handleError(Expr, unexpectedToken(RemainingExpr, RHSExpr, "")); in evaluate()
63 Checker.ErrStream << "Expression '" << Expr << "' is false: " in evaluate()
110 StringRef getTokenForError(StringRef Expr) const { in getTokenForError()
111 if (Expr.empty()) in getTokenForError()
115 if (isalpha(Expr[0])) in getTokenForError()
116 std::tie(Token, Remaining) = parseSymbol(Expr); in getTokenForError()
117 else if (isdigit(Expr[0])) in getTokenForError()
118 std::tie(Token, Remaining) = parseNumberString(Expr); in getTokenForError()
121 if (Expr.startswith("<<") || Expr.startswith(">>")) in getTokenForError()
123 Token = Expr.substr(0, TokLen); in getTokenForError()
144 bool handleError(StringRef Expr, const EvalResult &R) const { in handleError() argument
146 Checker.ErrStream << "Error evaluating expression '" << Expr in handleError()
151 std::pair<BinOpToken, StringRef> parseBinOpToken(StringRef Expr) const { in parseBinOpToken()
152 if (Expr.empty()) in parseBinOpToken()
156 if (Expr.startswith("<<")) in parseBinOpToken()
157 return std::make_pair(BinOpToken::ShiftLeft, Expr.substr(2).ltrim()); in parseBinOpToken()
158 if (Expr.startswith(">>")) in parseBinOpToken()
159 return std::make_pair(BinOpToken::ShiftRight, Expr.substr(2).ltrim()); in parseBinOpToken()
163 switch (Expr[0]) { in parseBinOpToken()
165 return std::make_pair(BinOpToken::Invalid, Expr); in parseBinOpToken()
180 return std::make_pair(Op, Expr.substr(1).ltrim()); in parseBinOpToken()
205 std::pair<StringRef, StringRef> parseSymbol(StringRef Expr) const { in parseSymbol()
206 size_t FirstNonSymbol = Expr.find_first_not_of("0123456789" in parseSymbol()
210 return std::make_pair(Expr.substr(0, FirstNonSymbol), in parseSymbol()
211 Expr.substr(FirstNonSymbol).ltrim()); in parseSymbol()
220 std::pair<EvalResult, StringRef> evalDecodeOperand(StringRef Expr) const { in evalDecodeOperand()
221 if (!Expr.startswith("(")) in evalDecodeOperand()
222 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalDecodeOperand()
223 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalDecodeOperand()
287 std::pair<EvalResult, StringRef> evalNextPC(StringRef Expr, in evalNextPC() argument
289 if (!Expr.startswith("(")) in evalNextPC()
290 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalNextPC()
291 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalNextPC()
325 std::pair<EvalResult, StringRef> evalStubAddr(StringRef Expr, in evalStubAddr() argument
327 if (!Expr.startswith("(")) in evalStubAddr()
328 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalStubAddr()
329 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalStubAddr()
340 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubAddr()
348 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalStubAddr()
356 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalStubAddr()
370 std::pair<EvalResult, StringRef> evalSectionAddr(StringRef Expr, in evalSectionAddr() argument
372 if (!Expr.startswith("(")) in evalSectionAddr()
373 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), ""); in evalSectionAddr()
374 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalSectionAddr()
385 unexpectedToken(RemainingExpr, Expr, "expected ','"), ""); in evalSectionAddr()
393 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalSectionAddr()
410 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr, in evalIdentifierExpr() argument
414 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr); in evalIdentifierExpr()
449 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const { in parseNumberString()
451 if (Expr.startswith("0x")) { in parseNumberString()
452 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2); in parseNumberString()
454 FirstNonDigit = Expr.size(); in parseNumberString()
456 FirstNonDigit = Expr.find_first_not_of("0123456789"); in parseNumberString()
458 FirstNonDigit = Expr.size(); in parseNumberString()
460 return std::make_pair(Expr.substr(0, FirstNonDigit), in parseNumberString()
461 Expr.substr(FirstNonDigit)); in parseNumberString()
467 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const { in evalNumberExpr()
470 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr); in evalNumberExpr()
483 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr, in evalParensExpr() argument
485 assert(Expr.startswith("(") && "Not a parenthesized expression"); in evalParensExpr()
489 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim(), PCtx), PCtx); in evalParensExpr()
494 unexpectedToken(RemainingExpr, Expr, "expected ')'"), ""); in evalParensExpr()
503 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const { in evalLoadExpr()
504 assert(Expr.startswith("*") && "Not a load expression"); in evalLoadExpr()
505 StringRef RemainingExpr = Expr.substr(1).ltrim(); in evalLoadExpr()
545 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr, in evalSimpleExpr() argument
550 if (Expr.empty()) in evalSimpleExpr()
553 if (Expr[0] == '(') in evalSimpleExpr()
554 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr, PCtx); in evalSimpleExpr()
555 else if (Expr[0] == '*') in evalSimpleExpr()
556 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr); in evalSimpleExpr()
557 else if (isalpha(Expr[0]) || Expr[0] == '_') in evalSimpleExpr()
558 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr, PCtx); in evalSimpleExpr()
559 else if (isdigit(Expr[0])) in evalSimpleExpr()
560 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr); in evalSimpleExpr()
563 unexpectedToken(Expr, Expr, in evalSimpleExpr()