Lines Matching defs:Expr

33     bool evaluate(StringRef Expr) const {
35 Expr = Expr.trim();
36 size_t EQIdx = Expr.find('=');
39 StringRef LHSExpr = Expr.substr(0, EQIdx).rtrim();
45 return handleError(Expr, LHSResult);
47 return handleError(Expr, unexpectedToken(RemainingExpr, LHSExpr, ""));
50 StringRef RHSExpr = Expr.substr(EQIdx + 1).ltrim();
55 return handleError(Expr, RHSResult);
57 return handleError(Expr, unexpectedToken(RemainingExpr, RHSExpr, ""));
60 ErrStream << "Expression '" << Expr << "' is false: "
91 StringRef getTokenForError(StringRef Expr) const {
92 if (Expr.empty())
96 if (isalpha(Expr[0]))
97 std::tie(Token, Remaining) = parseSymbol(Expr);
98 else if (isdigit(Expr[0]))
99 std::tie(Token, Remaining) = parseNumberString(Expr);
102 if (Expr.startswith("<<") || Expr.startswith(">>"))
104 Token = Expr.substr(0, TokLen);
126 bool handleError(StringRef Expr, const EvalResult &R) const {
128 ErrStream << "Error evaluating expression '" << Expr << "': "
133 std::pair<BinOpToken, StringRef> parseBinOpToken(StringRef Expr) const {
134 if (Expr.empty())
138 if (Expr.startswith("<<"))
140 Expr.substr(2).ltrim());
141 if (Expr.startswith(">>"))
143 Expr.substr(2).ltrim());
147 switch (Expr[0]) {
148 default: return std::make_pair(BinOpToken::Invalid, Expr);
155 return std::make_pair(Op, Expr.substr(1).ltrim());
179 std::pair<StringRef, StringRef> parseSymbol(StringRef Expr) const {
181 Expr.find_first_not_of("0123456789"
185 return std::make_pair(Expr.substr(0, FirstNonSymbol),
186 Expr.substr(FirstNonSymbol).ltrim());
195 std::pair<EvalResult, StringRef> evalDecodeOperand(StringRef Expr) const {
196 if (!Expr.startswith("("))
197 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), "");
198 StringRef RemainingExpr = Expr.substr(1).ltrim();
264 std::pair<EvalResult, StringRef> evalNextPC(StringRef Expr) const {
265 if (!Expr.startswith("("))
266 return std::make_pair(unexpectedToken(Expr, Expr, "expected '('"), "");
267 StringRef RemainingExpr = Expr.substr(1).ltrim();
296 std::pair<EvalResult, StringRef> evalIdentifierExpr(StringRef Expr) const {
299 std::tie(Symbol, RemainingExpr) = parseSymbol(Expr);
314 std::pair<StringRef, StringRef> parseNumberString(StringRef Expr) const {
316 if (Expr.startswith("0x")) {
317 FirstNonDigit = Expr.find_first_not_of("0123456789abcdefABCDEF", 2);
319 FirstNonDigit = Expr.size();
321 FirstNonDigit = Expr.find_first_not_of("0123456789");
323 FirstNonDigit = Expr.size();
325 return std::make_pair(Expr.substr(0, FirstNonDigit),
326 Expr.substr(FirstNonDigit));
332 std::pair<EvalResult, StringRef> evalNumberExpr(StringRef Expr) const {
335 std::tie(ValueStr, RemainingExpr) = parseNumberString(Expr);
349 std::pair<EvalResult, StringRef> evalParensExpr(StringRef Expr) const {
350 assert(Expr.startswith("(") && "Not a parenthesized expression");
354 evalComplexExpr(evalSimpleExpr(Expr.substr(1).ltrim()));
358 return std::make_pair(unexpectedToken(RemainingExpr, Expr,
371 std::pair<EvalResult, StringRef> evalLoadExpr(StringRef Expr) const {
372 assert(Expr.startswith("*") && "Not a load expression");
373 StringRef RemainingExpr = Expr.substr(1).ltrim();
441 std::pair<EvalResult, StringRef> evalSimpleExpr(StringRef Expr) const {
445 if (Expr.empty())
448 if (Expr[0] == '(')
449 std::tie(SubExprResult, RemainingExpr) = evalParensExpr(Expr);
450 else if (Expr[0] == '*')
451 std::tie(SubExprResult, RemainingExpr) = evalLoadExpr(Expr);
452 else if (isalpha(Expr[0]))
453 std::tie(SubExprResult, RemainingExpr) = evalIdentifierExpr(Expr);
454 else if (isdigit(Expr[0]))
455 std::tie(SubExprResult, RemainingExpr) = evalNumberExpr(Expr);