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

Unified Diff: dart/frog/leg/scanner/listener.dart

Issue 8883024: Parse all variations of for-statement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebased Created 9 years 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
« no previous file with comments | « no previous file | dart/frog/leg/scanner/parser.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/frog/leg/scanner/listener.dart
diff --git a/dart/frog/leg/scanner/listener.dart b/dart/frog/leg/scanner/listener.dart
index 050020c7061fcaf32748c6aa9a7f624d6795183d..a3106ab7862488e1e99980ad9891c6e132e03ba8 100644
--- a/dart/frog/leg/scanner/listener.dart
+++ b/dart/frog/leg/scanner/listener.dart
@@ -77,7 +77,11 @@ class Listener {
void beginForStatement(Token token) {
}
- void endForStatement(Token beginToken, Token endToken) {
+ void endForStatement(int updateExpressionCount,
+ Token beginToken, Token endToken) {
+ }
+
+ void endForInStatement(Token beginToken, Token inKeyword, Token endToken) {
}
void beginFunction(Token token) {
@@ -316,6 +320,9 @@ class Listener {
void handleNoArguments(Token token) {
}
+ void handleNoExpression(Token token) {
+ }
+
void handleNoFieldInitializer(Token token) {
}
@@ -471,7 +478,8 @@ class ElementListener extends Listener {
void discardNodes(int count) {
for (; count > 0; --count) {
- popNode();
+ Node node = popNode();
+ canceler.cancel('Unsupported feature', node: node);
}
}
@@ -697,8 +705,10 @@ class NodeListener extends ElementListener {
pushNode(new If(condition, thenPart, elsePart, ifToken, elseToken));
}
- void endForStatement(Token beginToken, Token endToken) {
+ void endForStatement(int updateExpressionCount,
+ Token beginToken, Token endToken) {
Statement body = popNode();
+ discardNodes(updateExpressionCount - 1); // TODO(ahe): Don't discard.
Expression update = popNode();
ExpressionStatement condition = popNode();
VariableDefinitions initializer = popNode();
@@ -781,8 +791,9 @@ class NodeListener extends ElementListener {
}
void endInitializers(int count, Token beginToken, Token endToken) {
- // TODO(ahe): Preserve initializers.
- discardNodes(count);
+ if (count === 0) return;
+ // TODO(ahe): Implement this.
+ canceler.cancel("initializers are not implemented", token: beginToken);
}
void handleNoInitializers() {
@@ -910,6 +921,10 @@ class NodeListener extends ElementListener {
token: factoryKeyword);
}
+ void endForInStatement(Token beginToken, Token inKeyword, Token endToken) {
+ canceler.cancel('for-in is not implemented', token: inKeyword);
+ }
+
NodeList makeNodeList(int count, Token beginToken, Token endToken,
String delimiter) {
Link<Node> nodes = const EmptyLink<Node>();
« no previous file with comments | « no previous file | dart/frog/leg/scanner/parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698