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

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

Issue 2898983005: Add ClosureClassMaps super interface for ClosureTask (Closed)
Patch Set: Created 3 years, 7 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_kernel.dart
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 925ea87522b3f7cf0274ccb61b3230c39974e147..0924b9317ac29be0e89e604700c917bd4d1ef428 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -45,8 +45,8 @@ import 'type_builder.dart';
import 'types.dart' show TypeMaskFactory;
class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
- ir.Node target;
- bool _targetIsConstructorBody = false;
+ final ir.Node target;
+ final bool _targetIsConstructorBody;
final MemberEntity targetElement;
/// The root node of [targetElement]. This is used as the key into the
@@ -56,6 +56,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
final Node functionNode;
final ClosedWorld closedWorld;
final CodegenRegistry registry;
+ final ClosureClassMaps closureToClassMapper;
/// Helper accessor for all kernel function-like targets (Procedure,
/// FunctionExpression, FunctionDeclaration) of the inner FunctionNode itself.
@@ -97,14 +98,18 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
KernelSsaBuilder(
this.targetElement,
+ this.target,
this.compiler,
this._elementMap,
this._typeInferenceMap,
this.closedWorld,
this.registry,
+ this.closureToClassMapper,
// TODO(het): Should sourceInformationBuilder be in GraphBuilder?
this.sourceInformationBuilder,
- this.functionNode) {
+ this.functionNode,
+ {bool targetIsConstructorBody: false})
+ : this._targetIsConstructorBody = targetIsConstructorBody {
this.loopHandler = new KernelLoopHandler(this);
typeBuilder = new TypeBuilder(this);
graph.element = targetElement;
@@ -112,10 +117,6 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
sourceInformationBuilder.buildVariableDeclaration();
this.localsHandler = new LocalsHandler(this, targetElement, targetElement,
targetElement.enclosingClass, null, nativeData, interceptorData);
- target = astAdapter.getInitialKernelNode(targetElement);
- if (targetElement is ConstructorBodyElement) {
- _targetIsConstructorBody = true;
- }
_targetStack.add(target);
}
@@ -314,8 +315,8 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
// arguments.
ConstructorElement constructorElement = astAdapter.getElement(body);
- ClosureClassMap parameterClosureData = closureToClassMapper
- .getClosureToClassMapping(constructorElement.resolvedAst);
+ ClosureClassMap parameterClosureData =
+ closureToClassMapper.getMemberMap(constructorElement);
var functionSignature = astAdapter.getFunctionSignature(body.function);
// Provide the parameters to the generative constructor body.
@@ -583,15 +584,15 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
// Set the locals handler state as if we were inlining the constructor.
astAdapter.pushResolvedAst(constructor);
- AstElement astElement = astAdapter.getElement(constructor);
+ ConstructorElement astElement = astAdapter.getElement(constructor);
ResolvedAst resolvedAst = astElement.resolvedAst;
ClosureClassMap oldClosureData = localsHandler.closureData;
ClosureClassMap newClosureData =
- compiler.closureToClassMapper.getClosureToClassMapping(resolvedAst);
+ closureToClassMapper.getMemberMap(astElement);
localsHandler.closureData = newClosureData;
if (resolvedAst.kind == ResolvedAstKind.PARSED) {
- localsHandler.enterScope(
- resolvedAst.node, astAdapter.getElement(constructor));
+ localsHandler.enterScope(resolvedAst.node,
+ forGenerativeConstructorBody: astElement.isGenerativeConstructorBody);
}
inlinedFrom(constructor, () {
_buildInitializers(constructor, constructorChain, fieldValues);
@@ -663,7 +664,8 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
HBasicBlock block = graph.addNewBlock();
open(graph.entry);
- localsHandler.startFunction(targetElement, functionNode);
+ localsHandler.startFunction(targetElement, functionNode,
+ isGenerativeConstructorBody: _targetIsConstructorBody);
close(new HGoto()).addSuccessor(block);
open(block);
@@ -720,7 +722,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
Element callMethodOfClosureClass() {
LocalFunctionElement element = astAdapter.getElement(target);
ClosureClassMap classMap =
- closureToClassMapper.getClosureToClassMapping(element.resolvedAst);
+ closureToClassMapper.getLocalFunctionMap(element);
return classMap.callElement;
}
@@ -2243,7 +2245,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
@override
void visitStaticInvocation(ir.StaticInvocation invocation) {
ir.Procedure target = invocation.target;
- if (astAdapter.isForeignLibrary(target.enclosingLibrary)) {
+ if (_elementMap.isForeignLibrary(target.enclosingLibrary)) {
handleInvokeStaticForeign(invocation, target);
return;
}
@@ -2755,8 +2757,8 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
@override
visitFunctionNode(ir.FunctionNode node) {
LocalFunctionElement methodElement = astAdapter.getElement(node);
- ClosureClassMap nestedClosureData = closureToClassMapper
- .getClosureToClassMapping(methodElement.resolvedAst);
+ ClosureClassMap nestedClosureData =
+ closureToClassMapper.getLocalFunctionMap(methodElement);
assert(nestedClosureData != null);
assert(nestedClosureData.closureClassElement != null);
ClosureClassElement closureClassElement =

Powered by Google App Engine
This is Rietveld 408576698