Index: pkg/compiler/lib/src/ssa/builder.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart |
index ade11d4865dc4f1c6123113b926c21ecb851241c..bed03516581a27fa7fc0ac774dd4646a541fccaa 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -866,7 +866,8 @@ class SsaBuilder extends ast.Visitor |
assert(resolvedAst != null); |
localsHandler = new LocalsHandler(this, function, function.memberContext, |
function.contextClass, instanceType, nativeData, interceptorData); |
- localsHandler.closureData = closureToClassMapper.getMemberMap(function); |
+ localsHandler.closureData = |
+ closureToClassMapper.getClosureRepresentationInfo(function); |
returnLocal = |
new SyntheticLocal("result", function, function.memberContext); |
localsHandler.updateLocal(returnLocal, graph.addConstantNull(closedWorld)); |
@@ -1032,16 +1033,16 @@ class SsaBuilder extends ast.Visitor |
resolvedAst = callee.resolvedAst; |
final oldElementInferenceResults = elementInferenceResults; |
elementInferenceResults = globalInferenceResults.resultOfMember(callee); |
- ClosureClassMap oldClosureData = localsHandler.closureData; |
- ClosureClassMap newClosureData = |
- closureToClassMapper.getMemberMap(callee); |
+ ClosureRepresentationInfo oldClosureData = localsHandler.closureData; |
+ ClosureRepresentationInfo newClosureData = |
+ closureToClassMapper.getClosureRepresentationInfo(callee); |
localsHandler.closureData = newClosureData; |
if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
// TODO(efortuna): Take out the test below for null once we are no |
// longer dealing with the ClosureClassMap interface directly. |
if (newClosureData.capturingScopes[resolvedAst.node] != null) { |
localsHandler.enterScope( |
- newClosureData.capturingScopes[resolvedAst.node], |
+ closureToClassMapper.getClosureAnalysisInfo(resolvedAst.node), |
forGenerativeConstructorBody: callee.isGenerativeConstructorBody); |
} |
} |
@@ -1455,9 +1456,11 @@ class SsaBuilder extends ast.Visitor |
}); |
} |
- ClosureClassMap closureData = closureToClassMapper.getMemberMap(element); |
localsHandler.startFunction( |
- element, closureData, closureData.capturingScopes[node], parameters, |
+ element, |
+ closureToClassMapper.getClosureRepresentationInfo(element), |
+ closureToClassMapper.getClosureAnalysisInfo(node), |
+ parameters, |
isGenerativeConstructorBody: element.isGenerativeConstructorBody); |
close(new HGoto()).addSuccessor(block); |
@@ -1898,25 +1901,20 @@ class SsaBuilder extends ast.Visitor |
visitFunctionExpression(ast.FunctionExpression node) { |
LocalFunctionElement methodElement = elements[node]; |
- ClosureClassMap nestedClosureData = |
- closureToClassMapper.getLocalFunctionMap(methodElement); |
- assert(nestedClosureData != null); |
- assert(nestedClosureData.closureClassElement != null); |
- ClosureClassElement closureClassElement = |
- nestedClosureData.closureClassElement; |
- MethodElement callElement = nestedClosureData.callElement; |
+ |
+ ClosureRepresentationInfo closureInfo = |
+ closureToClassMapper.getClosureRepresentationInfo(methodElement); |
+ ClassEntity closureClassElement = closureInfo.closureClassEntity; |
List<HInstruction> capturedVariables = <HInstruction>[]; |
- closureClassElement.closureFields.forEach((ClosureFieldElement field) { |
- Local capturedLocal = |
- nestedClosureData.getLocalVariableForClosureField(field); |
- assert(capturedLocal != null); |
- capturedVariables.add(localsHandler.readLocal(capturedLocal)); |
+ closureInfo.createdFieldEntities.forEach((Local field) { |
+ assert(field != null); |
+ capturedVariables.add(localsHandler.readLocal(field)); |
}); |
TypeMask type = new TypeMask.nonNullExact(closureClassElement, closedWorld); |
push(new HCreate(closureClassElement, capturedVariables, type, |
- callMethod: callElement, localFunction: methodElement) |
+ callMethod: closureInfo.callEntity, localFunction: methodElement) |
..sourceInformation = sourceInformationBuilder.buildCreate(node)); |
} |