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

Unified Diff: sdk/lib/_internal/compiler/implementation/scanner/listener.dart

Issue 675113002: Support async/await in the dart2js frontend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments Created 6 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: sdk/lib/_internal/compiler/implementation/scanner/listener.dart
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 2b69193e011371e886748ea8cb8d1a296b6dd537..89f20d4587b7a605f15503f7824d1283912115ed 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -20,6 +20,16 @@ class Listener {
void endArguments(int count, Token beginToken, Token endToken) {
}
+ /// Handle async modifiers `async`, `async*`, `sync`.
+ void handleAsyncModifier(Token asyncToken, Token startToken) {
+ }
+
+ void beginAwaitExpression(Token token) {
+ }
+
+ void endAwaitExpression(Token beginToken, Token endToken) {
+ }
+
void beginBlock(Token token) {
}
@@ -115,7 +125,8 @@ class Listener {
Token beginToken, Token endToken) {
}
- void endForIn(Token beginToken, Token inKeyword, Token endToken) {
+ void endForIn(Token awaitToken, Token forToken,
+ Token inKeyword, Token endToken) {
}
void beginFunction(Token token) {
@@ -393,10 +404,10 @@ class Listener {
void endTypeVariables(int count, Token beginToken, Token endToken) {
}
- void beginUnamedFunction(Token token) {
+ void beginUnnamedFunction(Token token) {
}
- void endUnamedFunction(Token token) {
+ void endUnnamedFunction(Token token) {
}
void beginVariablesDeclaration(Token token) {
@@ -546,6 +557,12 @@ class Listener {
void handleVoidKeyword(Token token) {
}
+ void beginYieldStatement(Token token) {
+ }
+
+ void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
+ }
+
Token expected(String string, Token token) {
if (token is ErrorToken) {
reportErrorToken(token);
@@ -1623,6 +1640,11 @@ class NodeListener extends ElementListener {
pushNode(new Return(beginToken, endToken, expression));
}
+ void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
+ Expression expression = popNode();
+ pushNode(new Yield(yieldToken, starToken, expression, endToken));
+ }
+
void endExpressionStatement(Token token) {
pushNode(new ExpressionStatement(popNode(), token));
}
@@ -1770,6 +1792,14 @@ class NodeListener extends ElementListener {
}
}
+ void handleAsyncModifier(Token asyncToken, Token starToken) {
+ if (asyncToken != null) {
+ pushNode(new AsyncModifier(asyncToken, starToken));
+ } else {
+ pushNode(null);
+ }
+ }
+
void skippedFunctionBody(Token token) {
pushNode(new Block(new NodeList.empty()));
}
@@ -1780,6 +1810,7 @@ class NodeListener extends ElementListener {
void endFunction(Token getOrSet, Token endToken) {
Statement body = popNode();
+ AsyncModifier asyncModifier = popNode();
NodeList initializers = popNode();
NodeList formals = popNode();
// The name can be an identifier or a send in case of named constructors.
@@ -1787,7 +1818,8 @@ class NodeListener extends ElementListener {
TypeAnnotation type = popNode();
Modifiers modifiers = popNode();
pushNode(new FunctionExpression(name, formals, body, type,
- modifiers, initializers, getOrSet));
+ modifiers, initializers, getOrSet,
+ asyncModifier));
}
void endFunctionDeclaration(Token endToken) {
@@ -1854,6 +1886,11 @@ class NodeListener extends ElementListener {
pushNode(new Throw(expression, throwToken, endToken));
}
+ void endAwaitExpression(Token awaitToken, Token endToken) {
+ Expression expression = popNode();
+ pushNode(new Await(awaitToken, expression));
+ }
+
void endRethrowStatement(Token throwToken, Token endToken) {
pushNode(new Rethrow(throwToken, endToken));
if (identical(throwToken.stringValue, 'throw')) {
@@ -1920,13 +1957,15 @@ class NodeListener extends ElementListener {
void endMethod(Token getOrSet, Token beginToken, Token endToken) {
Statement body = popNode();
+ AsyncModifier asyncModifier = popNode();
NodeList initializers = popNode();
NodeList formalParameters = popNode();
Expression name = popNode();
TypeAnnotation returnType = popNode();
Modifiers modifiers = popNode();
pushNode(new FunctionExpression(name, formalParameters, body, returnType,
- modifiers, initializers, getOrSet));
+ modifiers, initializers, getOrSet,
+ asyncModifier));
}
void handleLiteralMap(int count, Token beginToken, Token constKeyword,
@@ -1996,7 +2035,7 @@ class NodeListener extends ElementListener {
TypeAnnotation returnType = popNode();
pushNode(null); // Signal "no type" to endFormalParameter.
pushNode(new FunctionExpression(name, formals, null, returnType,
- Modifiers.EMPTY, null, null));
+ Modifiers.EMPTY, null, null, null));
}
void handleValuedFormalParameter(Token equals, Token token) {
@@ -2079,6 +2118,7 @@ class NodeListener extends ElementListener {
void endFactoryMethod(Token beginToken, Token endToken) {
super.endFactoryMethod(beginToken, endToken);
Statement body = popNode();
+ AsyncModifier asyncModifier = popNode();
NodeList formals = popNode();
Node name = popNode();
@@ -2102,15 +2142,16 @@ class NodeListener extends ElementListener {
Modifiers modifiers = popNode();
pushNode(new FunctionExpression(name, formals, body, null,
- modifiers, null, null));
+ modifiers, null, null, asyncModifier));
}
- void endForIn(Token beginToken, Token inKeyword, Token endToken) {
+ void endForIn(Token awaitToken, Token forToken,
+ Token inKeyword, Token endToken) {
Statement body = popNode();
Expression expression = popNode();
Node declaredIdentifier = popNode();
pushNode(new ForIn(declaredIdentifier, expression, body,
- beginToken, inKeyword));
+ awaitToken, forToken, inKeyword));
}
void endMetadataStar(int count, bool forParameter) {
@@ -2169,11 +2210,13 @@ class NodeListener extends ElementListener {
pushNode(new ExpressionStatement(send, semicolonToken));
}
- void endUnamedFunction(Token token) {
+ void endUnnamedFunction(Token token) {
Statement body = popNode();
+ AsyncModifier asyncModifier = popNode();
NodeList formals = popNode();
pushNode(new FunctionExpression(null, formals, body, null,
- Modifiers.EMPTY, null, null));
+ Modifiers.EMPTY, null, null,
+ asyncModifier));
}
void handleIsOperator(Token operathor, Token not, Token endToken) {

Powered by Google App Engine
This is Rietveld 408576698