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

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

Issue 3002313002: Use KernelTypeGraphBuilder in KernelInferrerEngine (Closed)
Patch Set: Updated cf. comments. Created 3 years, 4 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
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder.dart ('k') | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/inferrer/builder_kernel.dart
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 32e6a24bd117ac0f41c548b35e1240deed748d7e..ffaa718679fd3c9864cabced7f1a7c397db30a3d 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -5,12 +5,10 @@
import 'package:kernel/ast.dart' as ir;
import '../closure.dart';
+import '../common.dart';
import '../compiler.dart';
-import '../elements/elements.dart';
import '../elements/entities.dart';
-import '../kernel/kernel.dart';
-import '../ssa/kernel_ast_adapter.dart';
-import '../tree/tree.dart' as ast;
+import '../kernel/element_map.dart';
import '../universe/side_effects.dart' show SideEffects;
import 'inferrer_engine.dart';
import 'locals_handler.dart';
@@ -25,67 +23,51 @@ import 'type_system.dart';
/// is doing.
class KernelTypeGraphBuilder extends ir.Visitor<TypeInformation> {
final Compiler compiler;
- final MemberElement originalElement;
- // TODO(efortuna): Remove this.
- final MemberElement outermostElement;
+ final MemberEntity analyzedMember;
final ir.Node analyzedNode;
- final ResolvedAst resolvedAst;
- // TODO(johnniwinther): This should be TypeSystem<ir.Node>.
- final TypeSystem<ast.Node> types;
+ final TypeSystem<ir.Node> types;
LocalsHandler locals;
- final InferrerEngine inferrer;
+ final InferrerEngine<ir.Node> inferrer;
SideEffects sideEffects = new SideEffects.empty();
int loopLevel = 0;
bool get inLoop => loopLevel > 0;
- final Set<Entity> capturedVariables = new Set<Entity>();
+ final Set<Local> capturedVariables = new Set<Local>();
- final KernelAstAdapter astAdapter;
-
- KernelTypeGraphBuilder.internal(
- this.originalElement,
- this.resolvedAst,
- this.outermostElement,
- this.inferrer,
- this.compiler,
- this.locals,
- this.astAdapter,
- this.analyzedNode)
+ KernelTypeGraphBuilder.internal(this.analyzedMember, this.inferrer,
+ this.compiler, this.locals, this.analyzedNode)
: this.types = inferrer.types {
if (locals != null) return;
- ast.Node node;
- if (resolvedAst.kind == ResolvedAstKind.PARSED) {
- node = resolvedAst.node;
- }
- FieldInitializationScope fieldScope = (analyzedNode is ir.Constructor)
- ? new FieldInitializationScope(types)
- : null;
- locals =
- new LocalsHandler(inferrer, types, compiler.options, node, fieldScope);
+ FieldInitializationScope<ir.Node> fieldScope =
+ analyzedNode is ir.Constructor
+ ? new FieldInitializationScope(types)
+ : null;
+ locals = new LocalsHandler(
+ inferrer, types, compiler.options, analyzedNode, fieldScope);
}
factory KernelTypeGraphBuilder(
- MemberElement element, Compiler compiler, InferrerEngine inferrer,
- [LocalsHandler handler]) {
- var adapter = _createKernelAdapter(compiler, element.resolvedAst);
- var node = adapter.getMemberNode(element);
+ MemberEntity element,
+ Compiler compiler,
+ KernelToElementMapForBuilding elementMap,
+ InferrerEngine<ir.Node> inferrer,
+ [LocalsHandler<ir.Node> handler]) {
+ ir.Node analyzedNode;
+ MemberDefinition definition = elementMap.getMemberDefinition(element);
+ switch (definition.kind) {
+ case MemberKind.regular:
+ case MemberKind.closureCall:
+ case MemberKind.constructor:
+ case MemberKind.constructorBody:
+ analyzedNode = definition.node;
+ break;
+ case MemberKind.closureField:
+ failedAt(element, "Unexpected member: $definition");
+ break;
+ }
return new KernelTypeGraphBuilder.internal(
- element,
- element.resolvedAst,
- element.outermostEnclosingMemberOrTopLevel.implementation,
- inferrer,
- compiler,
- handler,
- adapter,
- node);
- }
-
- static KernelAstAdapter _createKernelAdapter(
- Compiler compiler, ResolvedAst resolvedAst) {
- Kernel kernel = compiler.backend.kernelTask.kernel;
- return new KernelAstAdapter(kernel, compiler.backend, resolvedAst,
- kernel.nodeToAst, kernel.nodeToElement);
+ element, inferrer, compiler, handler, analyzedNode);
}
TypeInformation run() {
@@ -106,7 +88,7 @@ class KernelTypeGraphBuilder extends ir.Visitor<TypeInformation> {
// previous analysis of [outermostElement].
ClosureRepresentationInfo closureData = compiler
.backendStrategy.closureDataLookup
- .getClosureInfoForMember(outermostElement);
+ .getClosureInfoForMember(analyzedMember);
closureData.forEachCapturedVariable((variable, field) {
locals.setCaptured(variable, field);
});
@@ -149,7 +131,7 @@ class KernelTypeGraphBuilder extends ir.Visitor<TypeInformation> {
TypeInformation visitListLiteral(ir.ListLiteral listLiteral) {
// We only set the type once. We don't need to re-visit the children
// when re-analyzing the node.
- return inferrer.concreteKernelTypes.putIfAbsent(listLiteral, () {
+ return inferrer.concreteTypes.putIfAbsent(listLiteral, () {
TypeInformation elementType;
int length = 0;
for (ir.Expression element in listLiteral.expressions) {
@@ -166,8 +148,8 @@ class KernelTypeGraphBuilder extends ir.Visitor<TypeInformation> {
listLiteral.isConst ? types.constListType : types.growableListType;
// TODO(efortuna): Change signature of allocateList and the rest of
// type_system to deal with Kernel elements.
- return types.allocateList(containerType, astAdapter.getNode(listLiteral),
- outermostElement, elementType, length);
+ return types.allocateList(
+ containerType, listLiteral, analyzedMember, elementType, length);
});
}
}
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder.dart ('k') | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698