| Index: pkg/compiler/lib/src/ssa/optimize.dart
 | 
| diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
 | 
| index f15dceba538109b5baf66911a00f60440c742aa2..7514ed7c651233fb18b26653e4b311a5be6fca2c 100644
 | 
| --- a/pkg/compiler/lib/src/ssa/optimize.dart
 | 
| +++ b/pkg/compiler/lib/src/ssa/optimize.dart
 | 
| @@ -124,7 +124,7 @@ class SsaOptimizerTask extends CompilerTask {
 | 
|  /// of identifying gvn-able lengths and mis-identifies some unions of fixed
 | 
|  /// length indexables (see TODO) as not fixed length.
 | 
|  bool isFixedLength(mask, Compiler compiler) {
 | 
| -  ClassWorld classWorld = compiler.world;
 | 
| +  ClassWorld classWorld = compiler.closedWorld;
 | 
|    JavaScriptBackend backend = compiler.backend;
 | 
|    if (mask.isContainer && mask.length != null) {
 | 
|      // A container on which we have inferred the length.
 | 
| @@ -187,7 +187,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|            // If we can replace [instruction] with [replacement], then
 | 
|            // [replacement]'s type can be narrowed.
 | 
|            TypeMask newType = replacement.instructionType
 | 
| -              .intersection(instruction.instructionType, compiler.world);
 | 
| +              .intersection(instruction.instructionType, compiler.closedWorld);
 | 
|            replacement.instructionType = newType;
 | 
|          }
 | 
|  
 | 
| @@ -280,7 +280,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|  
 | 
|      // All values that cannot be 'true' are boolified to false.
 | 
|      TypeMask mask = input.instructionType;
 | 
| -    if (!mask.contains(helpers.jsBoolClass, compiler.world)) {
 | 
| +    if (!mask.contains(helpers.jsBoolClass, compiler.closedWorld)) {
 | 
|        return graph.addConstantBool(false, compiler);
 | 
|      }
 | 
|      return node;
 | 
| @@ -330,7 +330,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|        Element element = helpers.jsIndexableLength;
 | 
|        bool isFixed = isFixedLength(actualReceiver.instructionType, compiler);
 | 
|        TypeMask actualType = node.instructionType;
 | 
| -      ClassWorld classWorld = compiler.world;
 | 
| +      ClassWorld classWorld = compiler.closedWorld;
 | 
|        TypeMask resultType = backend.positiveIntType;
 | 
|        // If we already have computed a more specific type, keep that type.
 | 
|        if (HInstruction.isInstanceOf(
 | 
| @@ -370,7 +370,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|      TypeMask mask = node.mask;
 | 
|      HInstruction input = node.inputs[1];
 | 
|  
 | 
| -    World world = compiler.world;
 | 
| +    ClassWorld world = compiler.closedWorld;
 | 
|  
 | 
|      bool applies(Element element) {
 | 
|        return selector.applies(element, world) &&
 | 
| @@ -440,7 +440,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|  
 | 
|      TypeMask receiverType = node.getDartReceiver(compiler).instructionType;
 | 
|      Element element =
 | 
| -        compiler.world.locateSingleElement(node.selector, receiverType);
 | 
| +        compiler.closedWorld.locateSingleElement(node.selector, receiverType);
 | 
|      // TODO(ngeoffray): Also fold if it's a getter or variable.
 | 
|      if (element != null &&
 | 
|          element.isFunction
 | 
| @@ -639,7 +639,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|      // Intersection of int and double return conflicting, so
 | 
|      // we don't optimize on numbers to preserve the runtime semantics.
 | 
|      if (!(left.isNumberOrNull(compiler) && right.isNumberOrNull(compiler))) {
 | 
| -      if (leftType.isDisjoint(rightType, compiler.world)) {
 | 
| +      if (leftType.isDisjoint(rightType, compiler.closedWorld)) {
 | 
|          return makeFalse();
 | 
|        }
 | 
|      }
 | 
| @@ -730,7 +730,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|        return graph.addConstantBool(true, compiler);
 | 
|      }
 | 
|  
 | 
| -    ClassWorld classWorld = compiler.world;
 | 
| +    ClassWorld classWorld = compiler.closedWorld;
 | 
|      HInstruction expression = node.expression;
 | 
|      if (expression.isInteger(compiler)) {
 | 
|        if (element == coreClasses.intClass ||
 | 
| @@ -780,7 +780,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|            : new TypeMask.nonNullSubtype(element, classWorld);
 | 
|        if (expressionMask.union(typeMask, classWorld) == typeMask) {
 | 
|          return graph.addConstantBool(true, compiler);
 | 
| -      } else if (expressionMask.isDisjoint(typeMask, compiler.world)) {
 | 
| +      } else if (expressionMask.isDisjoint(typeMask, compiler.closedWorld)) {
 | 
|          return graph.addConstantBool(false, compiler);
 | 
|        }
 | 
|      }
 | 
| @@ -811,7 +811,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|    }
 | 
|  
 | 
|    HInstruction removeIfCheckAlwaysSucceeds(HCheck node, TypeMask checkedType) {
 | 
| -    ClassWorld classWorld = compiler.world;
 | 
| +    ClassWorld classWorld = compiler.closedWorld;
 | 
|      if (checkedType.containsAll(classWorld)) return node;
 | 
|      HInstruction input = node.checkedInput;
 | 
|      TypeMask inputType = input.instructionType;
 | 
| @@ -823,7 +823,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|    VariableElement findConcreteFieldForDynamicAccess(
 | 
|        HInstruction receiver, Selector selector) {
 | 
|      TypeMask receiverType = receiver.instructionType;
 | 
| -    return compiler.world.locateSingleField(selector, receiverType);
 | 
| +    return compiler.closedWorld.locateSingleField(selector, receiverType);
 | 
|    }
 | 
|  
 | 
|    HInstruction visitFieldGet(HFieldGet node) {
 | 
| @@ -901,7 +901,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|    }
 | 
|  
 | 
|    HInstruction directFieldGet(HInstruction receiver, Element field) {
 | 
| -    bool isAssignable = !compiler.world.fieldNeverChanges(field);
 | 
| +    bool isAssignable = !compiler.closedWorld.fieldNeverChanges(field);
 | 
|  
 | 
|      TypeMask type;
 | 
|      if (backend.isNative(field.enclosingClass)) {
 | 
| @@ -1032,7 +1032,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
 | 
|    }
 | 
|  
 | 
|    bool needsSubstitutionForTypeVariableAccess(ClassElement cls) {
 | 
| -    ClassWorld classWorld = compiler.world;
 | 
| +    ClassWorld classWorld = compiler.closedWorld;
 | 
|      if (classWorld.isUsedAsMixin(cls)) return true;
 | 
|  
 | 
|      return classWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
 | 
| @@ -2041,7 +2041,7 @@ class SsaTypeConversionInserter extends HBaseVisitor
 | 
|      if (ifUsers.isEmpty && notIfUsers.isEmpty) return;
 | 
|  
 | 
|      TypeMask convertedType =
 | 
| -        new TypeMask.nonNullSubtype(element, compiler.world);
 | 
| +        new TypeMask.nonNullSubtype(element, compiler.closedWorld);
 | 
|      HInstruction input = instruction.expression;
 | 
|  
 | 
|      for (HIf ifUser in ifUsers) {
 | 
| @@ -2342,11 +2342,11 @@ class MemorySet {
 | 
|      // Typed arrays of different types might have a shared buffer.
 | 
|      if (couldBeTypedArray(first) && couldBeTypedArray(second)) return true;
 | 
|      return !first.instructionType
 | 
| -        .isDisjoint(second.instructionType, compiler.world);
 | 
| +        .isDisjoint(second.instructionType, compiler.closedWorld);
 | 
|    }
 | 
|  
 | 
|    bool isFinal(Element element) {
 | 
| -    return compiler.world.fieldNeverChanges(element);
 | 
| +    return compiler.closedWorld.fieldNeverChanges(element);
 | 
|    }
 | 
|  
 | 
|    bool isConcrete(HInstruction instruction) {
 | 
| @@ -2507,8 +2507,8 @@ class MemorySet {
 | 
|        HBasicBlock block, int predecessorIndex) {
 | 
|      if (first == null || second == null) return null;
 | 
|      if (first == second) return first;
 | 
| -    TypeMask phiType =
 | 
| -        second.instructionType.union(first.instructionType, compiler.world);
 | 
| +    TypeMask phiType = second.instructionType
 | 
| +        .union(first.instructionType, compiler.closedWorld);
 | 
|      if (first is HPhi && first.block == block) {
 | 
|        HPhi phi = first;
 | 
|        phi.addInput(second);
 | 
| 
 |