Index: pkg/compiler/lib/src/ssa/builder.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart |
index 1411cde5d64c673b8c6e71bcfea960ebf49d508d..08a9b757fe2203f9a58adc57bccba79d57b128a4 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -1707,6 +1707,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ elements.getTargetDefinition(node), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -1723,6 +1724,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ elements.getTargetDefinition(node), |
() {}, |
buildCondition, |
() {}, () { |
@@ -1737,11 +1739,11 @@ class SsaAstGraphBuilder extends ast.Visitor |
closureDataLookup.getClosureRepresentationInfoForLoop(node); |
localsHandler.startLoop(loopClosureInfo); |
loopDepth++; |
- JumpHandler jumpHandler = loopHandler.beginLoopHeader(node); |
+ JumpTarget target = elements.getTargetDefinition(node); |
+ JumpHandler jumpHandler = loopHandler.beginLoopHeader(node, target); |
HLoopInformation loopInfo = current.loopInformation; |
HBasicBlock loopEntryBlock = current; |
HBasicBlock bodyEntryBlock = current; |
- JumpTarget target = elements.getTargetDefinition(node); |
bool hasContinues = target != null && target.isContinueTarget; |
if (hasContinues) { |
// Add extra block to hang labels on. |
@@ -1854,8 +1856,8 @@ class SsaAstGraphBuilder extends ast.Visitor |
// to the body. |
SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock); |
JumpTarget target = elements.getTargetDefinition(node); |
- LabelDefinition label = target.addLabel(null, 'loop'); |
- label.setBreakTarget(); |
+ LabelDefinition label = |
+ target.addLabel(null, 'loop', isBreakTarget: true); |
HLabeledBlockInformation info = new HLabeledBlockInformation( |
new HSubGraphBlockInformation(bodyGraph), <LabelDefinition>[label]); |
loopEntryBlock.setBlockFlow(info, current); |
@@ -5378,18 +5380,18 @@ class SsaAstGraphBuilder extends ast.Visitor |
* to distinguish the synthesized loop created for a switch statement with |
* continue statements from simple switch statements. |
*/ |
- JumpHandler createJumpHandler(ast.Statement node, {bool isLoopJump}) { |
- JumpTarget element = elements.getTargetDefinition(node); |
- if (element == null || !identical(element.statement, node)) { |
+ JumpHandler createJumpHandler(ast.Statement node, JumpTarget jumpTarget, |
+ {bool isLoopJump}) { |
+ if (jumpTarget == null || !identical(jumpTarget.statement, node)) { |
// No breaks or continues to this node. |
return new NullJumpHandler(reporter); |
} |
if (isLoopJump && node is ast.SwitchStatement) { |
// Create a special jump handler for loops created for switch statements |
// with continue statements. |
- return new AstSwitchCaseJumpHandler(this, element, node); |
+ return new AstSwitchCaseJumpHandler(this, jumpTarget, node); |
} |
- return new JumpHandler(this, element); |
+ return new JumpHandler(this, jumpTarget); |
} |
visitAsyncForIn(ast.AsyncForIn node) { |
@@ -5445,6 +5447,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ elements.getTargetDefinition(node), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -5517,6 +5520,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ elements.getTargetDefinition(node), |
buildInitializer, |
buildCondition, |
() {}, |
@@ -5641,6 +5645,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ elements.getTargetDefinition(node), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -5840,7 +5845,9 @@ class SsaAstGraphBuilder extends ast.Visitor |
*/ |
void buildSimpleSwitchStatement( |
ast.SwitchStatement node, Map<ast.CaseMatch, ConstantValue> constants) { |
- JumpHandler jumpHandler = createJumpHandler(node, isLoopJump: false); |
+ JumpHandler jumpHandler = createJumpHandler( |
+ node, elements.getTargetDefinition(node), |
+ isLoopJump: false); |
HInstruction buildExpression() { |
visit(node.expression); |
return pop(); |
@@ -5910,7 +5917,8 @@ class SsaAstGraphBuilder extends ast.Visitor |
HInstruction initialValue = graph.addConstantNull(closedWorld); |
localsHandler.updateLocal(switchTarget, initialValue); |
- JumpHandler jumpHandler = createJumpHandler(node, isLoopJump: false); |
+ JumpHandler jumpHandler = |
+ createJumpHandler(node, switchTarget, isLoopJump: false); |
dynamic switchCases = node.cases; |
if (!hasDefault) { |
// Use [:null:] as the marker for a synthetic default clause. |
@@ -5994,6 +6002,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
loopHandler.handleLoop( |
node, |
closureDataLookup.getClosureRepresentationInfoForLoop(node), |
+ switchTarget, |
() {}, |
buildCondition, |
() {}, |