Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1079)

Unified Diff: frog/leg/ssa/builder.dart

Issue 9720024: If there were breaks in a loop, we must not restore the saved localsHandler before entering the loo… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/co19/co19-leg.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/leg/ssa/builder.dart
===================================================================
--- frog/leg/ssa/builder.dart (revision 5618)
+++ frog/leg/ssa/builder.dart (working copy)
@@ -1039,7 +1039,8 @@
*/
void endLoop(HBasicBlock loopEntry,
HBasicBlock branchBlock,
- BreakHandler breakHandler) {
+ BreakHandler breakHandler,
+ LocalsHandler savedLocals) {
HBasicBlock loopExitBlock = addNewBlock();
assert(branchBlock.successors.length == 1);
List<LocalsHandler> breakLocals = <LocalsHandler>[];
@@ -1051,8 +1052,10 @@
open(loopExitBlock);
localsHandler.endLoop(loopEntry);
if (!breakLocals.isEmpty()) {
- breakLocals.add(localsHandler);
+ breakLocals.add(savedLocals);
localsHandler = localsHandler.mergeMultiple(breakLocals, loopExitBlock);
+ } else {
+ localsHandler = savedLocals;
}
}
@@ -1132,8 +1135,7 @@
updateBlock.addSuccessor(conditionBlock);
conditionBlock.postProcessLoopHeader();
- endLoop(conditionBlock, conditionExitBlock, breakHandler);
- localsHandler = savedLocals;
+ endLoop(conditionBlock, conditionExitBlock, breakHandler, savedLocals);
}
visitFor(For node) {
@@ -1167,7 +1169,7 @@
conditionBlock.addSuccessor(loopEntryBlock); // The back-edge.
loopEntryBlock.postProcessLoopHeader();
- endLoop(loopEntryBlock, conditionBlock, breakHandler);
+ endLoop(loopEntryBlock, conditionBlock, breakHandler, localsHandler);
}
visitFunctionExpression(FunctionExpression node) {
@@ -2195,8 +2197,7 @@
updateBlock.addSuccessor(conditionBlock);
conditionBlock.postProcessLoopHeader();
- endLoop(conditionBlock, conditionExitBlock, breakHandler);
- localsHandler = savedLocals;
+ endLoop(conditionBlock, conditionExitBlock, breakHandler, savedLocals);
breakHandler.close();
}
« no previous file with comments | « no previous file | tests/co19/co19-leg.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698