Index: pkg/compiler/lib/src/ssa/nodes.dart |
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart |
index 7337b7b14c7a41568c706f8ce58ad313f60a836d..534fd5714d054753c0949e53703dd6080793e7cc 100644 |
--- a/pkg/compiler/lib/src/ssa/nodes.dart |
+++ b/pkg/compiler/lib/src/ssa/nodes.dart |
@@ -6,6 +6,7 @@ part of ssa; |
abstract class HVisitor<R> { |
R visitAdd(HAdd node); |
+ R visitAwait(HAwait node); |
R visitBitAnd(HBitAnd node); |
R visitBitNot(HBitNot node); |
R visitBitOr(HBitOr node); |
@@ -71,6 +72,7 @@ abstract class HVisitor<R> { |
R visitTry(HTry node); |
R visitTypeConversion(HTypeConversion node); |
R visitTypeKnown(HTypeKnown node); |
+ R visitYield(HYield node); |
R visitReadTypeVariable(HReadTypeVariable node); |
R visitFunctionType(HFunctionType node); |
R visitVoidType(HVoidType node); |
@@ -354,6 +356,8 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor { |
visitVoidType(HVoidType node) => visitInstruction(node); |
visitInterfaceType(HInterfaceType node) => visitInstruction(node); |
visitDynamicType(HDynamicType node) => visitInstruction(node); |
+ visitAwait(HAwait node) => visitInstruction(node); |
+ visitYield(HYield node) => visitInstruction(node); |
} |
class SubGraph { |
@@ -2234,6 +2238,26 @@ class HThrowExpression extends HInstruction { |
bool canThrow() => true; |
} |
+class HAwait extends HInstruction { |
+ HAwait(HInstruction value, TypeMask type) |
+ : super(<HInstruction>[value], type); |
+ toString() => 'await'; |
+ accept(HVisitor visitor) => visitor.visitAwait(this); |
+ // An await will throw if its argument is not a real future. |
+ bool canThrow() => true; |
+ SideEffects sideEffects = new SideEffects(); |
+} |
+ |
+class HYield extends HInstruction { |
+ HYield(HInstruction value, this.hasStar) |
+ : super(<HInstruction>[value], const TypeMask.nonNullEmpty()); |
+ bool hasStar; |
+ toString() => 'yield'; |
+ accept(HVisitor visitor) => visitor.visitYield(this); |
+ bool canThrow() => false; |
+ SideEffects sideEffects = new SideEffects(); |
+} |
+ |
class HThrow extends HControlFlow { |
final bool isRethrow; |
HThrow(value, {this.isRethrow: false}) : super(<HInstruction>[value]); |