Chromium Code Reviews| 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 a924a681ca2111a170502ec701844acf55468748..108248ce9ff6f1b9860899edac18fa93d65217d9 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| @@ -901,11 +901,12 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| forStatement.body.accept(this); |
| } |
| + JumpTarget jumpTarget = localsMap.getJumpTargetForFor(forStatement); |
| loopHandler.handleLoop( |
| forStatement, |
| localsMap.getClosureRepresentationInfoForLoop( |
| closureDataLookup, forStatement), |
| - localsMap.getJumpTargetForFor(forStatement), |
| + jumpTarget, |
| buildInitializer, |
| buildCondition, |
| buildUpdate, |
| @@ -1466,10 +1467,18 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| assert(target != null); |
| JumpHandler handler = jumpTargets[target]; |
| assert(handler != null); |
| - if (handler.labels.isNotEmpty) { |
| - handler.generateBreak(handler.labels.first); |
| + if (localsMap.generateContinueForBreak(breakStatement)) { |
| + if (handler.labels.isNotEmpty) { |
| + handler.generateContinue(handler.labels.first); |
|
Siggi Cherem (dart-lang)
2017/06/23 21:03:59
is this label in the right place?
or do we need t
Johnni Winther
2017/06/26 11:27:56
It's the responsibility of the jump target (here t
|
| + } else { |
| + handler.generateContinue(); |
| + } |
| } else { |
| - handler.generateBreak(); |
| + if (handler.labels.isNotEmpty) { |
| + handler.generateBreak(handler.labels.first); |
| + } else { |
| + handler.generateBreak(); |
| + } |
| } |
| } |
| @@ -1485,8 +1494,14 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| body.accept(this); |
| return; |
| } |
| - JumpHandler handler = createJumpHandler( |
| - labeledStatement, localsMap.getJumpTargetForLabel(labeledStatement)); |
| + JumpTarget jumpTarget = localsMap.getJumpTargetForLabel(labeledStatement); |
|
Siggi Cherem (dart-lang)
2017/06/23 21:03:59
I thought eventually the visitor was going to gene
Johnni Winther
2017/06/26 11:27:56
No, only for those that _are_ targets. An untarget
|
| + if (jumpTarget == null) { |
| + // The label is not needed. |
| + body.accept(this); |
| + return; |
| + } |
| + |
| + JumpHandler handler = createJumpHandler(labeledStatement, jumpTarget); |
| LocalsHandler beforeLocals = new LocalsHandler.from(localsHandler); |