Index: pkg/compiler/lib/src/ssa/builder_kernel.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
index 3b99d41a9118892dca5ed2581417a263c1eec67b..a871c8cfe208e149918c145edecebf0cd2ea543d 100644 |
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
@@ -609,7 +609,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
ClosureRepresentationInfo newClosureData = |
closureDataLookup.getClosureRepresentationInfo(astElement); |
if (astElement is ConstructorElement) { |
- // TODO(johnniwinther): Support constructor (body) entities. |
+ // TODO(redemption): Support constructor (body) entities. |
ResolvedAst resolvedAst = astElement.resolvedAst; |
localsHandler.closureData = newClosureData; |
if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
@@ -659,7 +659,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
visitThen: () { |
closeAndGotoExit(new HReturn( |
graph.addConstantBool(false, closedWorld), |
- // TODO(johnniwinther): Provider source information like |
+ // TODO(redemption): Provider source information like |
// `sourceInformationBuilder.buildImplicitReturn(method)`. |
null)); |
}, |
@@ -911,6 +911,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
forStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, forStatement), |
+ localsMap.getJumpTargetForFor(forStatement), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -1040,6 +1041,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
forInStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, forInStatement), |
+ localsMap.getJumpTargetForForIn(forInStatement), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -1091,6 +1093,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
forInStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, forInStatement), |
+ localsMap.getJumpTargetForForIn(forInStatement), |
buildInitializer, |
buildCondition, |
() {}, |
@@ -1138,6 +1141,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
forInStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, forInStatement), |
+ localsMap.getJumpTargetForForIn(forInStatement), |
buildInitializer, |
buildCondition, |
buildUpdate, |
@@ -1189,6 +1193,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
whileStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, whileStatement), |
+ localsMap.getJumpTargetForWhile(whileStatement), |
() {}, |
buildCondition, |
() {}, () { |
@@ -1204,11 +1209,11 @@ class KernelSsaGraphBuilder extends ir.Visitor |
LoopClosureRepresentationInfo loopClosureInfo = localsMap |
.getClosureRepresentationInfoForLoop(closureDataLookup, doStatement); |
localsHandler.startLoop(loopClosureInfo); |
- JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement); |
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement); |
+ JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement, target); |
HLoopInformation loopInfo = current.loopInformation; |
HBasicBlock loopEntryBlock = current; |
HBasicBlock bodyEntryBlock = current; |
- JumpTarget target = localsMap.getJumpTarget(doStatement); |
bool hasContinues = target != null && target.isContinueTarget; |
if (hasContinues) { |
// Add extra block to hang labels on. |
@@ -1304,7 +1309,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
null, |
loopEntryBlock.loopInformation.target, |
loopEntryBlock.loopInformation.labels, |
- // TODO(johnniwinther): Provide source information like: |
+ // TODO(redemption): Provide source information like: |
// sourceInformationBuilder.buildLoop(astAdapter.getNode(doStatement)) |
null); |
loopEntryBlock.setBlockFlow(loopBlockInfo, current); |
@@ -1322,9 +1327,9 @@ class KernelSsaGraphBuilder extends ir.Visitor |
// Since the body of the loop has a break, we attach a synthesized label |
// to the body. |
SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock); |
- JumpTarget target = localsMap.getJumpTarget(doStatement); |
- LabelDefinition label = target.addLabel(null, 'loop'); |
- label.setBreakTarget(); |
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement); |
+ LabelDefinition label = |
+ target.addLabel(null, 'loop', isBreakTarget: true); |
HLabeledBlockInformation info = new HLabeledBlockInformation( |
new HSubGraphBlockInformation(bodyGraph), <LabelDefinition>[label]); |
loopEntryBlock.setBlockFlow(info, current); |
@@ -1446,8 +1451,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
/// [isLoopJump] is true when the jump handler is for a loop. This is used |
/// to distinguish the synthesized loop created for a switch statement with |
/// continue statements from simple switch statements. |
- JumpHandler createJumpHandler(ir.TreeNode node, {bool isLoopJump: false}) { |
- JumpTarget target = localsMap.getJumpTarget(node); |
+ JumpHandler createJumpHandler(ir.TreeNode node, JumpTarget target, |
+ {bool isLoopJump: false}) { |
if (target == null) { |
// No breaks or continues to this node. |
return new NullJumpHandler(reporter); |
@@ -1463,7 +1468,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
void visitBreakStatement(ir.BreakStatement breakStatement) { |
assert(!isAborted()); |
handleInTryStatement(); |
- JumpTarget target = localsMap.getJumpTarget(breakStatement.target); |
+ JumpTarget target = localsMap.getJumpTargetForBreak(breakStatement); |
assert(target != null); |
JumpHandler handler = jumpTargets[target]; |
assert(handler != null); |
@@ -1486,7 +1491,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
body.accept(this); |
return; |
} |
- JumpHandler handler = createJumpHandler(labeledStatement); |
+ JumpHandler handler = createJumpHandler( |
+ labeledStatement, localsMap.getJumpTargetForLabel(labeledStatement)); |
LocalsHandler beforeLocals = new LocalsHandler.from(localsHandler); |
@@ -1536,7 +1542,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
void visitContinueSwitchStatement( |
ir.ContinueSwitchStatement switchStatement) { |
handleInTryStatement(); |
- JumpTarget target = localsMap.getJumpTarget(switchStatement.target); |
+ JumpTarget target = |
+ localsMap.getJumpTargetForContinueSwitch(switchStatement); |
assert(target != null); |
JumpHandler handler = jumpTargets[target]; |
assert(handler != null); |
@@ -1563,7 +1570,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
switchIndex++; |
} |
- JumpHandler jumpHandler = createJumpHandler(switchStatement); |
+ JumpHandler jumpHandler = createJumpHandler( |
+ switchStatement, localsMap.getJumpTargetForSwitch(switchStatement)); |
if (!hasContinue) { |
// If the switch statement has no switch cases targeted by continue |
// statements we encode the switch statement directly. |
@@ -1656,7 +1664,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
// This is because JS does not have this same "continue label" semantics so |
// we encode it in the form of a state machine. |
- JumpTarget switchTarget = localsMap.getJumpTarget(switchStatement); |
+ JumpTarget switchTarget = localsMap.getJumpTargetForSwitch(switchStatement); |
localsHandler.updateLocal(switchTarget, graph.addConstantNull(closedWorld)); |
var switchCases = switchStatement.cases; |
@@ -1725,6 +1733,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
switchStatement, |
localsMap.getClosureRepresentationInfoForLoop( |
closureDataLookup, switchStatement), |
+ switchTarget, |
() {}, |
buildCondition, |
() {}, |