| Index: pkg/compiler/lib/src/js_backend/backend.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
|
| index d155aaa35c255c36096b0a10bbf36e906f059b28..c9474894f7ef9686e0b03aadac76ed72f6052aac 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -345,8 +345,8 @@ class JavaScriptBackend extends Backend {
|
| TypeMask _indexablePrimitiveTypeCache;
|
| TypeMask get indexablePrimitiveType {
|
| if (_indexablePrimitiveTypeCache == null) {
|
| - _indexablePrimitiveTypeCache =
|
| - new TypeMask.nonNullSubtype(helpers.jsIndexableClass, compiler.world);
|
| + _indexablePrimitiveTypeCache = new TypeMask.nonNullSubtype(
|
| + helpers.jsIndexableClass, compiler.closedWorld);
|
| }
|
| return _indexablePrimitiveTypeCache;
|
| }
|
| @@ -354,8 +354,8 @@ class JavaScriptBackend extends Backend {
|
| TypeMask _readableArrayTypeCache;
|
| TypeMask get readableArrayType {
|
| if (_readableArrayTypeCache == null) {
|
| - _readableArrayTypeCache =
|
| - new TypeMask.nonNullSubclass(helpers.jsArrayClass, compiler.world);
|
| + _readableArrayTypeCache = new TypeMask.nonNullSubclass(
|
| + helpers.jsArrayClass, compiler.closedWorld);
|
| }
|
| return _readableArrayTypeCache;
|
| }
|
| @@ -364,7 +364,7 @@ class JavaScriptBackend extends Backend {
|
| TypeMask get mutableArrayType {
|
| if (_mutableArrayTypeCache == null) {
|
| _mutableArrayTypeCache = new TypeMask.nonNullSubclass(
|
| - helpers.jsMutableArrayClass, compiler.world);
|
| + helpers.jsMutableArrayClass, compiler.closedWorld);
|
| }
|
| return _mutableArrayTypeCache;
|
| }
|
| @@ -372,8 +372,8 @@ class JavaScriptBackend extends Backend {
|
| TypeMask _fixedArrayTypeCache;
|
| TypeMask get fixedArrayType {
|
| if (_fixedArrayTypeCache == null) {
|
| - _fixedArrayTypeCache =
|
| - new TypeMask.nonNullExact(helpers.jsFixedArrayClass, compiler.world);
|
| + _fixedArrayTypeCache = new TypeMask.nonNullExact(
|
| + helpers.jsFixedArrayClass, compiler.closedWorld);
|
| }
|
| return _fixedArrayTypeCache;
|
| }
|
| @@ -382,7 +382,7 @@ class JavaScriptBackend extends Backend {
|
| TypeMask get extendableArrayType {
|
| if (_extendableArrayTypeCache == null) {
|
| _extendableArrayTypeCache = new TypeMask.nonNullExact(
|
| - helpers.jsExtendableArrayClass, compiler.world);
|
| + helpers.jsExtendableArrayClass, compiler.closedWorld);
|
| }
|
| return _extendableArrayTypeCache;
|
| }
|
| @@ -391,7 +391,7 @@ class JavaScriptBackend extends Backend {
|
| TypeMask get unmodifiableArrayType {
|
| if (_unmodifiableArrayTypeCache == null) {
|
| _unmodifiableArrayTypeCache = new TypeMask.nonNullExact(
|
| - helpers.jsUnmodifiableArrayClass, compiler.world);
|
| + helpers.jsUnmodifiableArrayClass, compiler.closedWorld);
|
| }
|
| return _fixedArrayTypeCache;
|
| }
|
| @@ -908,8 +908,9 @@ class JavaScriptBackend extends Backend {
|
| if (elements == null) return false;
|
| if (elements.isEmpty) return false;
|
| return elements.any((element) {
|
| - return selector.applies(element, compiler.world) &&
|
| - (mask == null || mask.canHit(element, selector, compiler.world));
|
| + return selector.applies(element, compiler.closedWorld) &&
|
| + (mask == null ||
|
| + mask.canHit(element, selector, compiler.closedWorld));
|
| });
|
| }
|
|
|
| @@ -965,7 +966,7 @@ class JavaScriptBackend extends Backend {
|
| }
|
|
|
| Set<ClassElement> nativeSubclassesOfMixin(ClassElement mixin) {
|
| - ClassWorld classWorld = compiler.world;
|
| + ClassWorld classWorld = compiler.closedWorld;
|
| Iterable<MixinApplicationElement> uses = classWorld.mixinUsesOf(mixin);
|
| Set<ClassElement> result = null;
|
| for (MixinApplicationElement use in uses) {
|
| @@ -1868,7 +1869,7 @@ class JavaScriptBackend extends Backend {
|
| if (!type.isRaw) return false;
|
| ClassElement classElement = type.element;
|
| if (isInterceptorClass(classElement)) return false;
|
| - return compiler.world.hasOnlySubclasses(classElement);
|
| + return compiler.closedWorld.hasOnlySubclasses(classElement);
|
| }
|
|
|
| bool isNullImplementation(ClassElement cls) {
|
| @@ -2161,8 +2162,9 @@ class JavaScriptBackend extends Backend {
|
| }
|
| });
|
| // 4) all overriding members of subclasses/subtypes (should be resolved)
|
| - if (compiler.world.hasAnyStrictSubtype(cls)) {
|
| - compiler.world.forEachStrictSubtypeOf(cls, (ClassElement subcls) {
|
| + if (compiler.closedWorld.hasAnyStrictSubtype(cls)) {
|
| + compiler.closedWorld.forEachStrictSubtypeOf(cls,
|
| + (ClassElement subcls) {
|
| subcls.forEachClassMember((Member member) {
|
| if (memberNames.contains(member.name)) {
|
| // TODO(20993): find out why this assertion fails.
|
| @@ -2241,8 +2243,8 @@ class JavaScriptBackend extends Backend {
|
| reflectableMembers.add(helpers.boundClosureClass);
|
| }
|
| // Add typedefs.
|
| - reflectableMembers
|
| - .addAll(compiler.world.allTypedefs.where(referencedFromMirrorSystem));
|
| + reflectableMembers.addAll(
|
| + compiler.closedWorld.allTypedefs.where(referencedFromMirrorSystem));
|
| // Register all symbols of reflectable elements
|
| for (Element element in reflectableMembers) {
|
| symbolsUsed.add(element.name);
|
| @@ -2285,25 +2287,26 @@ class JavaScriptBackend extends Backend {
|
| // check for the interface [JavaScriptIndexingBehavior].
|
| ClassElement typedDataClass = compiler.commonElements.typedDataClass;
|
| return typedDataClass != null &&
|
| - compiler.world.isInstantiated(typedDataClass) &&
|
| - mask.satisfies(typedDataClass, compiler.world) &&
|
| - mask.satisfies(helpers.jsIndexingBehaviorInterface, compiler.world);
|
| + compiler.closedWorld.isInstantiated(typedDataClass) &&
|
| + mask.satisfies(typedDataClass, compiler.closedWorld) &&
|
| + mask.satisfies(
|
| + helpers.jsIndexingBehaviorInterface, compiler.closedWorld);
|
| }
|
|
|
| bool couldBeTypedArray(TypeMask mask) {
|
| bool intersects(TypeMask type1, TypeMask type2) =>
|
| - !type1.intersection(type2, compiler.world).isEmpty;
|
| + !type1.intersection(type2, compiler.closedWorld).isEmpty;
|
| // TODO(herhut): Maybe cache the TypeMask for typedDataClass and
|
| // jsIndexingBehaviourInterface.
|
| ClassElement typedDataClass = compiler.commonElements.typedDataClass;
|
| return typedDataClass != null &&
|
| - compiler.world.isInstantiated(typedDataClass) &&
|
| + compiler.closedWorld.isInstantiated(typedDataClass) &&
|
| intersects(
|
| - mask, new TypeMask.subtype(typedDataClass, compiler.world)) &&
|
| + mask, new TypeMask.subtype(typedDataClass, compiler.closedWorld)) &&
|
| intersects(
|
| mask,
|
| new TypeMask.subtype(
|
| - helpers.jsIndexingBehaviorInterface, compiler.world));
|
| + helpers.jsIndexingBehaviorInterface, compiler.closedWorld));
|
| }
|
|
|
| /// Returns all static fields that are referenced through [targetsUsed].
|
| @@ -2505,14 +2508,14 @@ class JavaScriptBackend extends Backend {
|
| reporter.reportHintMessage(
|
| element, MessageKind.GENERIC, {'text': "Cannot throw"});
|
| }
|
| - compiler.world.registerCannotThrow(element);
|
| + compiler.inferenceWorld.registerCannotThrow(element);
|
| } else if (cls == helpers.noSideEffectsClass) {
|
| hasNoSideEffects = true;
|
| if (VERBOSE_OPTIMIZER_HINTS) {
|
| reporter.reportHintMessage(
|
| element, MessageKind.GENERIC, {'text': "Has no side effects"});
|
| }
|
| - compiler.world.registerSideEffectsFree(element);
|
| + compiler.inferenceWorld.registerSideEffectsFree(element);
|
| }
|
| }
|
| if (hasForceInline && hasNoInline) {
|
| @@ -2869,7 +2872,7 @@ class JavaScriptImpactTransformer extends ImpactTransformer {
|
| case TypeUseKind.TYPE_LITERAL:
|
| backend.customElementsAnalysis.registerTypeLiteral(type);
|
| if (type.isTypedef) {
|
| - backend.compiler.world.allTypedefs.add(type.element);
|
| + backend.compiler.openWorld.allTypedefs.add(type.element);
|
| }
|
| if (type.isTypeVariable && type is! MethodTypeVariableType) {
|
| // GENERIC_METHODS: The `is!` test above filters away method type
|
|
|