Index: pkg/compiler/lib/src/js/nodes.dart |
diff --git a/pkg/compiler/lib/src/js/nodes.dart b/pkg/compiler/lib/src/js/nodes.dart |
index e5b57f6351593fa734602e297c1558ad28d9ecd0..c4fab3746d04dd2fa685302661915a63a3cab2ce 100644 |
--- a/pkg/compiler/lib/src/js/nodes.dart |
+++ b/pkg/compiler/lib/src/js/nodes.dart |
@@ -27,6 +27,7 @@ abstract class NodeVisitor<T> { |
T visitFunctionDeclaration(FunctionDeclaration node); |
T visitLabeledStatement(LabeledStatement node); |
T visitLiteralStatement(LiteralStatement node); |
+ T visitDartYield(DartYield node); |
T visitBlob(Blob node); |
T visitLiteralExpression(LiteralExpression node); |
@@ -169,6 +170,7 @@ class BaseVisitor<T> implements NodeVisitor<T> { |
T visitComment(Comment node) => null; |
T visitAwait(Await node) => visitExpression(node); |
+ T visitDartYield(DartYield node) => visitStatement(node); |
} |
abstract class Node { |
@@ -532,6 +534,24 @@ class LiteralStatement extends Statement { |
LiteralStatement _clone() => new LiteralStatement(code); |
} |
+// Not a real javascript node, but represents the yield statement from a dart |
+// program translated to javascript. |
+class DartYield extends Statement { |
+ final Expression expression; |
+ |
+ final bool hasStar; |
+ |
+ DartYield(this.expression, this.hasStar); |
+ |
+ accept(NodeVisitor visitor) => visitor.visitDartYield(this); |
+ |
+ void visitChildren(NodeVisitor visitor) { |
+ expression.accept(visitor); |
+ } |
+ |
+ DartYield _clone() => new DartYield(expression, hasStar); |
+} |
+ |
abstract class Expression extends Node { |
int get precedenceLevel; |
@@ -862,7 +882,7 @@ class Fun extends Expression { |
body.accept(visitor); |
} |
- Fun _clone() => new Fun(params, body); |
+ Fun _clone() => new Fun(params, body, asyncModifier: asyncModifier); |
int get precedenceLevel => CALL; |
} |
@@ -870,11 +890,25 @@ class Fun extends Expression { |
class AsyncModifier { |
final bool isAsync; |
final bool isYielding; |
- |
- const AsyncModifier.sync() : isAsync = false, isYielding = false; |
- const AsyncModifier.async() : isAsync = true, isYielding = false; |
- const AsyncModifier.asyncStar() : isAsync = true, isYielding = true; |
- const AsyncModifier.syncStar() : isAsync = false, isYielding = true; |
+ final String description; |
+ |
+ const AsyncModifier.sync() |
+ : isAsync = false, |
+ isYielding = false, |
+ description = "sync"; |
+ const AsyncModifier.async() |
+ : isAsync = true, |
+ isYielding = false, |
+ description = "async"; |
+ const AsyncModifier.asyncStar() |
+ : isAsync = true, |
+ isYielding = true, |
+ description = "async*"; |
+ const AsyncModifier.syncStar() |
+ : isAsync = false, |
+ isYielding = true, |
+ description = "sync*"; |
+ toString() => description; |
} |
class PropertyAccess extends Expression { |