| Index: pkg/compiler/lib/src/types/flat_type_mask.dart
|
| diff --git a/pkg/compiler/lib/src/types/flat_type_mask.dart b/pkg/compiler/lib/src/types/flat_type_mask.dart
|
| index 380c2fb1a25cfddf8642cb8c53b4f7bd193538c6..b1b6ca55b079127525384d158126649ae8dcc6f6 100644
|
| --- a/pkg/compiler/lib/src/types/flat_type_mask.dart
|
| +++ b/pkg/compiler/lib/src/types/flat_type_mask.dart
|
| @@ -121,21 +121,22 @@ class FlatTypeMask implements TypeMask {
|
| // not track correctly the list of truly instantiated classes.
|
| Backend backend = classWorld.backend;
|
| if (containsOnlyString(classWorld)) {
|
| - return cls == classWorld.stringClass ||
|
| + return cls == classWorld.coreClasses.stringClass ||
|
| cls == backend.stringImplementation;
|
| }
|
| if (containsOnlyBool(classWorld)) {
|
| - return cls == classWorld.boolClass || cls == backend.boolImplementation;
|
| + return cls == classWorld.coreClasses.boolClass ||
|
| + cls == backend.boolImplementation;
|
| }
|
| if (containsOnlyInt(classWorld)) {
|
| - return cls == classWorld.intClass ||
|
| + return cls == classWorld.coreClasses.intClass ||
|
| cls == backend.intImplementation ||
|
| cls == backend.positiveIntImplementation ||
|
| cls == backend.uint32Implementation ||
|
| cls == backend.uint31Implementation;
|
| }
|
| if (containsOnlyDouble(classWorld)) {
|
| - return cls == classWorld.doubleClass ||
|
| + return cls == classWorld.coreClasses.doubleClass ||
|
| cls == backend.doubleImplementation;
|
| }
|
| return false;
|
| @@ -165,7 +166,7 @@ class FlatTypeMask implements TypeMask {
|
| // TODO(herhut): Add check whether flatOther.base is superclass of
|
| // all subclasses of this.base.
|
| if (flatOther.isSubclass) {
|
| - if (isSubtype) return (otherBase == classWorld.objectClass);
|
| + if (isSubtype) return (otherBase == classWorld.coreClasses.objectClass);
|
| return classWorld.isSubclassOf(base, otherBase);
|
| }
|
| assert(flatOther.isSubtype);
|
| @@ -179,7 +180,7 @@ class FlatTypeMask implements TypeMask {
|
|
|
| bool containsOnlyInt(ClassWorld classWorld) {
|
| Backend backend = classWorld.backend;
|
| - return base == classWorld.intClass ||
|
| + return base == classWorld.coreClasses.intClass ||
|
| base == backend.intImplementation ||
|
| base == backend.positiveIntImplementation ||
|
| base == backend.uint31Implementation ||
|
| @@ -188,7 +189,7 @@ class FlatTypeMask implements TypeMask {
|
|
|
| bool containsOnlyDouble(ClassWorld classWorld) {
|
| Backend backend = classWorld.backend;
|
| - return base == classWorld.doubleClass ||
|
| + return base == classWorld.coreClasses.doubleClass ||
|
| base == backend.doubleImplementation;
|
| }
|
|
|
| @@ -196,18 +197,19 @@ class FlatTypeMask implements TypeMask {
|
| Backend backend = classWorld.backend;
|
| return containsOnlyInt(classWorld) ||
|
| containsOnlyDouble(classWorld) ||
|
| - base == classWorld.numClass ||
|
| + base == classWorld.coreClasses.numClass ||
|
| base == backend.numImplementation;
|
| }
|
|
|
| bool containsOnlyBool(ClassWorld classWorld) {
|
| Backend backend = classWorld.backend;
|
| - return base == classWorld.boolClass || base == backend.boolImplementation;
|
| + return base == classWorld.coreClasses.boolClass ||
|
| + base == backend.boolImplementation;
|
| }
|
|
|
| bool containsOnlyString(ClassWorld classWorld) {
|
| Backend backend = classWorld.backend;
|
| - return base == classWorld.stringClass ||
|
| + return base == classWorld.coreClasses.stringClass ||
|
| base == backend.stringImplementation;
|
| }
|
|
|
| @@ -245,7 +247,7 @@ class FlatTypeMask implements TypeMask {
|
| */
|
| bool containsAll(ClassWorld classWorld) {
|
| if (isEmptyOrNull || isExact) return false;
|
| - return identical(base, classWorld.objectClass);
|
| + return identical(base, classWorld.coreClasses.objectClass);
|
| }
|
|
|
| TypeMask union(TypeMask other, ClassWorld classWorld) {
|
| @@ -299,7 +301,8 @@ class FlatTypeMask implements TypeMask {
|
| assert(TypeMask.assertIsNormalized(this, classWorld));
|
| assert(TypeMask.assertIsNormalized(other, classWorld));
|
| int combined;
|
| - if ((isExact && other.isExact) || base == classWorld.objectClass) {
|
| + if ((isExact && other.isExact) ||
|
| + base == classWorld.coreClasses.objectClass) {
|
| // Since the other mask is a subclass of this mask, we need the
|
| // resulting union to be a subclass too. If either one of the
|
| // masks are nullable the result should be nullable too.
|
| @@ -684,7 +687,7 @@ class FlatTypeMask implements TypeMask {
|
| Element locateSingleElement(Selector selector, Compiler compiler) {
|
| if (isEmptyOrNull) return null;
|
| Iterable<Element> targets =
|
| - compiler.world.allFunctions.filter(selector, this);
|
| + compiler.closedWorld.allFunctions.filter(selector, this);
|
| if (targets.length != 1) return null;
|
| Element result = targets.first;
|
| ClassElement enclosing = result.enclosingClass;
|
| @@ -692,7 +695,7 @@ class FlatTypeMask implements TypeMask {
|
| // all classes in the receiver type [this]. It could be found only in a
|
| // subclass or in an inheritance-wise unrelated class in case of subtype
|
| // selectors.
|
| - ClassWorld classWorld = compiler.world;
|
| + ClassWorld classWorld = compiler.closedWorld;
|
| if (isSubtype) {
|
| // if (classWorld.isUsedAsMixin(enclosing)) {
|
| if (classWorld.everySubtypeIsSubclassOfOrMixinUseOf(base, enclosing)) {
|
|
|