Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1194)

Unified Diff: pkg/polymer_expressions/lib/parser.dart

Issue 74543003: Split out Index AST node from Invoke (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Split out Getter too Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/polymer_expressions/lib/parser.dart
diff --git a/pkg/polymer_expressions/lib/parser.dart b/pkg/polymer_expressions/lib/parser.dart
index 9a16300a6a59d16e46199d50c6dede4722c68f78..d7862661a8465f9879eaede79b4fb6d66ce8fddf 100644
--- a/pkg/polymer_expressions/lib/parser.dart
+++ b/pkg/polymer_expressions/lib/parser.dart
@@ -16,7 +16,7 @@ class Parser {
final Tokenizer _tokenizer;
List<Token> _tokens;
Iterator _iterator;
- Token _token;
+ Token get _token => _iterator.current;
Parser(String input, {AstFactory astFactory})
: _tokenizer = new Tokenizer(input),
@@ -34,7 +34,7 @@ class Parser {
|| (value != null && _token.value != value)) {
throw new ParseException("Expected $value: $_token");
}
- _token = _iterator.moveNext() ? _iterator.current : null;
+ _iterator.moveNext();
}
Expression _parseExpression() {
@@ -52,18 +52,18 @@ class Parser {
if (_token.kind == GROUPER_TOKEN) {
if (_token.value == '(') {
var args = _parseArguments();
+ assert(args != null);
left = _astFactory.invoke(left, null, args);
} else if (_token.value == '[') {
var indexExpr = _parseIndex();
- var args = indexExpr == null ? [] : [indexExpr];
- left = _astFactory.invoke(left, '[]', args);
+ left = _astFactory.index(left, indexExpr);
} else {
break;
}
} else if (_token.kind == DOT_TOKEN) {
_advance();
var right = _parseUnary();
- left = _makeInvoke(left, right);
+ left = _makeInvokeOrGetter(left, right);
} else if (_token.kind == KEYWORD_TOKEN && _token.value == 'in') {
left = _parseComprehension(left);
} else if (_token.kind == OPERATOR_TOKEN
@@ -76,9 +76,10 @@ class Parser {
return left;
}
- Invoke _makeInvoke(left, right) {
+ // invoke or getter
+ Expression _makeInvokeOrGetter(left, right) {
if (right is Identifier) {
- return _astFactory.invoke(left, right.value);
+ return _astFactory.getter(left, right.value);
} else if (right is Invoke && right.receiver is Identifier) {
Identifier method = right.receiver;
return _astFactory.invoke(left, method.value, right.arguments);
@@ -209,12 +210,6 @@ class Parser {
}
}
- Invoke _parseInvoke() {
- var identifier = _parseIdentifier();
- var args = _parseArguments();
- return _astFactory.invoke(null, identifier, args);
- }
-
Identifier _parseIdentifier() {
if (_token.kind != IDENTIFIER_TOKEN) {
throw new ParseException("expected identifier: $_token.value");

Powered by Google App Engine
This is Rietveld 408576698