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(); |