Chromium Code Reviews| Index: pkg/polymer_expressions/lib/parser.dart |
| diff --git a/pkg/polymer_expressions/lib/parser.dart b/pkg/polymer_expressions/lib/parser.dart |
| index bf8dd66b87071b4ed9a6123fa54d2df9a4c8d312..efa6d231cfa57f5d50f9a73ab4271b1c38dcee80 100644 |
| --- a/pkg/polymer_expressions/lib/parser.dart |
| +++ b/pkg/polymer_expressions/lib/parser.dart |
| @@ -64,13 +64,20 @@ class Parser { |
| _advance(); |
| var right = _parseUnary(); |
| left = _makeInvokeOrGetter(left, right); |
| - } else if (_token.kind == KEYWORD_TOKEN && _token.value == 'in') { |
| - left = _parseComprehension(left); |
| - } else if (_token.kind == OPERATOR_TOKEN && _token.value == '?') { |
| - left = _parseTernary(left); |
| - } else if (_token.kind == OPERATOR_TOKEN |
| - && _token.precedence >= precedence) { |
| - left = _parseBinary(left); |
| + } else if (_token.kind == KEYWORD_TOKEN) { |
| + if (_token.value == 'in') { |
| + left = _parseInExpression(left); |
| + } else if (_token.value == 'as') { |
| + left = _parseAsExpression(left); |
| + } else { |
| + // throw? |
|
Jennifer Messerly
2014/01/31 02:48:50
you want to "break" here, right? like the old code
justinfagnani
2014/03/12 23:21:30
Done.
|
| + } |
| + } else if (_token.kind == OPERATOR_TOKEN) { |
| + if (_token.value == '?') { |
| + left = _parseTernary(left); |
| + } else if (_token.precedence >= precedence) { |
| + left = _parseBinary(left); |
| + } |
| } else { |
| break; |
| } |
| @@ -206,7 +213,7 @@ class Parser { |
| return _astFactory.mapLiteralEntry(key, value); |
| } |
| - InExpression _parseComprehension(Expression left) { |
| + InExpression _parseInExpression(Expression left) { |
| assert(_token.value == 'in'); |
| if (left is! Identifier) { |
| throw new ParseException( |
| @@ -217,6 +224,17 @@ class Parser { |
| return _astFactory.inExpr(left, right); |
| } |
| + AsExpression _parseAsExpression(Expression left) { |
| + assert(_token.value == 'as'); |
| + _advance(); |
| + var right = _parseExpression(); |
| + if (right is! Identifier) { |
| + throw new ParseException( |
| + "as... statements must end with an identifier"); |
| + } |
| + return _astFactory.asExpr(left, right); |
| + } |
| + |
| Expression _parseInvokeOrIdentifier() { |
| if (_token.value == 'true') { |
| _advance(); |