blob: 3de8a1f312bb1e8ab5ceb4f169f4d0ed2e488f5d [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library dart2js.js_model.elements;
import '../common_elements.dart';
import '../constants/constant_system.dart';
import '../elements/elements.dart';
import '../elements/entities.dart';
import '../elements/types.dart';
import '../js_backend/backend_usage.dart';
import '../js_backend/interceptor_data.dart';
import '../js_backend/native_data.dart';
import '../native/behavior.dart';
import '../ordered_typeset.dart';
import '../universe/class_set.dart';
import '../universe/function_set.dart';
import '../universe/selector.dart';
import '../universe/world_builder.dart';
import '../world.dart';
/// Bidirectional map between 'frontend' and 'backend' elements.
///
/// Frontend elements are what we read in, these typically represents concepts
/// in Dart. Backend elements are what we generate, these may include elements
/// that do not correspond to a Dart concept, such as closure classes.
///
/// Querying for the frontend element for a backend-only element throws an
/// exception.
class JsToFrontendMap {
LibraryEntity toBackendLibrary(LibraryEntity library) => library;
LibraryEntity toFrontendLibrary(LibraryEntity library) => library;
ClassEntity toBackendClass(ClassEntity cls) => cls;
ClassEntity toFrontendClass(ClassEntity cls) => cls;
MemberEntity toBackendMember(MemberEntity member) => member;
MemberEntity toFrontendMember(MemberEntity member) => member;
DartType toBackendType(DartType type) => type;
DartType fromFrontendType(DartType type) => type;
}
class JsClosedWorld extends ClosedWorldBase {
JsClosedWorld(
{CommonElements commonElements,
ConstantSystem constantSystem,
NativeData nativeData,
InterceptorData interceptorData,
BackendUsage backendUsage,
ResolutionWorldBuilder resolutionWorldBuilder,
Set<ClassEntity> implementedClasses,
FunctionSet functionSet,
Set<TypedefElement> allTypedefs,
Map<ClassEntity, Set<ClassEntity>> mixinUses,
Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
Map<ClassEntity, ClassSet> classSets})
: super(
commonElements: commonElements,
constantSystem: constantSystem,
nativeData: nativeData,
interceptorData: interceptorData,
backendUsage: backendUsage,
resolutionWorldBuilder: resolutionWorldBuilder,
implementedClasses: implementedClasses,
functionSet: functionSet,
allTypedefs: allTypedefs,
mixinUses: mixinUses,
typesImplementedBySubclasses: typesImplementedBySubclasses,
classHierarchyNodes: classHierarchyNodes,
classSets: classSets);
@override
bool hasConcreteMatch(ClassEntity cls, Selector selector,
{ClassEntity stopAtSuperclass}) {
throw new UnimplementedError('JsClosedWorld.hasConcreteMatch');
}
@override
void registerClosureClass(ClassElement cls) {
throw new UnimplementedError('JsClosedWorld.registerClosureClass');
}
@override
bool hasElementIn(ClassEntity cls, Selector selector, Entity element) {
throw new UnimplementedError('JsClosedWorld.hasElementIn');
}
@override
bool checkEntity(Entity element) => true;
@override
bool checkClass(ClassEntity cls) => true;
@override
bool checkInvariants(ClassEntity cls, {bool mustBeInstantiated: true}) {
return true;
}
@override
OrderedTypeSet getOrderedTypeSet(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.getOrderedTypeSet');
}
@override
int getHierarchyDepth(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.getHierarchyDepth');
}
@override
ClassEntity getSuperClass(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.getSuperClass');
}
@override
Iterable<ClassEntity> getInterfaces(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.getInterfaces');
}
@override
ClassEntity getAppliedMixin(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.getAppliedMixin');
}
@override
bool isNamedMixinApplication(ClassEntity cls) {
throw new UnimplementedError('JsClosedWorld.isNamedMixinApplication');
}
}
class JsNativeData implements NativeData {
final JsToFrontendMap _map;
final NativeData _nativeData;
JsNativeData(this._map, this._nativeData);
@override
bool isNativeClass(ClassEntity element) {
return _nativeData.isNativeClass(_map.toFrontendClass(element));
}
@override
String computeUnescapedJSInteropName(String name) {
return _nativeData.computeUnescapedJSInteropName(name);
}
@override
String getJsInteropMemberName(MemberEntity element) {
return _nativeData.getJsInteropMemberName(_map.toFrontendMember(element));
}
@override
String getJsInteropClassName(ClassEntity element) {
return _nativeData.getJsInteropClassName(_map.toFrontendClass(element));
}
@override
bool isAnonymousJsInteropClass(ClassEntity element) {
return _nativeData.isAnonymousJsInteropClass(_map.toFrontendClass(element));
}
@override
String getJsInteropLibraryName(LibraryEntity element) {
return _nativeData.getJsInteropLibraryName(_map.toFrontendLibrary(element));
}
@override
bool isJsInteropMember(MemberEntity element) {
return _nativeData.isJsInteropMember(_map.toFrontendMember(element));
}
@override
String getFixedBackendMethodPath(FunctionEntity element) {
return _nativeData
.getFixedBackendMethodPath(_map.toFrontendMember(element));
}
@override
String getFixedBackendName(MemberEntity element) {
return _nativeData.getFixedBackendName(_map.toFrontendMember(element));
}
@override
bool hasFixedBackendName(MemberEntity element) {
return _nativeData.hasFixedBackendName(_map.toFrontendMember(element));
}
@override
NativeBehavior getNativeFieldStoreBehavior(FieldEntity field) {
return _nativeData
.getNativeFieldStoreBehavior(_map.toFrontendMember(field));
}
@override
NativeBehavior getNativeFieldLoadBehavior(FieldEntity field) {
return _nativeData.getNativeFieldLoadBehavior(_map.toFrontendMember(field));
}
@override
NativeBehavior getNativeMethodBehavior(FunctionEntity method) {
return _nativeData.getNativeMethodBehavior(_map.toFrontendMember(method));
}
@override
bool isNativeMember(MemberEntity element) {
return _nativeData.isNativeMember(_map.toFrontendMember(element));
}
@override
bool isJsInteropClass(ClassEntity element) {
return _nativeData.isJsInteropClass(_map.toFrontendClass(element));
}
@override
bool isJsInteropLibrary(LibraryEntity element) {
return _nativeData.isJsInteropLibrary(_map.toFrontendLibrary(element));
}
@override
bool get isJsInteropUsed {
return _nativeData.isJsInteropUsed;
}
@override
bool isNativeOrExtendsNative(ClassEntity element) {
return _nativeData.isNativeOrExtendsNative(_map.toFrontendClass(element));
}
@override
bool hasNativeTagsForcedNonLeaf(ClassEntity cls) {
return _nativeData.hasNativeTagsForcedNonLeaf(_map.toFrontendClass(cls));
}
@override
List<String> getNativeTagsOfClass(ClassEntity cls) {
return _nativeData.getNativeTagsOfClass(_map.toFrontendClass(cls));
}
}
class JsBackendUsage implements BackendUsage {
final JsToFrontendMap _map;
final BackendUsage _backendUsage;
@override
bool needToInitializeIsolateAffinityTag;
@override
bool needToInitializeDispatchProperty;
JsBackendUsage(this._map, this._backendUsage) {
needToInitializeIsolateAffinityTag =
_backendUsage.needToInitializeIsolateAffinityTag;
needToInitializeDispatchProperty =
_backendUsage.needToInitializeDispatchProperty;
}
@override
bool isFunctionUsedByBackend(FunctionEntity element) {
return _backendUsage
.isFunctionUsedByBackend(_map.toFrontendMember(element));
}
@override
bool isFieldUsedByBackend(FieldEntity element) {
return _backendUsage.isFieldUsedByBackend(_map.toFrontendMember(element));
}
@override
Iterable<FunctionEntity> get globalFunctionDependencies {
return _backendUsage.globalFunctionDependencies.map(_map.toBackendMember);
}
@override
Iterable<ClassEntity> get globalClassDependencies {
return _backendUsage.globalClassDependencies.map(_map.toBackendClass);
}
@override
bool get requiresPreamble => _backendUsage.requiresPreamble;
@override
bool get isInvokeOnUsed => _backendUsage.isInvokeOnUsed;
@override
bool get isRuntimeTypeUsed => _backendUsage.isRuntimeTypeUsed;
@override
bool get isIsolateInUse => _backendUsage.isIsolateInUse;
@override
bool get isFunctionApplyUsed => _backendUsage.isFunctionApplyUsed;
@override
bool get isNoSuchMethodUsed => _backendUsage.isNoSuchMethodUsed;
}
class JsCommonElements implements CommonElements {
final JsToFrontendMap _map;
final CommonElements _commonElements;
JsCommonElements(this._map, this._commonElements);
@override
ClassEntity get objectClass =>
_map.toBackendClass(_commonElements.objectClass);
@override
ClassEntity get expectAssumeDynamicClass =>
_map.toBackendClass(_commonElements.expectAssumeDynamicClass);
@override
ClassEntity get expectTrustTypeAnnotationsClass =>
_map.toBackendClass(_commonElements.expectTrustTypeAnnotationsClass);
@override
ClassEntity get expectNoInlineClass =>
_map.toBackendClass(_commonElements.expectNoInlineClass);
@override
FunctionEntity get callInIsolate =>
_map.toBackendMember(_commonElements.callInIsolate);
@override
FunctionEntity get currentIsolate =>
_map.toBackendMember(_commonElements.currentIsolate);
@override
FunctionEntity get startRootIsolate =>
_map.toBackendMember(_commonElements.startRootIsolate);
@override
ClassEntity get jsBuiltinEnum =>
_map.toBackendClass(_commonElements.jsBuiltinEnum);
@override
ClassEntity get jsGetNameEnum =>
_map.toBackendClass(_commonElements.jsGetNameEnum);
@override
ClassEntity get typedArrayOfIntClass =>
_map.toBackendClass(_commonElements.typedArrayOfIntClass);
@override
ClassEntity get typedArrayClass =>
_map.toBackendClass(_commonElements.typedArrayClass);
@override
bool isSymbolValidatedConstructor(ConstructorEntity element) =>
_commonElements
.isSymbolValidatedConstructor(_map.toFrontendMember(element));
@override
FieldEntity get symbolImplementationField =>
_map.toBackendMember(_commonElements.symbolImplementationField);
@override
ConstructorEntity get symbolValidatedConstructor =>
_map.toBackendMember(_commonElements.symbolValidatedConstructor);
@override
final Selector symbolValidatedConstructorSelector = null;
@override
ClassEntity get symbolImplementationClass =>
_map.toBackendClass(_commonElements.symbolImplementationClass);
@override
FunctionEntity get hashCodeForNativeObject =>
_map.toBackendMember(_commonElements.hashCodeForNativeObject);
@override
FunctionEntity get toStringForNativeObject =>
_map.toBackendMember(_commonElements.toStringForNativeObject);
@override
FunctionEntity get convertRtiToRuntimeType =>
_map.toBackendMember(_commonElements.convertRtiToRuntimeType);
@override
FunctionEntity get defineProperty =>
_map.toBackendMember(_commonElements.defineProperty);
@override
FunctionEntity get cyclicThrowHelper =>
_map.toBackendMember(_commonElements.cyclicThrowHelper);
@override
FunctionEntity get createInvocationMirror =>
_map.toBackendMember(_commonElements.createInvocationMirror);
@override
FunctionEntity get fallThroughError =>
_map.toBackendMember(_commonElements.fallThroughError);
@override
FunctionEntity get createRuntimeType =>
_map.toBackendMember(_commonElements.createRuntimeType);
@override
FunctionEntity get throwNoSuchMethod =>
_map.toBackendMember(_commonElements.throwNoSuchMethod);
@override
FunctionEntity get checkDeferredIsLoaded =>
_map.toBackendMember(_commonElements.checkDeferredIsLoaded);
@override
FunctionEntity get subtypeOfRuntimeTypeCast =>
_map.toBackendMember(_commonElements.subtypeOfRuntimeTypeCast);
@override
FunctionEntity get assertSubtypeOfRuntimeType =>
_map.toBackendMember(_commonElements.assertSubtypeOfRuntimeType);
@override
FunctionEntity get checkSubtypeOfRuntimeType =>
_map.toBackendMember(_commonElements.checkSubtypeOfRuntimeType);
@override
FunctionEntity get functionTypeTest =>
_map.toBackendMember(_commonElements.functionTypeTest);
@override
FunctionEntity get subtypeCast =>
_map.toBackendMember(_commonElements.subtypeCast);
@override
FunctionEntity get assertSubtype =>
_map.toBackendMember(_commonElements.assertSubtype);
@override
FunctionEntity get checkSubtype =>
_map.toBackendMember(_commonElements.checkSubtype);
@override
FunctionEntity get assertIsSubtype =>
_map.toBackendMember(_commonElements.assertIsSubtype);
@override
FunctionEntity get runtimeTypeToString =>
_map.toBackendMember(_commonElements.runtimeTypeToString);
@override
FunctionEntity get getRuntimeTypeArgument =>
_map.toBackendMember(_commonElements.getRuntimeTypeArgument);
@override
FunctionEntity get getRuntimeTypeArguments =>
_map.toBackendMember(_commonElements.getRuntimeTypeArguments);
@override
FunctionEntity get computeSignature =>
_map.toBackendMember(_commonElements.computeSignature);
@override
FunctionEntity get getTypeArgumentByIndex =>
_map.toBackendMember(_commonElements.getTypeArgumentByIndex);
@override
FunctionEntity get getRuntimeTypeInfo =>
_map.toBackendMember(_commonElements.getRuntimeTypeInfo);
@override
FunctionEntity get setRuntimeTypeInfo =>
_map.toBackendMember(_commonElements.setRuntimeTypeInfo);
@override
FunctionEntity get traceFromException =>
_map.toBackendMember(_commonElements.traceFromException);
@override
FunctionEntity get closureConverter =>
_map.toBackendMember(_commonElements.closureConverter);
@override
FunctionEntity get throwExpressionHelper =>
_map.toBackendMember(_commonElements.throwExpressionHelper);
@override
FunctionEntity get wrapExceptionHelper =>
_map.toBackendMember(_commonElements.wrapExceptionHelper);
@override
FunctionEntity get stringInterpolationHelper =>
_map.toBackendMember(_commonElements.stringInterpolationHelper);
@override
FunctionEntity get checkString =>
_map.toBackendMember(_commonElements.checkString);
@override
FunctionEntity get checkNum => _map.toBackendMember(_commonElements.checkNum);
@override
FunctionEntity get checkInt => _map.toBackendMember(_commonElements.checkInt);
@override
FunctionEntity get throwConcurrentModificationError =>
_map.toBackendMember(_commonElements.throwConcurrentModificationError);
@override
FunctionEntity get checkConcurrentModificationError =>
_map.toBackendMember(_commonElements.checkConcurrentModificationError);
@override
FunctionEntity get throwAbstractClassInstantiationError => _map
.toBackendMember(_commonElements.throwAbstractClassInstantiationError);
@override
FunctionEntity get throwTypeError =>
_map.toBackendMember(_commonElements.throwTypeError);
@override
FunctionEntity get throwRuntimeError =>
_map.toBackendMember(_commonElements.throwRuntimeError);
@override
FunctionEntity get exceptionUnwrapper =>
_map.toBackendMember(_commonElements.exceptionUnwrapper);
@override
FunctionEntity get throwIndexOutOfRangeException =>
_map.toBackendMember(_commonElements.throwIndexOutOfRangeException);
@override
FunctionEntity get throwIllegalArgumentException =>
_map.toBackendMember(_commonElements.throwIllegalArgumentException);
@override
FunctionEntity get isJsIndexable =>
_map.toBackendMember(_commonElements.isJsIndexable);
@override
FunctionEntity get closureFromTearOff =>
_map.toBackendMember(_commonElements.closureFromTearOff);
@override
FunctionEntity get traceHelper =>
_map.toBackendMember(_commonElements.traceHelper);
@override
FunctionEntity get boolConversionCheck =>
_map.toBackendMember(_commonElements.boolConversionCheck);
@override
FunctionEntity get loadLibraryWrapper =>
_map.toBackendMember(_commonElements.loadLibraryWrapper);
@override
FunctionEntity get mainHasTooManyParameters =>
_map.toBackendMember(_commonElements.mainHasTooManyParameters);
@override
FunctionEntity get missingMain =>
_map.toBackendMember(_commonElements.missingMain);
@override
FunctionEntity get badMain => _map.toBackendMember(_commonElements.badMain);
@override
FunctionEntity get requiresPreambleMarker =>
_map.toBackendMember(_commonElements.requiresPreambleMarker);
@override
FunctionEntity get getIsolateAffinityTagMarker =>
_map.toBackendMember(_commonElements.getIsolateAffinityTagMarker);
@override
FunctionEntity get assertUnreachableMethod =>
_map.toBackendMember(_commonElements.assertUnreachableMethod);
@override
FunctionEntity get assertHelper =>
_map.toBackendMember(_commonElements.assertHelper);
@override
FunctionEntity get assertThrow =>
_map.toBackendMember(_commonElements.assertThrow);
@override
FunctionEntity get assertTest =>
_map.toBackendMember(_commonElements.assertTest);
@override
FunctionEntity get invokeOnMethod =>
_map.toBackendMember(_commonElements.invokeOnMethod);
@override
ConstructorEntity get typeVariableConstructor =>
_map.toBackendMember(_commonElements.typeVariableConstructor);
@override
ClassEntity get nativeAnnotationClass =>
_map.toBackendClass(_commonElements.nativeAnnotationClass);
@override
ClassEntity get patchAnnotationClass =>
_map.toBackendClass(_commonElements.patchAnnotationClass);
@override
ClassEntity get annotationJSNameClass =>
_map.toBackendClass(_commonElements.annotationJSNameClass);
@override
ClassEntity get annotationReturnsClass =>
_map.toBackendClass(_commonElements.annotationReturnsClass);
@override
ClassEntity get annotationCreatesClass =>
_map.toBackendClass(_commonElements.annotationCreatesClass);
@override
ClassEntity get generalConstantMapClass =>
_map.toBackendClass(_commonElements.generalConstantMapClass);
@override
ClassEntity get constantProtoMapClass =>
_map.toBackendClass(_commonElements.constantProtoMapClass);
@override
ClassEntity get constantStringMapClass =>
_map.toBackendClass(_commonElements.constantStringMapClass);
@override
ClassEntity get constantMapClass =>
_map.toBackendClass(_commonElements.constantMapClass);
@override
ClassEntity get stackTraceHelperClass =>
_map.toBackendClass(_commonElements.stackTraceHelperClass);
@override
ClassEntity get VoidRuntimeType =>
_map.toBackendClass(_commonElements.VoidRuntimeType);
@override
ClassEntity get jsIndexingBehaviorInterface =>
_map.toBackendClass(_commonElements.jsIndexingBehaviorInterface);
@override
ClassEntity get jsInvocationMirrorClass =>
_map.toBackendClass(_commonElements.jsInvocationMirrorClass);
@override
ClassEntity get irRepresentationClass =>
_map.toBackendClass(_commonElements.irRepresentationClass);
@override
ClassEntity get forceInlineClass =>
_map.toBackendClass(_commonElements.forceInlineClass);
@override
ClassEntity get noInlineClass =>
_map.toBackendClass(_commonElements.noInlineClass);
@override
ClassEntity get noThrowsClass =>
_map.toBackendClass(_commonElements.noThrowsClass);
@override
ClassEntity get noSideEffectsClass =>
_map.toBackendClass(_commonElements.noSideEffectsClass);
@override
ClassEntity get typeVariableClass =>
_map.toBackendClass(_commonElements.typeVariableClass);
@override
ClassEntity get constMapLiteralClass =>
_map.toBackendClass(_commonElements.constMapLiteralClass);
@override
ClassEntity get typeLiteralClass =>
_map.toBackendClass(_commonElements.typeLiteralClass);
@override
ClassEntity get boundClosureClass =>
_map.toBackendClass(_commonElements.boundClosureClass);
@override
ClassEntity get closureClass =>
_map.toBackendClass(_commonElements.closureClass);
@override
FunctionEntity findHelperFunction(String name) {
return _map.toBackendMember(_commonElements.findHelperFunction(name));
}
@override
ClassEntity get jsAnonymousClass =>
_map.toBackendClass(_commonElements.jsAnonymousClass);
@override
ClassEntity get jsAnnotationClass =>
_map.toBackendClass(_commonElements.jsAnnotationClass);
@override
FunctionEntity get jsStringOperatorAdd =>
_map.toBackendMember(_commonElements.jsStringOperatorAdd);
@override
FunctionEntity get jsStringToString =>
_map.toBackendMember(_commonElements.jsStringToString);
@override
FunctionEntity get jsStringSplit =>
_map.toBackendMember(_commonElements.jsStringSplit);
@override
FunctionEntity get jsArrayAdd =>
_map.toBackendMember(_commonElements.jsArrayAdd);
@override
FunctionEntity get jsArrayRemoveLast =>
_map.toBackendMember(_commonElements.jsArrayRemoveLast);
@override
ConstructorEntity get jsArrayTypedConstructor =>
_map.toBackendMember(_commonElements.jsArrayTypedConstructor);
@override
MemberEntity get jsIndexableLength =>
_map.toBackendMember(_commonElements.jsIndexableLength);
@override
FunctionEntity get getNativeInterceptorMethod =>
_map.toBackendMember(_commonElements.getNativeInterceptorMethod);
@override
FunctionEntity get getInterceptorMethod =>
_map.toBackendMember(_commonElements.getInterceptorMethod);
@override
FunctionEntity get findIndexForNativeSubclassType =>
_map.toBackendMember(_commonElements.findIndexForNativeSubclassType);
@override
ClassEntity get jsUInt31Class =>
_map.toBackendClass(_commonElements.jsUInt31Class);
@override
ClassEntity get jsUInt32Class =>
_map.toBackendClass(_commonElements.jsUInt32Class);
@override
ClassEntity get jsPositiveIntClass =>
_map.toBackendClass(_commonElements.jsPositiveIntClass);
@override
ClassEntity get jsUnmodifiableArrayClass =>
_map.toBackendClass(_commonElements.jsUnmodifiableArrayClass);
@override
ClassEntity get jsExtendableArrayClass =>
_map.toBackendClass(_commonElements.jsExtendableArrayClass);
@override
ClassEntity get jsFixedArrayClass =>
_map.toBackendClass(_commonElements.jsFixedArrayClass);
@override
ClassEntity get jsMutableArrayClass =>
_map.toBackendClass(_commonElements.jsMutableArrayClass);
@override
ClassEntity get jsMutableIndexableClass =>
_map.toBackendClass(_commonElements.jsMutableIndexableClass);
@override
ClassEntity get jsIndexableClass =>
_map.toBackendClass(_commonElements.jsIndexableClass);
@override
ClassEntity get jsJavaScriptObjectClass =>
_map.toBackendClass(_commonElements.jsJavaScriptObjectClass);
@override
ClassEntity get jsJavaScriptFunctionClass =>
_map.toBackendClass(_commonElements.jsJavaScriptFunctionClass);
@override
ClassEntity get jsUnknownJavaScriptObjectClass =>
_map.toBackendClass(_commonElements.jsUnknownJavaScriptObjectClass);
@override
ClassEntity get jsPlainJavaScriptObjectClass =>
_map.toBackendClass(_commonElements.jsPlainJavaScriptObjectClass);
@override
ClassEntity get jsBoolClass =>
_map.toBackendClass(_commonElements.jsBoolClass);
@override
ClassEntity get jsNullClass =>
_map.toBackendClass(_commonElements.jsNullClass);
@override
ClassEntity get jsDoubleClass =>
_map.toBackendClass(_commonElements.jsDoubleClass);
@override
ClassEntity get jsIntClass => _map.toBackendClass(_commonElements.jsIntClass);
@override
ClassEntity get jsNumberClass =>
_map.toBackendClass(_commonElements.jsNumberClass);
@override
ClassEntity get jsArrayClass =>
_map.toBackendClass(_commonElements.jsArrayClass);
@override
ClassEntity get jsStringClass =>
_map.toBackendClass(_commonElements.jsStringClass);
@override
ClassEntity get jsInterceptorClass =>
_map.toBackendClass(_commonElements.jsInterceptorClass);
@override
ClassEntity get jsConstClass =>
_map.toBackendClass(_commonElements.jsConstClass);
@override
FunctionEntity get preserveLibraryNamesMarker =>
_map.toBackendMember(_commonElements.preserveLibraryNamesMarker);
@override
FunctionEntity get preserveUrisMarker =>
_map.toBackendMember(_commonElements.preserveUrisMarker);
@override
FunctionEntity get preserveMetadataMarker =>
_map.toBackendMember(_commonElements.preserveMetadataMarker);
@override
FunctionEntity get preserveNamesMarker =>
_map.toBackendMember(_commonElements.preserveNamesMarker);
@override
FunctionEntity get disableTreeShakingMarker =>
_map.toBackendMember(_commonElements.disableTreeShakingMarker);
@override
ConstructorEntity get streamIteratorConstructor =>
_map.toBackendMember(_commonElements.streamIteratorConstructor);
@override
ConstructorEntity get asyncStarControllerConstructor =>
_map.toBackendMember(_commonElements.asyncStarControllerConstructor);
@override
ClassEntity get asyncStarController =>
_map.toBackendClass(_commonElements.asyncStarController);
@override
ConstructorEntity get syncCompleterConstructor =>
_map.toBackendMember(_commonElements.syncCompleterConstructor);
@override
ConstructorEntity get syncStarIterableConstructor =>
_map.toBackendMember(_commonElements.syncStarIterableConstructor);
@override
ClassEntity get controllerStream =>
_map.toBackendClass(_commonElements.controllerStream);
@override
ClassEntity get futureImplementation =>
_map.toBackendClass(_commonElements.futureImplementation);
@override
ClassEntity get syncStarIterable =>
_map.toBackendClass(_commonElements.syncStarIterable);
@override
FunctionEntity get endOfIteration =>
_map.toBackendMember(_commonElements.endOfIteration);
@override
FunctionEntity get streamOfController =>
_map.toBackendMember(_commonElements.streamOfController);
@override
FunctionEntity get asyncStarHelper =>
_map.toBackendMember(_commonElements.asyncStarHelper);
@override
FunctionEntity get syncStarUncaughtError =>
_map.toBackendMember(_commonElements.syncStarUncaughtError);
@override
FunctionEntity get yieldSingle =>
_map.toBackendMember(_commonElements.yieldSingle);
@override
FunctionEntity get yieldStar =>
_map.toBackendMember(_commonElements.yieldStar);
@override
FunctionEntity get wrapBody => _map.toBackendMember(_commonElements.wrapBody);
@override
FunctionEntity get asyncHelperAwait =>
_map.toBackendMember(_commonElements.asyncHelperAwait);
@override
FunctionEntity get asyncHelperRethrow =>
_map.toBackendMember(_commonElements.asyncHelperRethrow);
@override
FunctionEntity get asyncHelperReturn =>
_map.toBackendMember(_commonElements.asyncHelperReturn);
@override
FunctionEntity get asyncHelperStart =>
_map.toBackendMember(_commonElements.asyncHelperStart);
@override
bool isDefaultNoSuchMethodImplementation(FunctionEntity element) {
return _commonElements
.isDefaultNoSuchMethodImplementation(_map.toFrontendMember(element));
}
@override
FunctionEntity get objectNoSuchMethod =>
_map.toBackendMember(_commonElements.objectNoSuchMethod);
@override
FunctionEntity get mapLiteralUntypedEmptyMaker =>
_map.toBackendMember(_commonElements.mapLiteralUntypedEmptyMaker);
@override
FunctionEntity get mapLiteralUntypedMaker =>
_map.toBackendMember(_commonElements.mapLiteralUntypedMaker);
@override
ConstructorEntity get mapLiteralConstructorEmpty =>
_map.toBackendMember(_commonElements.mapLiteralConstructorEmpty);
@override
ConstructorEntity get mapLiteralConstructor =>
_map.toBackendMember(_commonElements.mapLiteralConstructor);
@override
ClassEntity get mapLiteralClass =>
_map.toBackendClass(_commonElements.mapLiteralClass);
@override
FunctionEntity get objectEquals =>
_map.toBackendMember(_commonElements.objectEquals);
@override
FunctionEntity get unresolvedTopLevelMethodError =>
_map.toBackendMember(_commonElements.unresolvedTopLevelMethodError);
@override
FunctionEntity get unresolvedTopLevelSetterError =>
_map.toBackendMember(_commonElements.unresolvedTopLevelSetterError);
@override
FunctionEntity get unresolvedTopLevelGetterError =>
_map.toBackendMember(_commonElements.unresolvedTopLevelGetterError);
@override
FunctionEntity get unresolvedStaticMethodError =>
_map.toBackendMember(_commonElements.unresolvedStaticMethodError);
@override
FunctionEntity get unresolvedStaticSetterError =>
_map.toBackendMember(_commonElements.unresolvedStaticSetterError);
@override
FunctionEntity get unresolvedStaticGetterError =>
_map.toBackendMember(_commonElements.unresolvedStaticGetterError);
@override
FunctionEntity get unresolvedConstructorError =>
_map.toBackendMember(_commonElements.unresolvedConstructorError);
@override
FunctionEntity get genericNoSuchMethod =>
_map.toBackendMember(_commonElements.genericNoSuchMethod);
@override
FunctionEntity get malformedTypeError =>
_map.toBackendMember(_commonElements.malformedTypeError);
@override
bool isDefaultEqualityImplementation(MemberEntity element) {
return _commonElements
.isDefaultEqualityImplementation(_map.toFrontendMember(element));
}
@override
InterfaceType get symbolImplementationType {
return _map.fromFrontendType(_commonElements.symbolImplementationType);
}
@override
FieldEntity get symbolField =>
_map.toBackendMember(_commonElements.symbolField);
@override
InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
{bool hasProtoKey: false, bool onlyStringKeys: false}) {
return _map.fromFrontendType(_commonElements.getConstantMapTypeFor(
_map.toBackendType(sourceType),
hasProtoKey: hasProtoKey,
onlyStringKeys: onlyStringKeys));
}
@override
bool isListSupertype(ClassEntity element) {
return _commonElements.isListSupertype(_map.toFrontendClass(element));
}
@override
bool isStringOnlySupertype(ClassEntity element) {
return _commonElements.isStringOnlySupertype(_map.toFrontendClass(element));
}
@override
bool isNumberOrStringSupertype(ClassEntity element) {
return _commonElements
.isNumberOrStringSupertype(_map.toFrontendClass(element));
}
@override
InterfaceType streamType([DartType elementType]) {
return _map.fromFrontendType(
_commonElements.streamType(_map.toBackendType(elementType)));
}
@override
InterfaceType futureType([DartType elementType]) {
return _map.fromFrontendType(
_commonElements.futureType(_map.toBackendType(elementType)));
}
@override
InterfaceType iterableType([DartType elementType]) {
return _map.fromFrontendType(
_commonElements.iterableType(_map.toBackendType(elementType)));
}
@override
InterfaceType mapType([DartType keyType, DartType valueType]) {
return _map.fromFrontendType(_commonElements.mapType(
_map.toBackendType(keyType), _map.toBackendType(valueType)));
}
@override
InterfaceType listType([DartType elementType]) {
return _map.fromFrontendType(
_commonElements.listType(_map.toBackendType(elementType)));
}
@override
InterfaceType get stackTraceType =>
_map.fromFrontendType(_commonElements.stackTraceType);
@override
InterfaceType get typeLiteralType =>
_map.fromFrontendType(_commonElements.typeLiteralType);
@override
InterfaceType get typeType => _map.fromFrontendType(_commonElements.typeType);
@override
InterfaceType get nullType => _map.fromFrontendType(_commonElements.nullType);
@override
InterfaceType get functionType =>
_map.fromFrontendType(_commonElements.functionType);
@override
InterfaceType get symbolType =>
_map.fromFrontendType(_commonElements.symbolType);
@override
InterfaceType get stringType =>
_map.fromFrontendType(_commonElements.stringType);
@override
InterfaceType get resourceType =>
_map.fromFrontendType(_commonElements.resourceType);
@override
InterfaceType get doubleType =>
_map.fromFrontendType(_commonElements.doubleType);
@override
InterfaceType get intType => _map.fromFrontendType(_commonElements.intType);
@override
InterfaceType get numType => _map.fromFrontendType(_commonElements.numType);
@override
InterfaceType get boolType => _map.fromFrontendType(_commonElements.boolType);
@override
InterfaceType get objectType =>
_map.fromFrontendType(_commonElements.objectType);
@override
DynamicType get dynamicType =>
_map.fromFrontendType(_commonElements.dynamicType);
@override
bool isFilledListConstructor(ConstructorEntity element) {
return _commonElements
.isFilledListConstructor(_map.toFrontendMember(element));
}
@override
bool isUnnamedListConstructor(ConstructorEntity element) {
return _commonElements
.isUnnamedListConstructor(_map.toFrontendMember(element));
}
@override
bool isFunctionApplyMethod(MemberEntity element) {
return _commonElements
.isFunctionApplyMethod(_map.toFrontendMember(element));
}
@override
FunctionEntity get functionApplyMethod =>
_map.toBackendMember(_commonElements.functionApplyMethod);
@override
FunctionEntity get identicalFunction =>
_map.toBackendMember(_commonElements.identicalFunction);
@override
ClassEntity get deferredLibraryClass =>
_map.toBackendClass(_commonElements.deferredLibraryClass);
@override
bool isMirrorsUsedConstructor(ConstructorEntity element) {
return _commonElements
.isMirrorsUsedConstructor(_map.toFrontendMember(element));
}
@override
ClassEntity get mirrorsUsedClass =>
_map.toBackendClass(_commonElements.mirrorsUsedClass);
@override
bool isMirrorSystemGetNameFunction(MemberEntity element) {
return _commonElements
.isMirrorSystemGetNameFunction(_map.toFrontendMember(element));
}
@override
ClassEntity get mirrorSystemClass =>
_map.toBackendClass(_commonElements.mirrorSystemClass);
@override
bool isSymbolConstructor(ConstructorEntity element) {
return _commonElements.isSymbolConstructor(_map.toFrontendMember(element));
}
@override
ConstructorEntity get symbolConstructorTarget =>
_map.toBackendMember(_commonElements.symbolConstructorTarget);
@override
ClassEntity get typedDataClass =>
_map.toBackendClass(_commonElements.typedDataClass);
@override
LibraryEntity get internalLibrary =>
_map.toBackendLibrary(_commonElements.internalLibrary);
@override
LibraryEntity get isolateHelperLibrary =>
_map.toBackendLibrary(_commonElements.isolateHelperLibrary);
@override
LibraryEntity get foreignLibrary =>
_map.toBackendLibrary(_commonElements.foreignLibrary);
@override
LibraryEntity get interceptorsLibrary =>
_map.toBackendLibrary(_commonElements.interceptorsLibrary);
@override
LibraryEntity get jsHelperLibrary =>
_map.toBackendLibrary(_commonElements.jsHelperLibrary);
@override
LibraryEntity get typedDataLibrary =>
_map.toBackendLibrary(_commonElements.typedDataLibrary);
@override
LibraryEntity get mirrorsLibrary =>
_map.toBackendLibrary(_commonElements.mirrorsLibrary);
@override
LibraryEntity get asyncLibrary =>
_map.toBackendLibrary(_commonElements.asyncLibrary);
@override
LibraryEntity get coreLibrary =>
_map.toBackendLibrary(_commonElements.coreLibrary);
@override
ClassEntity get streamClass =>
_map.toBackendClass(_commonElements.streamClass);
@override
ClassEntity get futureClass =>
_map.toBackendClass(_commonElements.futureClass);
@override
ClassEntity get iterableClass =>
_map.toBackendClass(_commonElements.iterableClass);
@override
ClassEntity get mapClass => _map.toBackendClass(_commonElements.mapClass);
@override
ClassEntity get listClass => _map.toBackendClass(_commonElements.listClass);
@override
ClassEntity get stackTraceClass =>
_map.toBackendClass(_commonElements.stackTraceClass);
@override
ClassEntity get typeClass => _map.toBackendClass(_commonElements.typeClass);
@override
ClassEntity get nullClass => _map.toBackendClass(_commonElements.nullClass);
@override
ClassEntity get symbolClass =>
_map.toBackendClass(_commonElements.symbolClass);
@override
ClassEntity get resourceClass =>
_map.toBackendClass(_commonElements.resourceClass);
@override
ClassEntity get functionClass =>
_map.toBackendClass(_commonElements.functionClass);
@override
ClassEntity get stringClass =>
_map.toBackendClass(_commonElements.stringClass);
@override
ClassEntity get doubleClass =>
_map.toBackendClass(_commonElements.doubleClass);
@override
ClassEntity get intClass => _map.toBackendClass(_commonElements.intClass);
@override
ClassEntity get numClass => _map.toBackendClass(_commonElements.numClass);
@override
ClassEntity get boolClass => _map.toBackendClass(_commonElements.boolClass);
@override
FunctionEntity get throwUnsupportedError =>
_map.toBackendMember(_commonElements.throwUnsupportedError);
}