Chromium Code Reviews| Index: runtime/vm/parser.cc |
| =================================================================== |
| --- runtime/vm/parser.cc (revision 3739) |
| +++ runtime/vm/parser.cc (working copy) |
| @@ -5334,8 +5334,10 @@ |
| bool Parser::IsPrefixOperator(Token::Kind token) { |
| - return token == Token::kADD || token == Token::kSUB |
| - || token == Token::kNOT || token == Token::kBIT_NOT; |
| + return (token == Token::kTIGHTADD) || // Valid for literals only! |
| + (token == Token::kSUB) || |
| + (token == Token::kNOT) || |
| + (token == Token::kBIT_NOT); |
| } |
| @@ -5361,6 +5363,9 @@ |
| while (current_preced >= min_preced) { |
| while (Token::Precedence(CurrentToken()) == current_preced) { |
| Token::Kind op_kind = CurrentToken(); |
| + if (op_kind == Token::kTIGHTADD) { |
| + op_kind = Token::kADD; |
| + } |
| const intptr_t op_pos = token_index_; |
| ConsumeToken(); |
| AstNode* right_operand = NULL; |
| @@ -5660,7 +5665,15 @@ |
| Token::Kind unary_op = CurrentToken(); |
| ConsumeToken(); |
| expr = ParseUnaryExpr(); |
| - expr = UnaryOpNode::UnaryOpOrLiteral(op_pos, unary_op, expr); |
| + if (unary_op == Token::kTIGHTADD) { |
| + // kTIGHADD is added only in front of a number literal. |
| + if (!expr->IsLiteralNode()) { |
| + ErrorMsg("unexpected operator '+'"); |
|
hausner
2012/01/31 19:57:09
Would still be nice to print the error at token po
srdjan
2012/01/31 20:05:28
Done.
|
| + } |
| + // Expression is the literal itself. |
| + } else { |
| + expr = UnaryOpNode::UnaryOpOrLiteral(op_pos, unary_op, expr); |
| + } |
| } else if (IsIncrementOperator(CurrentToken())) { |
| Token::Kind incr_op = CurrentToken(); |
| ConsumeToken(); |