| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| index 18d00bae482ada4039afb9a6de0f300c3c295afa..3d120e6fc6e8d61f9e44d0690ffd2f65f8783cbb 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -972,21 +972,10 @@ class KernelToElementMapForImpactImpl2 extends KernelToElementMapBase
|
| : super(reporter, environment);
|
| }
|
|
|
| -/// Element builder used for creating elements and types corresponding to Kernel
|
| -/// IR nodes.
|
| -// TODO(johnniwinther): Use this in the JsStrategy
|
| -class KernelToElementMapForBuildingImpl extends KernelToElementMapBase
|
| - with
|
| - KernelToElementMapForBuildingMixin,
|
| - ElementCreatorMixin,
|
| - KElementCreatorMixin
|
| - implements KernelToWorldBuilder {
|
| - KernelToElementMapForBuildingImpl(
|
| - DiagnosticReporter reporter, Environment environment)
|
| - : super(reporter, environment);
|
| -
|
| - ConstantEnvironment get constantEnvironment => _constantEnvironment;
|
| -
|
| +/// Mixin for implementing [KernelToElementMapForBuilding] shared between
|
| +/// classes that extend [KernelToElementMapBase], i.e. not [KernelAstAdapter].
|
| +abstract class KernelToElementMapForBuildingFromBaseMixin
|
| + implements KernelToElementMapForBuilding, KernelToElementMapBase {
|
| @override
|
| ConstantValue getFieldConstantValue(ir.Field field) {
|
| // TODO(johnniwinther): Cache the result in [FieldData].
|
| @@ -994,17 +983,12 @@ class KernelToElementMapForBuildingImpl extends KernelToElementMapBase
|
| requireConstant: field.isConst, implicitNull: !field.isConst);
|
| }
|
|
|
| - ir.Library getKernelLibrary(KLibrary entity) =>
|
| - _libraryEnvs[entity.libraryIndex].library;
|
| -
|
| - ir.Class getKernelClass(KClass entity) => _classEnvs[entity.classIndex].cls;
|
| -
|
| - bool hasConstantFieldInitializer(covariant KField field) {
|
| + bool hasConstantFieldInitializer(covariant IndexedField field) {
|
| FieldData data = _memberData[field.memberIndex];
|
| return getFieldConstantValue(data.node) != null;
|
| }
|
|
|
| - ConstantValue getConstantFieldInitializer(covariant KField field) {
|
| + ConstantValue getConstantFieldInitializer(covariant IndexedField field) {
|
| FieldData data = _memberData[field.memberIndex];
|
| ConstantValue value = getFieldConstantValue(data.node);
|
| assert(value != null,
|
| @@ -1012,11 +996,33 @@ class KernelToElementMapForBuildingImpl extends KernelToElementMapBase
|
| return value;
|
| }
|
|
|
| - void forEachParameter(covariant KFunction function,
|
| + void forEachParameter(covariant IndexedFunction function,
|
| void f(DartType type, String name, ConstantValue defaultValue)) {
|
| FunctionData data = _memberData[function.memberIndex];
|
| data.forEachParameter(this, f);
|
| }
|
| +}
|
| +
|
| +/// Element builder used for creating elements and types corresponding to Kernel
|
| +/// IR nodes.
|
| +// TODO(johnniwinther): Use this in the JsStrategy
|
| +class KernelToElementMapForBuildingImpl extends KernelToElementMapBase
|
| + with
|
| + KernelToElementMapForBuildingMixin,
|
| + KernelToElementMapForBuildingFromBaseMixin,
|
| + ElementCreatorMixin,
|
| + KElementCreatorMixin
|
| + implements KernelToWorldBuilder {
|
| + KernelToElementMapForBuildingImpl(
|
| + DiagnosticReporter reporter, Environment environment)
|
| + : super(reporter, environment);
|
| +
|
| + ConstantEnvironment get constantEnvironment => _constantEnvironment;
|
| +
|
| + ir.Library getKernelLibrary(KLibrary entity) =>
|
| + _libraryEnvs[entity.libraryIndex].library;
|
| +
|
| + ir.Class getKernelClass(KClass entity) => _classEnvs[entity.classIndex].cls;
|
|
|
| @override
|
| Spannable getSpannable(MemberEntity member, ir.Node node) {
|
| @@ -1467,7 +1473,9 @@ class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase {
|
| bool checkClass(ClassEntity cls) => true;
|
| }
|
|
|
| -abstract class KernelClosedWorldMixin implements ClosedWorld {
|
| +abstract class KernelClosedWorldMixin implements ClosedWorldBase {
|
| + KernelToElementMapBase get elementMap;
|
| +
|
| @override
|
| bool hasElementIn(ClassEntity cls, Selector selector, Entity element) {
|
| while (cls != null) {
|
| @@ -1482,78 +1490,42 @@ abstract class KernelClosedWorldMixin implements ClosedWorld {
|
| }
|
| return false;
|
| }
|
| -}
|
| -
|
| -class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin {
|
| - final KernelToElementMapForImpactImpl _elementMap;
|
| -
|
| - KernelClosedWorld(this._elementMap,
|
| - {ElementEnvironment elementEnvironment,
|
| - DartTypes dartTypes,
|
| - CommonElements commonElements,
|
| - ConstantSystem constantSystem,
|
| - NativeData nativeData,
|
| - InterceptorData interceptorData,
|
| - BackendUsage backendUsage,
|
| - ResolutionWorldBuilder resolutionWorldBuilder,
|
| - Set<ClassEntity> implementedClasses,
|
| - Iterable<MemberEntity> liveInstanceMembers,
|
| - Set<TypedefElement> allTypedefs,
|
| - Map<ClassEntity, Set<ClassEntity>> mixinUses,
|
| - Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
|
| - Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
|
| - Map<ClassEntity, ClassSet> classSets})
|
| - : super(
|
| - elementEnvironment,
|
| - dartTypes,
|
| - commonElements,
|
| - constantSystem,
|
| - nativeData,
|
| - interceptorData,
|
| - backendUsage,
|
| - resolutionWorldBuilder,
|
| - implementedClasses,
|
| - liveInstanceMembers,
|
| - allTypedefs,
|
| - mixinUses,
|
| - typesImplementedBySubclasses,
|
| - classHierarchyNodes,
|
| - classSets);
|
|
|
| @override
|
| bool hasConcreteMatch(ClassEntity cls, Selector selector,
|
| {ClassEntity stopAtSuperclass}) {
|
| - throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch');
|
| + throw new UnimplementedError('KernelClosedWorldMixin.hasConcreteMatch');
|
| }
|
|
|
| @override
|
| bool isNamedMixinApplication(ClassEntity cls) {
|
| - throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication');
|
| + throw new UnimplementedError(
|
| + 'KernelClosedWorldMixin.isNamedMixinApplication');
|
| }
|
|
|
| @override
|
| ClassEntity getAppliedMixin(ClassEntity cls) {
|
| - throw new UnimplementedError('KernelClosedWorld.getAppliedMixin');
|
| + throw new UnimplementedError('KernelClosedWorldMixin.getAppliedMixin');
|
| }
|
|
|
| @override
|
| Iterable<ClassEntity> getInterfaces(ClassEntity cls) {
|
| - throw new UnimplementedError('KernelClosedWorld.getInterfaces');
|
| + throw new UnimplementedError('KernelClosedWorldMixin.getInterfaces');
|
| }
|
|
|
| @override
|
| ClassEntity getSuperClass(ClassEntity cls) {
|
| - throw new UnimplementedError('KernelClosedWorld.getSuperClass');
|
| + throw new UnimplementedError('KernelClosedWorldMixin.getSuperClass');
|
| }
|
|
|
| @override
|
| int getHierarchyDepth(ClassEntity cls) {
|
| - return _elementMap._getHierarchyDepth(cls);
|
| + return elementMap._getHierarchyDepth(cls);
|
| }
|
|
|
| @override
|
| OrderedTypeSet getOrderedTypeSet(ClassEntity cls) {
|
| - return _elementMap._getOrderedTypeSet(cls);
|
| + return elementMap._getOrderedTypeSet(cls);
|
| }
|
|
|
| @override
|
| @@ -1565,6 +1537,43 @@ class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin {
|
|
|
| @override
|
| bool checkEntity(Entity element) => true;
|
| +}
|
| +
|
| +class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin {
|
| + final KernelToElementMapForImpactImpl elementMap;
|
| +
|
| + KernelClosedWorld(this.elementMap,
|
| + {ElementEnvironment elementEnvironment,
|
| + DartTypes dartTypes,
|
| + CommonElements commonElements,
|
| + ConstantSystem constantSystem,
|
| + NativeData nativeData,
|
| + InterceptorData interceptorData,
|
| + BackendUsage backendUsage,
|
| + ResolutionWorldBuilder resolutionWorldBuilder,
|
| + Set<ClassEntity> implementedClasses,
|
| + Iterable<MemberEntity> liveInstanceMembers,
|
| + Set<TypedefElement> allTypedefs,
|
| + Map<ClassEntity, Set<ClassEntity>> mixinUses,
|
| + Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
|
| + Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
|
| + Map<ClassEntity, ClassSet> classSets})
|
| + : super(
|
| + elementEnvironment,
|
| + dartTypes,
|
| + commonElements,
|
| + constantSystem,
|
| + nativeData,
|
| + interceptorData,
|
| + backendUsage,
|
| + resolutionWorldBuilder,
|
| + implementedClasses,
|
| + liveInstanceMembers,
|
| + allTypedefs,
|
| + mixinUses,
|
| + typesImplementedBySubclasses,
|
| + classHierarchyNodes,
|
| + classSets);
|
|
|
| @override
|
| void registerClosureClass(ClassElement cls) {
|
| @@ -1686,6 +1695,7 @@ class JsToFrontendMapImpl extends JsToFrontendMapBase
|
| class JsKernelToElementMap extends KernelToElementMapBase
|
| with
|
| KernelToElementMapForBuildingMixin,
|
| + KernelToElementMapForBuildingFromBaseMixin,
|
| JsElementCreatorMixin,
|
| // TODO(johnniwinther): Avoid mixin in [ElementCreatorMixin]. The
|
| // codegen world should be a strict subset of the resolution world and
|
| @@ -1782,11 +1792,6 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| return cls;
|
| }
|
|
|
| - /*@override
|
| - TypeVariableEntity _getTypeVariable(ir.TypeParameter node) {
|
| - throw new UnsupportedError("JsKernelToElementMap._getTypeVariable");
|
| - }*/
|
| -
|
| // TODO(johnniwinther): Reinsert these when [ElementCreatorMixin] is no longer
|
| // mixed in.
|
| /*@override
|
| @@ -1819,27 +1824,4 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| ir.Class getClassNode(ClassEntity cls) {
|
| return _getClassNode(cls);
|
| }
|
| -
|
| - @override
|
| - ConstantValue getFieldConstantValue(ir.Field field) {
|
| - throw new UnsupportedError("JsKernelToElementMap.getFieldConstantValue");
|
| - }
|
| -
|
| - @override
|
| - void forEachParameter(FunctionEntity function,
|
| - void f(DartType type, String name, ConstantValue defaultValue)) {
|
| - throw new UnsupportedError("JsKernelToElementMap.forEachParameter");
|
| - }
|
| -
|
| - @override
|
| - ConstantValue getConstantFieldInitializer(FieldEntity field) {
|
| - throw new UnsupportedError(
|
| - "JsKernelToElementMap.getConstantFieldInitializer");
|
| - }
|
| -
|
| - @override
|
| - bool hasConstantFieldInitializer(FieldEntity field) {
|
| - throw new UnsupportedError(
|
| - "JsKernelToElementMap.hasConstantFieldInitializer");
|
| - }
|
| }
|
|
|