| 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 54d2686958adbc509eff075402c6b2a93e47f4ce..0dad61b6594c58d38bb1dd0cd95f63fc39179670 100644
|
| --- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| +++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| @@ -13,6 +13,7 @@ import '../elements/types.dart';
|
| import '../elements/elements.dart' show AstElement, ResolvedAst;
|
| import '../elements/entities.dart';
|
| import '../js_backend/backend.dart' show JavaScriptBackend;
|
| +import '../kernel/element_adapter.dart';
|
| import '../kernel/kernel.dart';
|
| import '../kernel/kernel_debug.dart';
|
| import '../resolution/registry.dart' show ResolutionWorldImpactBuilder;
|
| @@ -66,15 +67,15 @@ ResolutionImpact build(Compiler compiler, ResolvedAst resolvedAst) {
|
|
|
| class KernelImpactBuilder extends ir.Visitor {
|
| final ResolutionWorldImpactBuilder impactBuilder;
|
| - final KernelWorldBuilder astAdapter;
|
| + final KernelElementAdapter elementAdapter;
|
| final CommonElements commonElements;
|
|
|
| - KernelImpactBuilder(String name, this.astAdapter, this.commonElements)
|
| + KernelImpactBuilder(String name, this.elementAdapter, this.commonElements)
|
| : this.impactBuilder = new ResolutionWorldImpactBuilder(name);
|
|
|
| /// Add a checked-mode type use of [type] if it is not `dynamic`.
|
| DartType checkType(ir.DartType irType) {
|
| - DartType type = astAdapter.getDartType(irType);
|
| + DartType type = elementAdapter.getDartType(irType);
|
| if (!type.isDynamic) {
|
| impactBuilder.registerTypeUse(new TypeUse.checkedModeCheck(type));
|
| }
|
| @@ -109,11 +110,11 @@ class KernelImpactBuilder extends ir.Visitor {
|
| }
|
| }
|
| if (field.isInstanceMember &&
|
| - astAdapter.isNativeClass(field.enclosingClass)) {
|
| - impactBuilder
|
| - .registerNativeData(astAdapter.getNativeBehaviorForFieldLoad(field));
|
| - impactBuilder
|
| - .registerNativeData(astAdapter.getNativeBehaviorForFieldStore(field));
|
| + elementAdapter.isNativeClass(field.enclosingClass)) {
|
| + impactBuilder.registerNativeData(
|
| + elementAdapter.getNativeBehaviorForFieldLoad(field));
|
| + impactBuilder.registerNativeData(
|
| + elementAdapter.getNativeBehaviorForFieldStore(field));
|
| }
|
| return impactBuilder;
|
| }
|
| @@ -145,9 +146,9 @@ class KernelImpactBuilder extends ir.Visitor {
|
| "Unexpected async marker: ${procedure.function.asyncMarker}");
|
| }
|
| if (procedure.isExternal &&
|
| - !astAdapter.isForeignLibrary(procedure.enclosingLibrary)) {
|
| - impactBuilder
|
| - .registerNativeData(astAdapter.getNativeBehaviorForMethod(procedure));
|
| + !elementAdapter.isForeignLibrary(procedure.enclosingLibrary)) {
|
| + impactBuilder.registerNativeData(
|
| + elementAdapter.getNativeBehaviorForMethod(procedure));
|
| }
|
| return impactBuilder;
|
| }
|
| @@ -252,10 +253,11 @@ class KernelImpactBuilder extends ir.Visitor {
|
| void handleNew(ir.InvocationExpression node, ir.Member target,
|
| {bool isConst: false}) {
|
| _visitArguments(node.arguments);
|
| - FunctionEntity constructor = astAdapter.getConstructor(target);
|
| - InterfaceType type = astAdapter.createInterfaceType(
|
| + FunctionEntity constructor = elementAdapter.getConstructor(target);
|
| + InterfaceType type = elementAdapter.createInterfaceType(
|
| target.enclosingClass, node.arguments.types);
|
| - CallStructure callStructure = astAdapter.getCallStructure(node.arguments);
|
| + CallStructure callStructure =
|
| + elementAdapter.getCallStructure(node.arguments);
|
| impactBuilder.registerStaticUse(isConst
|
| ? new StaticUse.constConstructorInvoke(constructor, callStructure, type)
|
| : new StaticUse.typedConstructorInvoke(
|
| @@ -267,15 +269,15 @@ class KernelImpactBuilder extends ir.Visitor {
|
|
|
| @override
|
| void visitSuperInitializer(ir.SuperInitializer node) {
|
| - FunctionEntity target = astAdapter.getConstructor(node.target);
|
| + FunctionEntity target = elementAdapter.getConstructor(node.target);
|
| _visitArguments(node.arguments);
|
| impactBuilder.registerStaticUse(new StaticUse.superConstructorInvoke(
|
| - target, astAdapter.getCallStructure(node.arguments)));
|
| + target, elementAdapter.getCallStructure(node.arguments)));
|
| }
|
|
|
| @override
|
| void visitStaticInvocation(ir.StaticInvocation node) {
|
| - FunctionEntity target = astAdapter.getMethod(node.target);
|
| + 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,24 +305,24 @@ class KernelImpactBuilder extends ir.Visitor {
|
| } else {
|
| _visitArguments(node.arguments);
|
| impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
|
| - target, astAdapter.getCallStructure(node.arguments)));
|
| + target, elementAdapter.getCallStructure(node.arguments)));
|
| }
|
| - switch (astAdapter.getForeignKind(node)) {
|
| + switch (elementAdapter.getForeignKind(node)) {
|
| case ForeignKind.JS:
|
| - impactBuilder
|
| - .registerNativeData(astAdapter.getNativeBehaviorForJsCall(node));
|
| + impactBuilder.registerNativeData(
|
| + elementAdapter.getNativeBehaviorForJsCall(node));
|
| break;
|
| case ForeignKind.JS_BUILTIN:
|
| impactBuilder.registerNativeData(
|
| - astAdapter.getNativeBehaviorForJsBuiltinCall(node));
|
| + elementAdapter.getNativeBehaviorForJsBuiltinCall(node));
|
| break;
|
| case ForeignKind.JS_EMBEDDED_GLOBAL:
|
| impactBuilder.registerNativeData(
|
| - astAdapter.getNativeBehaviorForJsEmbeddedGlobalCall(node));
|
| + elementAdapter.getNativeBehaviorForJsEmbeddedGlobalCall(node));
|
| break;
|
| case ForeignKind.JS_INTERCEPTOR_CONSTANT:
|
| InterfaceType type =
|
| - astAdapter.getInterfaceTypeForJsInterceptorCall(node);
|
| + elementAdapter.getInterfaceTypeForJsInterceptorCall(node);
|
| if (type != null) {
|
| impactBuilder.registerTypeUse(new TypeUse.instantiation(type));
|
| }
|
| @@ -334,10 +336,10 @@ class KernelImpactBuilder extends ir.Visitor {
|
| void visitStaticGet(ir.StaticGet node) {
|
| ir.Member target = node.target;
|
| if (target is ir.Procedure && target.kind == ir.ProcedureKind.Method) {
|
| - FunctionEntity method = astAdapter.getMethod(target);
|
| + FunctionEntity method = elementAdapter.getMethod(target);
|
| impactBuilder.registerStaticUse(new StaticUse.staticTearOff(method));
|
| } else {
|
| - MemberEntity member = astAdapter.getMember(target);
|
| + MemberEntity member = elementAdapter.getMember(target);
|
| impactBuilder.registerStaticUse(new StaticUse.staticGet(member));
|
| }
|
| }
|
| @@ -345,15 +347,15 @@ class KernelImpactBuilder extends ir.Visitor {
|
| @override
|
| void visitStaticSet(ir.StaticSet node) {
|
| visitNode(node.value);
|
| - MemberEntity member = astAdapter.getMember(node.target);
|
| + MemberEntity member = elementAdapter.getMember(node.target);
|
| impactBuilder.registerStaticUse(new StaticUse.staticSet(member));
|
| }
|
|
|
| void handleSuperInvocation(ir.Node target, ir.Node arguments) {
|
| - FunctionEntity method = astAdapter.getMethod(target);
|
| + FunctionEntity method = elementAdapter.getMethod(target);
|
| _visitArguments(arguments);
|
| impactBuilder.registerStaticUse(new StaticUse.superInvoke(
|
| - method, astAdapter.getCallStructure(arguments)));
|
| + method, elementAdapter.getCallStructure(arguments)));
|
| }
|
|
|
| @override
|
| @@ -370,10 +372,10 @@ class KernelImpactBuilder extends ir.Visitor {
|
|
|
| void handleSuperGet(ir.Member target) {
|
| if (target is ir.Procedure && target.kind == ir.ProcedureKind.Method) {
|
| - FunctionEntity method = astAdapter.getMethod(target);
|
| + FunctionEntity method = elementAdapter.getMethod(target);
|
| impactBuilder.registerStaticUse(new StaticUse.superTearOff(method));
|
| } else {
|
| - MemberEntity member = astAdapter.getMember(target);
|
| + MemberEntity member = elementAdapter.getMember(target);
|
| impactBuilder.registerStaticUse(new StaticUse.superGet(member));
|
| }
|
| }
|
| @@ -391,10 +393,10 @@ class KernelImpactBuilder extends ir.Visitor {
|
| void handleSuperSet(ir.Node target, ir.Node value) {
|
| visitNode(value);
|
| if (target is ir.Field) {
|
| - FieldEntity field = astAdapter.getField(target);
|
| + FieldEntity field = elementAdapter.getField(target);
|
| impactBuilder.registerStaticUse(new StaticUse.superFieldSet(field));
|
| } else {
|
| - FunctionEntity method = astAdapter.getMethod(target);
|
| + FunctionEntity method = elementAdapter.getMethod(target);
|
| impactBuilder.registerStaticUse(new StaticUse.superSetterSet(method));
|
| }
|
| }
|
| @@ -419,7 +421,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| } else {
|
| visitNode(invocation.receiver);
|
| impactBuilder.registerDynamicUse(
|
| - new DynamicUse(astAdapter.getSelector(invocation), null));
|
| + new DynamicUse(elementAdapter.getSelector(invocation), null));
|
| }
|
| _visitArguments(invocation.arguments);
|
| }
|
| @@ -428,7 +430,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| void visitPropertyGet(ir.PropertyGet node) {
|
| visitNode(node.receiver);
|
| impactBuilder.registerDynamicUse(new DynamicUse(
|
| - new Selector.getter(astAdapter.getName(node.name)), null));
|
| + new Selector.getter(elementAdapter.getName(node.name)), null));
|
| }
|
|
|
| @override
|
| @@ -436,7 +438,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| visitNode(node.receiver);
|
| visitNode(node.value);
|
| impactBuilder.registerDynamicUse(new DynamicUse(
|
| - new Selector.setter(astAdapter.getName(node.name)), null));
|
| + new Selector.setter(elementAdapter.getName(node.name)), null));
|
| }
|
|
|
| @override
|
| @@ -457,7 +459,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| @override
|
| void visitFunctionDeclaration(ir.FunctionDeclaration node) {
|
| impactBuilder.registerStaticUse(
|
| - new StaticUse.closure(astAdapter.getLocalFunction(node)));
|
| + new StaticUse.closure(elementAdapter.getLocalFunction(node)));
|
| handleSignature(node.function);
|
| visitNode(node.function.body);
|
| }
|
| @@ -465,7 +467,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| @override
|
| void visitFunctionExpression(ir.FunctionExpression node) {
|
| impactBuilder.registerStaticUse(
|
| - new StaticUse.closure(astAdapter.getLocalFunction(node)));
|
| + new StaticUse.closure(elementAdapter.getLocalFunction(node)));
|
| handleSignature(node.function);
|
| visitNode(node.function.body);
|
| }
|
| @@ -483,14 +485,14 @@ class KernelImpactBuilder extends ir.Visitor {
|
| @override
|
| void visitIsExpression(ir.IsExpression node) {
|
| impactBuilder.registerTypeUse(
|
| - new TypeUse.isCheck(astAdapter.getDartType(node.type)));
|
| + new TypeUse.isCheck(elementAdapter.getDartType(node.type)));
|
| visitNode(node.operand);
|
| }
|
|
|
| @override
|
| void visitAsExpression(ir.AsExpression node) {
|
| - impactBuilder
|
| - .registerTypeUse(new TypeUse.asCast(astAdapter.getDartType(node.type)));
|
| + impactBuilder.registerTypeUse(
|
| + new TypeUse.asCast(elementAdapter.getDartType(node.type)));
|
| visitNode(node.operand);
|
| }
|
|
|
| @@ -530,7 +532,7 @@ class KernelImpactBuilder extends ir.Visitor {
|
| }
|
| if (node.guard is! ir.DynamicType) {
|
| impactBuilder.registerTypeUse(
|
| - new TypeUse.catchType(astAdapter.getDartType(node.guard)));
|
| + new TypeUse.catchType(elementAdapter.getDartType(node.guard)));
|
| }
|
| visitNode(node.body);
|
| }
|
| @@ -544,22 +546,22 @@ class KernelImpactBuilder extends ir.Visitor {
|
| @override
|
| void visitTypeLiteral(ir.TypeLiteral node) {
|
| impactBuilder.registerTypeUse(
|
| - new TypeUse.typeLiteral(astAdapter.getDartType(node.type)));
|
| + new TypeUse.typeLiteral(elementAdapter.getDartType(node.type)));
|
| }
|
|
|
| @override
|
| void visitFieldInitializer(ir.FieldInitializer node) {
|
| impactBuilder.registerStaticUse(
|
| - new StaticUse.fieldInit(astAdapter.getField(node.field)));
|
| + new StaticUse.fieldInit(elementAdapter.getField(node.field)));
|
| visitNode(node.value);
|
| }
|
|
|
| @override
|
| void visitRedirectingInitializer(ir.RedirectingInitializer node) {
|
| _visitArguments(node.arguments);
|
| - FunctionEntity target = astAdapter.getConstructor(node.target);
|
| + FunctionEntity target = elementAdapter.getConstructor(node.target);
|
| impactBuilder.registerStaticUse(new StaticUse.superConstructorInvoke(
|
| - target, astAdapter.getCallStructure(node.arguments)));
|
| + target, elementAdapter.getCallStructure(node.arguments)));
|
| }
|
|
|
| // TODO(johnniwinther): Make this throw and visit child nodes explicitly
|
|
|