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..5e35d0744b724df38461cae96eefa4a360538aa2 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 visitYield(Yield 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 visitYield(Yield node) => visitStatement(node); |
} |
abstract class Node { |
@@ -532,6 +534,22 @@ class LiteralStatement extends Statement { |
LiteralStatement _clone() => new LiteralStatement(code); |
} |
+class Yield extends Statement { |
floitsch
2015/02/02 22:00:06
Add comment.
There exists a JS yield, and this one
sigurdm
2015/02/03 16:59:27
I was not aware of js yield, I renamed this to Dar
|
+ final Expression expression; |
+ |
+ final bool hasStar; |
+ |
+ Yield(this.expression, this.hasStar); |
+ |
+ accept(NodeVisitor visitor) => visitor.visitYield(this); |
+ |
+ void visitChildren(NodeVisitor visitor) { |
+ expression.accept(visitor); |
+ } |
+ |
+ Yield _clone() => new Yield(expression, hasStar); |
+} |
+ |
abstract class Expression extends Node { |
int get precedenceLevel; |
@@ -862,7 +880,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 +888,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 { |