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

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

Issue 2666553002: Add KernelWorldBuilder and KElement model. (Closed)
Patch Set: Cleanup. Created 3 years, 11 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/kernel_impact.dart
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 89312a427d82b47d81777cd70556efd1691336a1..0eb95a6cfd9a6794ee3d3c89acdb16ce6b9a2a2f 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -33,46 +33,58 @@ ResolutionImpact build(Compiler compiler, ResolvedAst resolvedAst) {
Kernel kernel = backend.kernelTask.kernel;
KernelAstAdapter astAdapter = new KernelAstAdapter(kernel, compiler.backend,
resolvedAst, kernel.nodeToAst, kernel.nodeToElement);
- KernelImpactBuilder builder = new KernelImpactBuilder(
- '${resolvedAst.element}', astAdapter, compiler.commonElements);
- if (element.isFunction ||
- element.isGetter ||
- element.isSetter ||
- element.isFactoryConstructor) {
- ir.Procedure function = kernel.functions[element];
- if (function == null) {
- throw "FOUND NULL FUNCTION: $element";
- } else {
- return builder.buildProcedure(function);
- }
- } else if (element.isGenerativeConstructor) {
- ir.Constructor constructor = kernel.functions[element];
- if (constructor == null) {
- throw "FOUND NULL CONSTRUCTOR: $element";
- } else {
- return builder.buildConstructor(constructor);
- }
- } else if (element.isField) {
- ir.Field field = kernel.fields[element];
- if (field == null) {
- throw "FOUND NULL FIELD: $element";
- } else {
- return builder.buildField(field);
- }
- } else {
- throw new UnsupportedError("Unsupported element: $element");
- }
+ ir.Member member = getIrMember(compiler, resolvedAst);
+ return buildKernelImpact(member, astAdapter);
});
}
+ir.Member getIrMember(Compiler compiler, ResolvedAst resolvedAst) {
+ AstElement element = resolvedAst.element;
+ JavaScriptBackend backend = compiler.backend;
+ Kernel kernel = backend.kernelTask.kernel;
+ ir.Member member;
+ if (element.isFunction ||
+ element.isGetter ||
+ element.isSetter ||
+ element.isConstructor) {
+ member = kernel.functions[element];
+ if (member == null) {
+ throw "FOUND NULL FUNCTION: $element";
+ }
+ } else if (element.isField) {
+ member = kernel.fields[element];
+ if (member == null) {
+ throw "FOUND NULL FIELD: $element";
+ }
+ } else {
+ throw new UnsupportedError("Unsupported element: $element");
+ }
+ return member;
+}
+
+ResolutionImpact buildKernelImpact(
+ ir.Member member, KernelElementAdapter elementAdapter) {
+ KernelImpactBuilder builder =
+ new KernelImpactBuilder('${member.name}', elementAdapter);
+ if (member is ir.Procedure) {
+ return builder.buildProcedure(member);
+ } else if (member is ir.Constructor) {
+ return builder.buildConstructor(member);
+ } else if (member is ir.Field) {
+ return builder.buildField(member);
+ }
+ throw new UnsupportedError("Unsupported member: $member");
+}
+
class KernelImpactBuilder extends ir.Visitor {
final ResolutionWorldImpactBuilder impactBuilder;
final KernelElementAdapter elementAdapter;
- final CommonElements commonElements;
- KernelImpactBuilder(String name, this.elementAdapter, this.commonElements)
+ KernelImpactBuilder(String name, this.elementAdapter)
: this.impactBuilder = new ResolutionWorldImpactBuilder(name);
+ CommonElements get commonElements => elementAdapter.commonElements;
+
/// Add a checked-mode type use of [type] if it is not `dynamic`.
DartType checkType(ir.DartType irType) {
DartType type = elementAdapter.getDartType(irType);
@@ -277,7 +289,6 @@ class KernelImpactBuilder extends ir.Visitor {
@override
void visitStaticInvocation(ir.StaticInvocation node) {
- FunctionEntity target = elementAdapter.getMethod(node.target);
if (node.target.kind == ir.ProcedureKind.Factory) {
// TODO(johnniwinther): We should not mark the type as instantiated but
// rather follow the type arguments directly.
@@ -303,6 +314,7 @@ class KernelImpactBuilder extends ir.Visitor {
// instantiated as int and String.
handleNew(node, node.target, isConst: node.isConst);
} else {
+ FunctionEntity target = elementAdapter.getMethod(node.target);
_visitArguments(node.arguments);
impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
target, elementAdapter.getCallStructure(node.arguments)));

Powered by Google App Engine
This is Rietveld 408576698