| Index: pkg/compiler/lib/src/types/masks.dart | 
| diff --git a/pkg/compiler/lib/src/types/masks.dart b/pkg/compiler/lib/src/types/masks.dart | 
| index 0f8fc76afa63bcae6e46d4409dccb41d51783ef7..15d17c8b6e5664fd37614aad54de7fb85a417086 100644 | 
| --- a/pkg/compiler/lib/src/types/masks.dart | 
| +++ b/pkg/compiler/lib/src/types/masks.dart | 
| @@ -5,7 +5,7 @@ | 
| library masks; | 
|  | 
| import '../common.dart'; | 
| -import '../common/backend_api.dart' show BackendClasses; | 
| +import '../common_elements.dart' show CommonElements; | 
| import '../constants/values.dart' show PrimitiveConstantValue; | 
| import '../elements/entities.dart'; | 
| import '../inferrer/type_graph_inferrer.dart' show TypeGraphInferrer; | 
| @@ -36,7 +36,7 @@ class CommonMasks { | 
|  | 
| CommonMasks(this.closedWorld); | 
|  | 
| -  BackendClasses get backendClasses => closedWorld.backendClasses; | 
| +  CommonElements get commonElements => closedWorld.commonElements; | 
|  | 
| TypeMask _dynamicType; | 
| TypeMask _nonNullType; | 
| @@ -75,64 +75,64 @@ class CommonMasks { | 
| closedWorld.commonElements.objectClass, closedWorld); | 
|  | 
| TypeMask get intType => _intType ??= | 
| -      new TypeMask.nonNullSubclass(backendClasses.intClass, closedWorld); | 
| +      new TypeMask.nonNullSubclass(commonElements.jsIntClass, closedWorld); | 
|  | 
| TypeMask get uint32Type => _uint32Type ??= | 
| -      new TypeMask.nonNullSubclass(backendClasses.uint32Class, closedWorld); | 
| +      new TypeMask.nonNullSubclass(commonElements.jsUInt32Class, closedWorld); | 
|  | 
| TypeMask get uint31Type => _uint31Type ??= | 
| -      new TypeMask.nonNullExact(backendClasses.uint31Class, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsUInt31Class, closedWorld); | 
|  | 
| TypeMask get positiveIntType => | 
| _positiveIntType ??= new TypeMask.nonNullSubclass( | 
| -          backendClasses.positiveIntClass, closedWorld); | 
| +          commonElements.jsPositiveIntClass, closedWorld); | 
|  | 
| TypeMask get doubleType => _doubleType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.doubleClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsDoubleClass, closedWorld); | 
|  | 
| TypeMask get numType => _numType ??= | 
| -      new TypeMask.nonNullSubclass(backendClasses.numClass, closedWorld); | 
| +      new TypeMask.nonNullSubclass(commonElements.jsNumberClass, closedWorld); | 
|  | 
| TypeMask get boolType => _boolType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.boolClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsBoolClass, closedWorld); | 
|  | 
| TypeMask get functionType => _functionType ??= | 
| -      new TypeMask.nonNullSubtype(backendClasses.functionClass, closedWorld); | 
| +      new TypeMask.nonNullSubtype(commonElements.functionClass, closedWorld); | 
|  | 
| TypeMask get listType => _listType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.listClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsArrayClass, closedWorld); | 
|  | 
| -  TypeMask get constListType => _constListType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.constListClass, closedWorld); | 
| +  TypeMask get constListType => _constListType ??= new TypeMask.nonNullExact( | 
| +      commonElements.jsUnmodifiableArrayClass, closedWorld); | 
|  | 
| TypeMask get fixedListType => _fixedListType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.fixedListClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsFixedArrayClass, closedWorld); | 
|  | 
| -  TypeMask get growableListType => _growableListType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.growableListClass, closedWorld); | 
| +  TypeMask get growableListType => | 
| +      _growableListType ??= new TypeMask.nonNullExact( | 
| +          commonElements.jsExtendableArrayClass, closedWorld); | 
|  | 
| TypeMask get mapType => _mapType ??= | 
| -      new TypeMask.nonNullSubtype(backendClasses.mapClass, closedWorld); | 
| +      new TypeMask.nonNullSubtype(commonElements.mapLiteralClass, closedWorld); | 
|  | 
| -  TypeMask get constMapType => _constMapType ??= | 
| -      new TypeMask.nonNullSubtype(backendClasses.constMapClass, closedWorld); | 
| +  TypeMask get constMapType => _constMapType ??= new TypeMask.nonNullSubtype( | 
| +      commonElements.constMapLiteralClass, closedWorld); | 
|  | 
| TypeMask get stringType => _stringType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.stringClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsStringClass, closedWorld); | 
|  | 
| TypeMask get typeType => _typeType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.typeClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.typeLiteralClass, closedWorld); | 
|  | 
| -  TypeMask get syncStarIterableType => | 
| -      _syncStarIterableType ??= new TypeMask.nonNullExact( | 
| -          backendClasses.syncStarIterableClass, closedWorld); | 
| +  TypeMask get syncStarIterableType => _syncStarIterableType ??= | 
| +      new TypeMask.nonNullExact(commonElements.syncStarIterable, closedWorld); | 
|  | 
| -  TypeMask get asyncFutureType => _asyncFutureType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.asyncFutureClass, closedWorld); | 
| +  TypeMask get asyncFutureType => | 
| +      _asyncFutureType ??= new TypeMask.nonNullExact( | 
| +          commonElements.futureImplementation, closedWorld); | 
|  | 
| -  TypeMask get asyncStarStreamType => | 
| -      _asyncStarStreamType ??= new TypeMask.nonNullExact( | 
| -          backendClasses.asyncStarStreamClass, closedWorld); | 
| +  TypeMask get asyncStarStreamType => _asyncStarStreamType ??= | 
| +      new TypeMask.nonNullExact(commonElements.controllerStream, closedWorld); | 
|  | 
| // TODO(johnniwinther): Assert that the null type has been resolved. | 
| TypeMask get nullType => _nullType ??= const TypeMask.empty(); | 
| @@ -140,27 +140,29 @@ class CommonMasks { | 
| TypeMask get emptyType => const TypeMask.nonNullEmpty(); | 
|  | 
| TypeMask get indexablePrimitiveType => _indexablePrimitiveType ??= | 
| -      new TypeMask.nonNullSubtype(backendClasses.indexableClass, closedWorld); | 
| +      new TypeMask.nonNullSubtype(commonElements.jsIndexableClass, closedWorld); | 
|  | 
| TypeMask get readableArrayType => _readableArrayType ??= | 
| -      new TypeMask.nonNullSubclass(backendClasses.listClass, closedWorld); | 
| +      new TypeMask.nonNullSubclass(commonElements.jsArrayClass, closedWorld); | 
|  | 
| TypeMask get mutableArrayType => | 
| _mutableArrayType ??= new TypeMask.nonNullSubclass( | 
| -          backendClasses.mutableListClass, closedWorld); | 
| +          commonElements.jsMutableArrayClass, closedWorld); | 
|  | 
| TypeMask get fixedArrayType => _fixedArrayType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.fixedListClass, closedWorld); | 
| +      new TypeMask.nonNullExact(commonElements.jsFixedArrayClass, closedWorld); | 
|  | 
| -  TypeMask get extendableArrayType => _extendableArrayType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.growableListClass, closedWorld); | 
| +  TypeMask get extendableArrayType => | 
| +      _extendableArrayType ??= new TypeMask.nonNullExact( | 
| +          commonElements.jsExtendableArrayClass, closedWorld); | 
|  | 
| -  TypeMask get unmodifiableArrayType => _unmodifiableArrayType ??= | 
| -      new TypeMask.nonNullExact(backendClasses.constListClass, closedWorld); | 
| +  TypeMask get unmodifiableArrayType => | 
| +      _unmodifiableArrayType ??= new TypeMask.nonNullExact( | 
| +          commonElements.jsUnmodifiableArrayClass, closedWorld); | 
|  | 
| TypeMask get interceptorType => | 
| _interceptorType ??= new TypeMask.nonNullSubclass( | 
| -          backendClasses.interceptorClass, closedWorld); | 
| +          commonElements.jsInterceptorClass, closedWorld); | 
|  | 
| bool isTypedArray(TypeMask mask) { | 
| // Just checking for [:TypedData:] is not sufficient, as it is an | 
| @@ -170,8 +172,8 @@ class CommonMasks { | 
| return typedDataClass != null && | 
| closedWorld.isInstantiated(typedDataClass) && | 
| mask.satisfies(typedDataClass, closedWorld) && | 
| -        mask.satisfies( | 
| -            closedWorld.backendClasses.indexingBehaviorClass, closedWorld); | 
| +        mask.satisfies(closedWorld.commonElements.jsIndexingBehaviorInterface, | 
| +            closedWorld); | 
| } | 
|  | 
| bool couldBeTypedArray(TypeMask mask) { | 
| @@ -186,7 +188,8 @@ class CommonMasks { | 
| intersects( | 
| mask, | 
| new TypeMask.subtype( | 
| -                closedWorld.backendClasses.indexingBehaviorClass, closedWorld)); | 
| +                closedWorld.commonElements.jsIndexingBehaviorInterface, | 
| +                closedWorld)); | 
| } | 
|  | 
| TypeMask createNonNullExact(ClassEntity cls) { | 
|  |