| 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 | 
|  |