| Index: pkg/polymer_expressions/lib/parser.dart
|
| diff --git a/pkg/polymer_expressions/lib/parser.dart b/pkg/polymer_expressions/lib/parser.dart
|
| index 411c7ae0be5c5827bdc0b566ef37bf2e1830f8f8..4d0de87b96f0047e60b935e99e48b93b7c24303b 100644
|
| --- a/pkg/polymer_expressions/lib/parser.dart
|
| +++ b/pkg/polymer_expressions/lib/parser.dart
|
| @@ -64,8 +64,14 @@ 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 == KEYWORD_TOKEN) {
|
| + if (_token.value == 'in') {
|
| + left = _parseInExpression(left);
|
| + } else if (_token.value == 'as') {
|
| + left = _parseAsExpression(left);
|
| + } else {
|
| + break;
|
| + }
|
| } else if (_token.kind == OPERATOR_TOKEN
|
| && _token.precedence >= precedence) {
|
| left = _token.value == '?' ? _parseTernary(left) : _parseBinary(left);
|
| @@ -141,8 +147,8 @@ class Parser {
|
| _advance();
|
| // TODO(justin): return keyword node
|
| return _astFactory.identifier('this');
|
| - } else if (keyword == 'in') {
|
| - return null;
|
| + } else if (KEYWORDS.contains(keyword)) {
|
| + throw new ParseException('invalid keyword: $keyword');
|
| }
|
| throw new ArgumentError('unrecognized keyword: $keyword');
|
| case IDENTIFIER_TOKEN:
|
| @@ -204,7 +210,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(
|
| @@ -215,6 +221,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();
|
|
|