| Index: pkg/compiler/lib/src/world.dart
|
| diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
|
| index 7b96e20421ec3b6bfe87ac720891e41c3e7b2f4c..0dcb9fec2a9e48c213d05347682ca198168ba56d 100644
|
| --- a/pkg/compiler/lib/src/world.dart
|
| +++ b/pkg/compiler/lib/src/world.dart
|
| @@ -22,12 +22,16 @@ import 'elements/types.dart';
|
| import 'js_backend/backend_usage.dart' show BackendUsage;
|
| import 'js_backend/interceptor_data.dart' show InterceptorData;
|
| import 'js_backend/native_data.dart' show NativeData;
|
| +import 'js_backend/runtime_types.dart'
|
| + show RuntimeTypesNeed, RuntimeTypesNeedBuilder;
|
| import 'ordered_typeset.dart';
|
| +import 'options.dart';
|
| import 'types/masks.dart' show CommonMasks, FlatTypeMask, TypeMask;
|
| import 'universe/class_set.dart';
|
| import 'universe/function_set.dart' show FunctionSet;
|
| import 'universe/selector.dart' show Selector;
|
| import 'universe/side_effects.dart' show SideEffects;
|
| +import 'universe/world_builder.dart';
|
| import 'util/util.dart' show Link;
|
|
|
| /// Common superinterface for [OpenWorld] and [ClosedWorld].
|
| @@ -58,6 +62,10 @@ abstract class ClosedWorld implements World {
|
|
|
| ConstantSystem get constantSystem;
|
|
|
| + RuntimeTypesNeed get rtiNeed;
|
| +
|
| + Iterable<ClassEntity> get liveNativeClasses;
|
| +
|
| /// Returns `true` if [cls] is either directly or indirectly instantiated.
|
| bool isInstantiated(ClassEntity cls);
|
|
|
| @@ -451,6 +459,8 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
|
| /// Members that are written either directly or through a setter selector.
|
| final Iterable<MemberEntity> assignedInstanceMembers;
|
|
|
| + final Iterable<ClassEntity> liveNativeClasses;
|
| +
|
| ClosedWorldBase(
|
| this.elementEnvironment,
|
| this.dartTypes,
|
| @@ -460,6 +470,7 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
|
| this.interceptorData,
|
| this.backendUsage,
|
| Set<ClassEntity> implementedClasses,
|
| + this.liveNativeClasses,
|
| this.liveInstanceMembers,
|
| this.assignedInstanceMembers,
|
| Set<TypedefElement> allTypedefs,
|
| @@ -1167,16 +1178,20 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
|
| }
|
| }
|
|
|
| -class ClosedWorldImpl extends ClosedWorldBase {
|
| +class ClosedWorldImpl extends ClosedWorldBase with ClosedWorldRtiNeedMixin {
|
| ClosedWorldImpl(
|
| - {ElementEnvironment elementEnvironment,
|
| + {CompilerOptions options,
|
| + ElementEnvironment elementEnvironment,
|
| DartTypes dartTypes,
|
| CommonElements commonElements,
|
| ConstantSystem constantSystem,
|
| NativeData nativeData,
|
| InterceptorData interceptorData,
|
| BackendUsage backendUsage,
|
| + ResolutionWorldBuilder resolutionWorldBuilder,
|
| + RuntimeTypesNeedBuilder rtiNeedBuilder,
|
| Set<ClassEntity> implementedClasses,
|
| + Iterable<ClassEntity> liveNativeClasses,
|
| Iterable<MemberEntity> liveInstanceMembers,
|
| Iterable<MemberEntity> assignedInstanceMembers,
|
| Set<TypedefElement> allTypedefs,
|
| @@ -1193,13 +1208,17 @@ class ClosedWorldImpl extends ClosedWorldBase {
|
| interceptorData,
|
| backendUsage,
|
| implementedClasses,
|
| + liveNativeClasses,
|
| liveInstanceMembers,
|
| assignedInstanceMembers,
|
| allTypedefs,
|
| mixinUses,
|
| typesImplementedBySubclasses,
|
| classHierarchyNodes,
|
| - classSets);
|
| + classSets) {
|
| + computeRtiNeed(resolutionWorldBuilder, rtiNeedBuilder,
|
| + enableTypeAssertions: options.enableTypeAssertions);
|
| + }
|
|
|
| bool checkClass(ClassElement cls) => cls.isDeclaration;
|
|
|
| @@ -1315,3 +1334,17 @@ class ClosedWorldImpl extends ClosedWorldBase {
|
| return super.getSideEffectsOfElement(element);
|
| }
|
| }
|
| +
|
| +abstract class ClosedWorldRtiNeedMixin implements ClosedWorld {
|
| + RuntimeTypesNeed _rtiNeed;
|
| +
|
| + void computeRtiNeed(ResolutionWorldBuilder resolutionWorldBuilder,
|
| + RuntimeTypesNeedBuilder rtiNeedBuilder,
|
| + {bool enableTypeAssertions}) {
|
| + _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed(
|
| + resolutionWorldBuilder, this,
|
| + enableTypeAssertions: enableTypeAssertions);
|
| + }
|
| +
|
| + RuntimeTypesNeed get rtiNeed => _rtiNeed;
|
| +}
|
|
|