Index: pkg/compiler/lib/src/ssa/loop_handler.dart |
diff --git a/pkg/compiler/lib/src/ssa/loop_handler.dart b/pkg/compiler/lib/src/ssa/loop_handler.dart |
index 6e7ad540b2594492c0e9f7f5327ea04623d86d52..48095be15dba8874a5240b220ccc229d9960bd22 100644 |
--- a/pkg/compiler/lib/src/ssa/loop_handler.dart |
+++ b/pkg/compiler/lib/src/ssa/loop_handler.dart |
@@ -4,6 +4,7 @@ |
import 'package:kernel/ast.dart' as ir; |
+import '../closure.dart'; |
import '../elements/elements.dart' show JumpTarget, LabelDefinition; |
import '../io/source_information.dart'; |
import '../tree/tree.dart' as ast; |
@@ -38,7 +39,7 @@ abstract class LoopHandler<T> { |
// goto loop-entry; |
// loop-exit: |
- builder.localsHandler.startLoop(getNode(loop)); |
+ builder.localsHandler.startLoop(getClosureScopeForLoop(loop)); |
// The initializer. |
SubExpression initializerGraph = null; |
@@ -73,7 +74,7 @@ abstract class LoopHandler<T> { |
conditionEndBlock.addSuccessor(beginBodyBlock); |
builder.open(beginBodyBlock); |
- builder.localsHandler.enterLoopBody(getNode(loop)); |
+ builder.localsHandler.enterLoopBody(getClosureScopeForLoop(loop)); |
body(); |
SubGraph bodyGraph = new SubGraph(beginBodyBlock, builder.lastOpenedBlock); |
@@ -122,7 +123,7 @@ abstract class LoopHandler<T> { |
updateBlock); |
} |
- builder.localsHandler.enterLoopUpdates(getNode(loop)); |
+ builder.localsHandler.enterLoopUpdates(getClosureScopeForLoop(loop)); |
update(); |
@@ -287,8 +288,8 @@ abstract class LoopHandler<T> { |
/// Returns the jump target defined by [node]. |
JumpTarget getTargetDefinition(T node); |
- /// Returns the corresponding AST node for [node]. |
- ast.Node getNode(T node); |
+ /// Returns closure scope data for [node]. |
+ ClosureScope getClosureScopeForLoop(T node); |
/// Determine what kind of loop [node] represents. |
/// |
@@ -322,7 +323,9 @@ class SsaLoopHandler extends LoopHandler<ast.Node> { |
} |
@override |
- ast.Node getNode(ast.Node node) => node; |
+ ClosureScope getClosureScopeForLoop(ast.Node node) { |
+ return builder.localsHandler.closureData.capturingScopes[node]; |
+ } |
@override |
int loopKind(ast.Node node) => node.accept(const _SsaLoopTypeVisitor()); |
@@ -364,11 +367,14 @@ class KernelLoopHandler extends LoopHandler<ir.TreeNode> { |
builder.createJumpHandler(node, isLoopJump: isLoopJump); |
@override |
- ast.Node getNode(ir.TreeNode node) => astAdapter.getNode(node); |
+ ClosureScope getClosureScopeForLoop(ir.TreeNode node) { |
+ return builder.localsMap |
+ .getClosureScopeForLoop(builder.localsHandler.closureData, node); |
+ } |
@override |
JumpTarget getTargetDefinition(ir.TreeNode node) => |
- astAdapter.getJumpTarget(node); |
+ builder.localsMap.getJumpTarget(node); |
@override |
int loopKind(ir.TreeNode node) => node.accept(new _KernelLoopTypeVisitor()); |