Chromium Code Reviews| Index: frog/leg/ssa/builder.dart |
| diff --git a/frog/leg/ssa/builder.dart b/frog/leg/ssa/builder.dart |
| index c75d86b755013ebb3f999eddf7680a956565e96c..477386ffdf55510aa5ef958c1dc04750c5d278c6 100644 |
| --- a/frog/leg/ssa/builder.dart |
| +++ b/frog/leg/ssa/builder.dart |
| @@ -2234,6 +2234,7 @@ class SsaBuilder implements Visitor { |
| goto(current, entryBlock); |
| open(entryBlock); |
| visit(body); |
| + SubGraph bodyGraph = new SubGraph(entryBlock, lastOpenedBlock); |
| if (isAborted()) { |
| compiler.unimplemented( |
| "SsaBuilder for labeled statement with aborting body", node: node); |
| @@ -2256,15 +2257,9 @@ class SsaBuilder implements Visitor { |
| if (hasBreak) { |
| // There was at least one reachable break, so the label is needed. |
| HLabeledBlockInformation blockInfo = |
| - new HLabeledBlockInformation(entryBlock, current, |
| - handler.labels()); |
| + new HLabeledBlockInformation(bodyGraph, joinBlock, handler.labels()); |
| handler.close(); |
|
ngeoffray
2012/03/06 11:17:37
Move the close around?
Lasse Reichstein Nielsen
2012/03/08 09:02:02
I did. On another computer. Bad sync!
|
| - // Mark both entry and exit with the information. You can |
| - // tell which one is which by comparing with blockInfo.start/end. |
| - // It doesn't matter which merge block we use, they won't be generating |
| - // any code, so put the end-marker on the last join block. |
| entryBlock.labeledBlockInformation = blockInfo; |
| - current.labeledBlockInformation = blockInfo; |
| } |
| } |