| Index: pkg/compiler/lib/src/cps_ir/type_mask_system.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
|
| index 6910d46392df3b18538939d2143c30cd88b22459..4abf1b29d85176947270e9a72552fe5c9a4f78be 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
|
| @@ -9,6 +9,7 @@ import '../compiler.dart' as dart2js show Compiler;
|
| import '../constants/values.dart';
|
| import '../dart_types.dart' as types;
|
| import '../elements/elements.dart';
|
| +import '../js_backend/backend_helpers.dart' show BackendHelpers;
|
| import '../js_backend/js_backend.dart' show JavaScriptBackend;
|
| import '../types/types.dart';
|
| import '../types/constants.dart' show computeTypeMask;
|
| @@ -48,7 +49,9 @@ class TypeMaskSystem {
|
|
|
| TypeMask _indexableTypeTest;
|
|
|
| - ClassElement get jsNullClass => backend.jsNullClass;
|
| + ClassElement get jsNullClass => helpers.jsNullClass;
|
| +
|
| + BackendHelpers get helpers => backend.helpers;
|
|
|
| // TODO(karlklose): remove compiler here.
|
| TypeMaskSystem(dart2js.Compiler compiler)
|
| @@ -69,9 +72,9 @@ class TypeMaskSystem {
|
| new TypeMask.unionOf(<TypeMask>[anyNum, anyString, anyBool],
|
| classWorld);
|
| interceptorType =
|
| - new TypeMask.nonNullSubtype(backend.jsInterceptorClass, classWorld);
|
| + new TypeMask.nonNullSubtype(helpers.jsInterceptorClass, classWorld);
|
|
|
| - TypeMask typedArray = nonNullSubclass(backend.typedArrayClass);
|
| + TypeMask typedArray = nonNullSubclass(helpers.typedArrayClass);
|
| fixedLengthType = new TypeMask.unionOf(
|
| <TypeMask>[stringType, backend.fixedArrayType, typedArray],
|
| classWorld);
|
| @@ -80,7 +83,7 @@ class TypeMaskSystem {
|
| // string because the type inference does not infer that all strings are
|
| // indexables.
|
| TypeMask indexable =
|
| - new TypeMask.nonNullSubtype(backend.jsIndexableClass, classWorld);
|
| + new TypeMask.nonNullSubtype(helpers.jsIndexableClass, classWorld);
|
| _indexableTypeTest = new TypeMask.unionOf(
|
| <TypeMask>[indexable, anyString],
|
| classWorld);
|
| @@ -89,7 +92,7 @@ class TypeMaskSystem {
|
| bool methodUsesReceiverArgument(FunctionElement function) {
|
| assert(backend.isInterceptedMethod(function));
|
| ClassElement clazz = function.enclosingClass.declaration;
|
| - return clazz.isSubclassOf(backend.jsInterceptorClass) ||
|
| + return clazz.isSubclassOf(helpers.jsInterceptorClass) ||
|
| classWorld.isUsedAsMixin(clazz);
|
| }
|
|
|
| @@ -218,7 +221,7 @@ class TypeMaskSystem {
|
| bool isDefinitelyNonNegativeInt(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| // The JSPositiveInt class includes zero, despite the name.
|
| - return t.satisfies(backend.jsPositiveIntClass, classWorld);
|
| + return t.satisfies(helpers.jsPositiveIntClass, classWorld);
|
| }
|
|
|
| bool isDefinitelyInt(TypeMask t, {bool allowNull: false}) {
|
| @@ -228,17 +231,17 @@ class TypeMaskSystem {
|
|
|
| bool isDefinitelyUint31(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.satisfies(backend.jsUInt31Class, classWorld);
|
| + return t.satisfies(helpers.jsUInt31Class, classWorld);
|
| }
|
|
|
| bool isDefinitelyUint32(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.satisfies(backend.jsUInt32Class, classWorld);
|
| + return t.satisfies(helpers.jsUInt32Class, classWorld);
|
| }
|
|
|
| bool isDefinitelyUint(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.satisfies(backend.jsPositiveIntClass, classWorld);
|
| + return t.satisfies(helpers.jsPositiveIntClass, classWorld);
|
| }
|
|
|
| // TODO(sra): Find a better name. 'NativeList' is a bad name because there
|
| @@ -246,22 +249,22 @@ class TypeMaskSystem {
|
| // should not be) included in this predicate.
|
| bool isDefinitelyNativeList(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.nonNullable().satisfies(backend.jsArrayClass, classWorld);
|
| + return t.nonNullable().satisfies(helpers.jsArrayClass, classWorld);
|
| }
|
|
|
| bool isDefinitelyMutableNativeList(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.nonNullable().satisfies(backend.jsMutableArrayClass, classWorld);
|
| + return t.nonNullable().satisfies(helpers.jsMutableArrayClass, classWorld);
|
| }
|
|
|
| bool isDefinitelyFixedNativeList(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.nonNullable().satisfies(backend.jsFixedArrayClass, classWorld);
|
| + return t.nonNullable().satisfies(helpers.jsFixedArrayClass, classWorld);
|
| }
|
|
|
| bool isDefinitelyExtendableNativeList(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.nonNullable().satisfies(backend.jsExtendableArrayClass,
|
| + return t.nonNullable().satisfies(helpers.jsExtendableArrayClass,
|
| classWorld);
|
| }
|
|
|
| @@ -272,7 +275,7 @@ class TypeMaskSystem {
|
|
|
| bool isDefinitelyMutableIndexable(TypeMask t, {bool allowNull: false}) {
|
| if (!allowNull && t.isNullable) return false;
|
| - return t.nonNullable().satisfies(backend.jsMutableIndexableClass,
|
| + return t.nonNullable().satisfies(helpers.jsMutableIndexableClass,
|
| classWorld);
|
| }
|
|
|
| @@ -383,8 +386,8 @@ class TypeMaskSystem {
|
| if (isDefinitelyString(type)) {
|
| return stringType;
|
| }
|
| - if (type.satisfies(backend.typedArrayClass, classWorld)) {
|
| - if (type.satisfies(backend.typedArrayOfIntClass, classWorld)) {
|
| + if (type.satisfies(helpers.typedArrayClass, classWorld)) {
|
| + if (type.satisfies(helpers.typedArrayOfIntClass, classWorld)) {
|
| return intType;
|
| }
|
| return numType;
|
|
|