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

Unified Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 2915523003: Create new interface instead of ClosureClassMap for variable usage information that is not Element-…
Patch Set: merge with master Created 3 years, 6 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
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));
}
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart ('k') | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698