| Index: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| index 3b6f76ee79013d81ef939fb1acb27b58a1bb023e..62ba99b99cd3bb68bb76908d578be6c12d65e5a4 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| @@ -938,6 +938,22 @@ class Await extends Expression {
|
| }
|
| }
|
|
|
| +class Yield extends Statement {
|
| + Statement next;
|
| + Expression input;
|
| + final bool hasStar;
|
| +
|
| + Yield(this.input, this.hasStar, this.next);
|
| +
|
| + accept(StatementVisitor visitor) {
|
| + return visitor.visitYield(this);
|
| + }
|
| +
|
| + accept1(StatementVisitor1 visitor, arg) {
|
| + return visitor.visitYield(this, arg);
|
| + }
|
| +}
|
| +
|
| abstract class ExpressionVisitor<E> {
|
| E visitExpression(Expression node) => node.accept(this);
|
| E visitVariableUse(VariableUse node);
|
| @@ -1027,6 +1043,7 @@ abstract class StatementVisitor<S> {
|
| S visitTry(Try node);
|
| S visitUnreachable(Unreachable node);
|
| S visitForeignStatement(ForeignStatement node);
|
| + S visitYield(Yield node);
|
| }
|
|
|
| abstract class StatementVisitor1<S, A> {
|
| @@ -1044,6 +1061,7 @@ abstract class StatementVisitor1<S, A> {
|
| S visitTry(Try node, A arg);
|
| S visitUnreachable(Unreachable node, A arg);
|
| S visitForeignStatement(ForeignStatement node, A arg);
|
| + S visitYield(Yield node, A arg);
|
| }
|
|
|
| abstract class RecursiveVisitor implements StatementVisitor, ExpressionVisitor {
|
| @@ -1253,6 +1271,11 @@ abstract class RecursiveVisitor implements StatementVisitor, ExpressionVisitor {
|
| visitAwait(Await node) {
|
| visitExpression(node.input);
|
| }
|
| +
|
| + visitYield(Yield node) {
|
| + visitExpression(node.input);
|
| + visitStatement(node.next);
|
| + }
|
| }
|
|
|
| abstract class Transformer implements ExpressionVisitor<Expression>,
|
| @@ -1507,6 +1530,11 @@ class RecursiveTransformer extends Transformer {
|
| node.input = visitExpression(node.input);
|
| return node;
|
| }
|
| +
|
| + visitYield(Yield node) {
|
| + node.input = visitExpression(node.input);
|
| + return node;
|
| + }
|
| }
|
|
|
| class FallthroughTarget {
|
|
|