Chromium Code Reviews| 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 { |