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 fd57333892b446f392300b0ae472f546de28e702..461e7261e7c84bdd62ecac7eab53fd86cc9723ef 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -867,7 +867,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)); |
@@ -1033,18 +1034,14 @@ 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], |
- forGenerativeConstructorBody: callee.isGenerativeConstructorBody); |
- } |
+ localsHandler.enterScope( |
+ closureToClassMapper.getClosureAnalysisInfo(resolvedAst.node), |
+ forGenerativeConstructorBody: callee.isGenerativeConstructorBody); |
} |
buildInitializers(callee, constructorResolvedAsts, fieldValues); |
localsHandler.closureData = oldClosureData; |
@@ -1456,9 +1453,10 @@ class SsaBuilder extends ast.Visitor |
}); |
} |
- ClosureClassMap closureData = closureToClassMapper.getMemberMap(element); |
- localsHandler.startFunction( |
- element, closureData, closureData.capturingScopes[node], parameters, |
+ ClosureRepresentationInfo closureData = |
+ closureToClassMapper.getClosureRepresentationInfo(element); |
+ localsHandler.startFunction(element, closureData, |
+ closureToClassMapper.getClosureAnalysisInfo(node), parameters, |
isGenerativeConstructorBody: element.isGenerativeConstructorBody); |
close(new HGoto()).addSuccessor(block); |
@@ -1899,25 +1897,19 @@ 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 closureClassEntity = 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) |
+ TypeMask type = new TypeMask.nonNullExact(closureClassEntity, closedWorld); |
+ push(new HCreate(closureClassEntity, capturedVariables, type, |
+ callMethod: closureInfo.callMethod, localFunction: methodElement) |
..sourceInformation = sourceInformationBuilder.buildCreate(node)); |
} |