Chromium Code Reviews| Index: pkg/compiler/lib/src/kernel/element_map.dart |
| diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart |
| index 19c9ddd4228f03f49a48d5589d42e8659c4afb1f..d48179de752542df78d8511fc02754521877e86a 100644 |
| --- a/pkg/compiler/lib/src/kernel/element_map.dart |
| +++ b/pkg/compiler/lib/src/kernel/element_map.dart |
| @@ -33,37 +33,79 @@ abstract class KernelToElementMap { |
| /// Access to the commonly used elements and types. |
| CommonElements get commonElements; |
| - /// [ElementEnvironment] for library, class and member lookup. |
| - ElementEnvironment get elementEnvironment; |
| - |
| /// Returns the [DartType] corresponding to [type]. |
| DartType getDartType(ir.DartType type); |
| - /// Returns the [FunctionType] of the [node]. |
| - FunctionType getFunctionType(ir.FunctionNode node); |
| - |
| - /// Returns the list of [DartType]s corresponding to [types]. |
| - List<DartType> getDartTypes(List<ir.DartType> types); |
| - |
| - /// Returns the [InterfaceType] corresponding to [type]. |
| - InterfaceType getInterfaceType(ir.InterfaceType type); |
| - |
| /// Return the [InterfaceType] corresponding to the [cls] with the given |
| /// [typeArguments]. |
| InterfaceType createInterfaceType( |
| ir.Class cls, List<ir.DartType> typeArguments); |
| - /// Returns the [CallStructure] corresponding to the [arguments]. |
| - CallStructure getCallStructure(ir.Arguments arguments); |
| - |
| /// Returns the [Selector] corresponding to the invocation or getter/setter |
| /// access of [node]. |
| Selector getSelector(ir.Expression node); |
| + /// Returns the [MemberEntity] corresponding to the member [node]. |
| + MemberEntity getMember(ir.Member node); |
| + |
| + /// Returns the [FunctionEntity] corresponding to the procedure [node]. |
| + FunctionEntity getMethod(ir.Procedure node); |
| + |
| /// Returns the [ConstructorEntity] corresponding to the generative or factory |
| /// constructor [node]. |
| ConstructorEntity getConstructor(ir.Member node); |
| + /// Returns the [FieldEntity] corresponding to the field [node]. |
| + FieldEntity getField(ir.Field node); |
| + |
| + /// Returns the [Local] corresponding to the [node]. The node must be either |
| + /// a [ir.FunctionDeclaration] or [ir.FunctionExpression]. |
| + Local getLocalFunction(ir.TreeNode node); |
| + |
| + /// Returns the super [MemberEntity] for a super invocation, get or set of |
| + /// [name] from the member [context]. |
| + /// |
| + /// The IR doesn't always resolve super accesses to the corresponding |
| + /// [target]. If not, the target is computed using [name] and [setter] from |
| + /// the enclosing class of [context]. |
| + MemberEntity getSuperMember(ir.Member context, ir.Name name, ir.Member target, |
| + {bool setter: false}); |
| + |
| + /// Returns the [Name] corresponding to [name]. |
| + Name getName(ir.Name name); |
| + |
| + /// Return `true` if [node] is the `dart:_foreign_helper` library. |
| + bool isForeignLibrary(ir.Library node); |
| + |
| + /// Computes the [native.NativeBehavior] for a call to the [JS] function. |
| + native.NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node); |
| + |
| + /// Computes the [native.NativeBehavior] for a call to the [JS_BUILTIN] |
| + /// function. |
| + native.NativeBehavior getNativeBehaviorForJsBuiltinCall( |
| + ir.StaticInvocation node); |
| + |
| + /// Computes the [native.NativeBehavior] for a call to the |
| + /// [JS_EMBEDDED_GLOBAL] function. |
| + native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall( |
| + ir.StaticInvocation node); |
| + |
| + /// Returns the [js.Name] for the `JsGetName` [constant] value. |
| + js.Name getNameForJsGetName(ConstantValue constant, Namer namer); |
| + |
| + /// Computes the [ConstantValue] for the constant [expression]. |
| + // TODO(johnniwinther): Move to [KernelToElementMapForBuilding]. This is only used in |
| + // impact builder for symbol constants. |
| + ConstantValue getConstantValue(ir.Expression expression, |
| + {bool requireConstant: true, bool implicitNull: false}); |
| +} |
| + |
| +/// Interface that translates between Kernel IR nodes and entities used for |
| +/// computing the [WorldImpact] for members. |
| +abstract class KernelToElementMapForImpact implements KernelToElementMap { |
|
Siggi Cherem (dart-lang)
2017/06/26 18:05:41
nit: any reason to use `implements` as opposed to
Johnni Winther
2017/06/27 08:26:31
Nah.
|
| + /// Returns the [CallStructure] corresponding to the [arguments]. |
| + CallStructure getCallStructure(ir.Arguments arguments); |
| + |
| /// Returns the [ConstructorEntity] corresponding to a super initializer in |
| /// [constructor]. |
| /// |
| @@ -83,46 +125,9 @@ abstract class KernelToElementMap { |
| ConstructorEntity getSuperConstructor( |
| ir.Constructor constructor, ir.Member target); |
| - /// Returns the [MemberEntity] corresponding to the member [node]. |
| - MemberEntity getMember(ir.Member node); |
| - |
| - /// Returns the kernel IR node that defines the [member]. |
| - ir.Node getMemberNode(covariant MemberEntity member); |
| - |
| - /// Returns the [FunctionEntity] corresponding to the procedure [node]. |
| - FunctionEntity getMethod(ir.Procedure node); |
| - |
| - /// Returns the super [MemberEntity] for a super invocation, get or set of |
| - /// [name] from the member [context]. |
| - /// |
| - /// The IR doesn't always resolve super accesses to the corresponding |
| - /// [target]. If not, the target is computed using [name] and [setter] from |
| - /// the enclosing class of [context]. |
| - MemberEntity getSuperMember(ir.Member context, ir.Name name, ir.Member target, |
| - {bool setter: false}); |
| - |
| - /// Returns the [FieldEntity] corresponding to the field [node]. |
| - FieldEntity getField(ir.Field node); |
| - |
| - /// Returns the [ClassEntity] corresponding to the class [node]. |
| - ClassEntity getClass(ir.Class node); |
| - |
| - /// Returns the [Local] corresponding to the [node]. The node must be either |
| - /// a [ir.FunctionDeclaration] or [ir.FunctionExpression]. |
| - Local getLocalFunction(ir.TreeNode node); |
| - |
| - /// Returns the [LibraryEntity] corresponding to the library [node]. |
| - LibraryEntity getLibrary(ir.Library node); |
| - |
| - /// Returns the [Name] corresponding to [name]. |
| - Name getName(ir.Name name); |
| - |
| /// Returns `true` is [node] has a `@Native(...)` annotation. |
| bool isNativeClass(ir.Class node); |
| - /// Return `true` if [node] is the `dart:_foreign_helper` library. |
| - bool isForeignLibrary(ir.Library node); |
| - |
| /// Computes the native behavior for reading the native [field]. |
| native.NativeBehavior getNativeBehaviorForFieldLoad(ir.Field field, |
| {bool isJsInterop}); |
| @@ -134,37 +139,42 @@ abstract class KernelToElementMap { |
| native.NativeBehavior getNativeBehaviorForMethod(ir.Procedure procedure, |
| {bool isJsInterop}); |
| - /// Computes the [native.NativeBehavior] for a call to the [JS] function. |
| - native.NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node); |
| + /// Compute the kind of foreign helper function called by [node], if any. |
| + ForeignKind getForeignKind(ir.StaticInvocation node); |
| - /// Computes the [native.NativeBehavior] for a call to the [JS_BUILTIN] |
| - /// function. |
| - native.NativeBehavior getNativeBehaviorForJsBuiltinCall( |
| - ir.StaticInvocation node); |
| + /// Computes the [InterfaceType] referenced by a call to the |
| + /// [JS_INTERCEPTOR_CONSTANT] function, if any. |
| + InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node); |
| +} |
| - /// Computes the [native.NativeBehavior] for a call to the |
| - /// [JS_EMBEDDED_GLOBAL] function. |
| - native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall( |
| - ir.StaticInvocation node); |
| +/// Interface that translates between Kernel IR nodes and entities used for |
| +/// global type inference and building the SSA graph for members. |
| +abstract class KernelToElementMapForBuilding implements KernelToElementMap { |
| + /// [ElementEnvironment] for library, class and member lookup. |
| + ElementEnvironment get elementEnvironment; |
| - /// Compute the kind of foreign helper function called by [node], if any. |
| - ForeignKind getForeignKind(ir.StaticInvocation node); |
| + /// Returns the [FunctionType] of the [node]. |
| + FunctionType getFunctionType(ir.FunctionNode node); |
| - /// Returns the [js.Name] for the `JsGetName` [constant] value. |
| - js.Name getNameForJsGetName(ConstantValue constant, Namer namer); |
| + /// Returns the list of [DartType]s corresponding to [types]. |
| + List<DartType> getDartTypes(List<ir.DartType> types); |
| + |
| + /// Returns the [InterfaceType] corresponding to [type]. |
| + InterfaceType getInterfaceType(ir.InterfaceType type); |
| + |
| + /// Returns the kernel IR node that defines the [member]. |
| + ir.Node getMemberNode(covariant MemberEntity member); |
| + |
| + /// Returns the [ClassEntity] corresponding to the class [node]. |
| + ClassEntity getClass(ir.Class node); |
| + |
| + /// Returns the [LibraryEntity] corresponding to the library [node]. |
| + LibraryEntity getLibrary(ir.Library node); |
| /// Returns the [js.Template] for the `JsBuiltin` [constant] value. |
| js.Template getJsBuiltinTemplate( |
| ConstantValue constant, CodeEmitterTask emitter); |
| - /// Computes the [InterfaceType] referenced by a call to the |
| - /// [JS_INTERCEPTOR_CONSTANT] function, if any. |
| - InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node); |
| - |
| - /// Computes the [ConstantValue] for the constant [expression]. |
| - ConstantValue getConstantValue(ir.Expression expression, |
| - {bool requireConstant: true, bool implicitNull: false}); |
| - |
| /// Return the [ConstantValue] the initial value of [field] or `null` if |
| /// the initializer is not a constant expression. |
| ConstantValue getFieldConstantValue(ir.Field field); |
| @@ -187,7 +197,8 @@ enum ForeignKind { |
| NONE, |
| } |
| -abstract class KernelToElementMapMixin implements KernelToElementMap { |
| +abstract class KernelToElementMapMixin |
| + implements KernelToElementMapForBuilding { |
| DiagnosticReporter get reporter; |
| native.BehaviorBuilder get nativeBehaviorBuilder; |
| ConstantValue computeConstantValue(ConstantExpression constant, |
| @@ -199,7 +210,6 @@ abstract class KernelToElementMapMixin implements KernelToElementMap { |
| name.name, name.isPrivate ? getLibrary(name.library) : null); |
| } |
| - @override |
| CallStructure getCallStructure(ir.Arguments arguments) { |
| int argumentCount = arguments.positional.length + arguments.named.length; |
| List<String> namedArguments = arguments.named.map((e) => e.name).toList(); |