Fix unary expressions having wrong precedence.
Fix unary expressions having wrong precedence.
1.1 --- a/src/Parser.cpp Mon Jul 30 11:56:23 2012 -0700
1.2 +++ b/src/Parser.cpp Mon Jul 30 12:13:08 2012 -0700
1.3 @@ -255,7 +255,7 @@
1.4 case TOK_DECREMENT:
1.5 {
1.6 scanner_.scan();
1.7 - Expression *expr = expression();
1.8 + Expression *expr = unary();
1.9 if (!expr)
1.10 return NULL;
1.11 return new (pool_) IncDecExpression(pos, token, expr, false);
1.12 @@ -266,12 +266,26 @@
1.13 case TOK_TILDE:
1.14 {
1.15 scanner_.scan();
1.16 - Expression *expr = expression();
1.17 + Expression *expr = unary();
1.18 if (!expr)
1.19 return NULL;
1.20 return new (pool_) UnaryExpression(pos, token, expr);
1.21 }
1.22
1.23 + case TOK_LABEL:
1.24 + {
1.25 + scanner_.scan();
1.26 + Local<String> tag(zone_, zone_->makeSymbol(scanner_.literal(), scanner_.literal_length()));
1.27 + if (!tag)
1.28 + return NULL;
1.29 +
1.30 + Expression *expr = unary();
1.31 + if (!expr)
1.32 + return NULL;
1.33 +
1.34 + return new (pool_) UnaryExpression(pos, TOK_LABEL, expr, tag);
1.35 + }
1.36 +
1.37 default:
1.38 break;
1.39 }