| Index: lib/compiler/implementation/ssa/nodes.dart
|
| diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart
|
| index d9f52e8b6f2dfe35ee473f6fd373049149999bd3..a6d20d5cadabd7571ef94d10d6b072b6b78b52d1 100644
|
| --- a/lib/compiler/implementation/ssa/nodes.dart
|
| +++ b/lib/compiler/implementation/ssa/nodes.dart
|
| @@ -254,8 +254,8 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor {
|
| visitBitXor(HBitXor node) => visitBinaryBitOp(node);
|
| visitBoolify(HBoolify node) => visitInstruction(node);
|
| visitBoundsCheck(HBoundsCheck node) => visitCheck(node);
|
| - visitBreak(HBreak node) => visitGoto(node);
|
| - visitContinue(HContinue node) => visitGoto(node);
|
| + visitBreak(HBreak node) => visitJump(node);
|
| + visitContinue(HContinue node) => visitJump(node);
|
| visitCheck(HCheck node) => visitInstruction(node);
|
| visitConstant(HConstant node) => visitInstruction(node);
|
| visitDivide(HDivide node) => visitBinaryArithmetic(node);
|
| @@ -285,6 +285,7 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor {
|
| => visitInvokeStatic(node);
|
| visitInvokeStatic(HInvokeStatic node) => visitInvoke(node);
|
| visitInvokeSuper(HInvokeSuper node) => visitInvoke(node);
|
| + visitJump(HJump node) => visitControlFlow(node);
|
| visitLess(HLess node) => visitRelational(node);
|
| visitLessEqual(HLessEqual node) => visitRelational(node);
|
| visitLiteralList(HLiteralList node) => visitInstruction(node);
|
| @@ -1661,20 +1662,24 @@ class HGoto extends HControlFlow {
|
| accept(HVisitor visitor) => visitor.visitGoto(this);
|
| }
|
|
|
| -class HBreak extends HGoto {
|
| +abstract class HJump extends HControlFlow {
|
| final TargetElement target;
|
| final LabelElement label;
|
| - HBreak(this.target) : label = null;
|
| - HBreak.toLabel(LabelElement label) : label = label, target = label.target;
|
| + HJump(this.target) : label = null, super(const <HInstruction>[]);
|
| + HJump.toLabel(LabelElement label)
|
| + : label = label, target = label.target, super(const <HInstruction>[]);
|
| +}
|
| +
|
| +class HBreak extends HJump {
|
| + HBreak(TargetElement target) : super(target);
|
| + HBreak.toLabel(LabelElement label) : super.toLabel(label);
|
| toString() => (label !== null) ? 'break ${label.labelName}' : 'break';
|
| accept(HVisitor visitor) => visitor.visitBreak(this);
|
| }
|
|
|
| -class HContinue extends HGoto {
|
| - final TargetElement target;
|
| - final LabelElement label;
|
| - HContinue(this.target) : label = null;
|
| - HContinue.toLabel(LabelElement label) : label = label, target = label.target;
|
| +class HContinue extends HJump {
|
| + HContinue(TargetElement target) : super(target);
|
| + HContinue.toLabel(LabelElement label) : super.toLabel(label);
|
| toString() => (label !== null) ? 'continue ${label.labelName}' : 'continue';
|
| accept(HVisitor visitor) => visitor.visitContinue(this);
|
| }
|
|
|