# HG changeset patch # User David Anderson # Date 1343675588 25200 # Node ID d2516d66101aa5c0e05bb55279939a0b878edb20 # Parent aae2a2562684868ac9d80613c8fd335f025c595c Fix unary expressions having wrong precedence. diff -r aae2a2562684 -r d2516d66101a src/Parser.cpp --- a/src/Parser.cpp Mon Jul 30 11:56:23 2012 -0700 +++ b/src/Parser.cpp Mon Jul 30 12:13:08 2012 -0700 @@ -255,7 +255,7 @@ case TOK_DECREMENT: { scanner_.scan(); - Expression *expr = expression(); + Expression *expr = unary(); if (!expr) return NULL; return new (pool_) IncDecExpression(pos, token, expr, false); @@ -266,12 +266,26 @@ case TOK_TILDE: { scanner_.scan(); - Expression *expr = expression(); + Expression *expr = unary(); if (!expr) return NULL; return new (pool_) UnaryExpression(pos, token, expr); } + case TOK_LABEL: + { + scanner_.scan(); + Local tag(zone_, zone_->makeSymbol(scanner_.literal(), scanner_.literal_length())); + if (!tag) + return NULL; + + Expression *expr = unary(); + if (!expr) + return NULL; + + return new (pool_) UnaryExpression(pos, TOK_LABEL, expr, tag); + } + default: break; }