blob: a2fad2542f09b0d095a920975769ffb8af797048 [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 '../constants/values.dart';
import '../elements/elements.dart';
import '../elements/entities.dart';
import '../elements/names.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 toFrontendType(DartType type) => type;
}
class JsToFrontendMapImpl implements JsToFrontendMap {
final Map<LibraryEntity, LibraryEntity> _toBackendLibrary =
<LibraryEntity, LibraryEntity>{};
final List<LibraryEntity> _frontendLibraryList = <LibraryEntity>[];
LibraryEntity toBackendLibrary(LibraryEntity library) {
return _toBackendLibrary.putIfAbsent(library, () {
JLibrary newLibrary = new JLibrary(
_toBackendLibrary.length, library.name, library.canonicalUri);
_frontendLibraryList.add(library);
return newLibrary;
});
}
LibraryEntity toFrontendLibrary(covariant JLibrary library) =>
_frontendLibraryList[library.libraryIndex];
final Map<ClassEntity, ClassEntity> _toBackendClass =
<ClassEntity, ClassEntity>{};
final List<ClassEntity> _frontendClassList = <ClassEntity>[];
ClassEntity toBackendClass(ClassEntity cls) {
return _toBackendClass.putIfAbsent(cls, () {
LibraryEntity library = toBackendLibrary(cls.library);
JClass newClass = new JClass(library, _toBackendClass.length, cls.name,
isAbstract: cls.isAbstract);
_frontendClassList.add(cls);
return newClass;
});
}
ClassEntity toFrontendClass(covariant JClass cls) =>
_frontendClassList[cls.classIndex];
final Map<MemberEntity, MemberEntity> _toBackendMember =
<MemberEntity, MemberEntity>{};
final List<MemberEntity> _frontendMemberList = <MemberEntity>[];
MemberEntity toBackendMember(MemberEntity member) {
return _toBackendMember.putIfAbsent(member, () {
LibraryEntity library = toBackendLibrary(member.library);
ClassEntity cls;
if (member.enclosingClass != null) {
cls = toBackendClass(member.enclosingClass);
}
JMember newMember;
Name memberName = new Name(member.memberName.text, library,
isSetter: member.memberName.isSetter);
if (member.isField) {
FieldEntity field = member;
newMember = new JField(
_toBackendMember.length, library, cls, memberName,
isStatic: field.isStatic,
isAssignable: field.isAssignable,
isConst: field.isConst);
} else if (member.isConstructor) {
ConstructorEntity constructor = member;
if (constructor.isFactoryConstructor) {
// TODO(redemption): This should be a JFunction.
newMember = new JFactoryConstructor(_toBackendMember.length, cls,
memberName, constructor.parameterStructure,
isExternal: constructor.isExternal,
isConst: constructor.isConst,
isFromEnvironmentConstructor:
constructor.isFromEnvironmentConstructor);
} else {
newMember = new JGenerativeConstructor(_toBackendMember.length, cls,
memberName, constructor.parameterStructure,
isExternal: constructor.isExternal, isConst: constructor.isConst);
}
} else if (member.isGetter) {
FunctionEntity getter = member;
newMember = new JGetter(_toBackendMember.length, library, cls,
memberName, getter.asyncMarker,
isStatic: getter.isStatic,
isExternal: getter.isExternal,
isAbstract: getter.isAbstract);
} else if (member.isSetter) {
FunctionEntity setter = member;
newMember = new JSetter(
_toBackendMember.length, library, cls, memberName,
isStatic: setter.isStatic,
isExternal: setter.isExternal,
isAbstract: setter.isAbstract);
} else {
FunctionEntity function = member;
newMember = new JMethod(_toBackendMember.length, library, cls,
memberName, function.parameterStructure, function.asyncMarker,
isStatic: function.isStatic,
isExternal: function.isExternal,
isAbstract: function.isAbstract);
}
_frontendMemberList.add(member);
return newMember;
});
}
MemberEntity toFrontendMember(covariant JMember member) =>
_frontendMemberList[member.memberIndex];
DartType toBackendType(DartType type) =>
const TypeConverter().visit(type, _toBackendEntity);
DartType toFrontendType(DartType type) =>
const TypeConverter().visit(type, _toFrontendEntity);
Entity _toBackendEntity(Entity entity) {
if (entity is ClassEntity) return toBackendClass(entity);
assert(entity is TypeVariableEntity);
return _toBackendTypeVariable(entity);
}
final Map<TypeVariableEntity, TypeVariableEntity> _toBackendTypeVariableMap =
<TypeVariableEntity, TypeVariableEntity>{};
final Map<TypeVariableEntity, TypeVariableEntity> _toFrontendTypeVariableMap =
<TypeVariableEntity, TypeVariableEntity>{};
TypeVariableEntity _toBackendTypeVariable(TypeVariableEntity typeVariable) {
return _toBackendTypeVariableMap.putIfAbsent(typeVariable, () {
Entity typeDeclaration;
if (typeVariable.typeDeclaration is ClassEntity) {
typeDeclaration = toBackendClass(typeVariable.typeDeclaration);
} else {
typeDeclaration = toBackendMember(typeVariable.typeDeclaration);
}
TypeVariableEntity newTypeVariable = new JTypeVariable(
typeDeclaration, typeVariable.name, typeVariable.index);
_toFrontendTypeVariableMap[newTypeVariable] = typeVariable;
return newTypeVariable;
});
}
Entity _toFrontendEntity(Entity entity) {
if (entity is ClassEntity) return toFrontendClass(entity);
assert(entity is TypeVariableEntity);
TypeVariableEntity typeVariable = _toFrontendTypeVariableMap[entity];
assert(typeVariable != null, "No front end type variable for $entity");
return typeVariable;
}
}
typedef Entity EntityConverter(Entity cls);
class TypeConverter implements DartTypeVisitor<DartType, EntityConverter> {
const TypeConverter();
@override
DartType visit(DartType type, EntityConverter converter) {
return type.accept(this, converter);
}
List<DartType> visitList(List<DartType> types, EntityConverter converter) {
List<DartType> list = <DartType>[];
for (DartType type in types) {
list.add(visit(type, converter));
}
return list;
}
@override
DartType visitDynamicType(DynamicType type, EntityConverter converter) {
return const DynamicType();
}
@override
DartType visitInterfaceType(InterfaceType type, EntityConverter converter) {
return new InterfaceType(
converter(type.element), visitList(type.typeArguments, converter));
}
@override
DartType visitFunctionType(FunctionType type, EntityConverter converter) {
return new FunctionType(
visit(type.returnType, converter),
visitList(type.parameterTypes, converter),
visitList(type.optionalParameterTypes, converter),
type.namedParameters,
visitList(type.namedParameterTypes, converter));
}
@override
DartType visitTypeVariableType(
TypeVariableType type, EntityConverter converter) {
return new TypeVariableType(converter(type.element));
}
@override
DartType visitVoidType(VoidType type, EntityConverter converter) {
return const VoidType();
}
}
class JLibrary implements LibraryEntity {
/// Library index used for fast lookup in [JsToFrontendMapImpl].
final int libraryIndex;
final String name;
final Uri canonicalUri;
JLibrary(this.libraryIndex, this.name, this.canonicalUri);
String toString() => 'library($name)';
}
class JClass implements ClassEntity {
final JLibrary library;
/// Class index used for fast lookup in [JsToFrontendMapImpl].
final int classIndex;
final String name;
final bool isAbstract;
JClass(this.library, this.classIndex, this.name, {this.isAbstract});
@override
bool get isClosure => false;
String toString() => 'class($name)';
}
abstract class JMember implements MemberEntity {
/// Member index used for fast lookup in [JsToFrontendMapImpl].
final int memberIndex;
final JLibrary library;
final JClass enclosingClass;
final Name _name;
final bool _isStatic;
JMember(this.memberIndex, this.library, this.enclosingClass, this._name,
{bool isStatic: false})
: _isStatic = isStatic;
String get name => _name.text;
Name get memberName => _name;
@override
bool get isAssignable => false;
@override
bool get isConst => false;
@override
bool get isAbstract => false;
@override
bool get isSetter => false;
@override
bool get isGetter => false;
@override
bool get isFunction => false;
@override
bool get isField => false;
@override
bool get isConstructor => false;
@override
bool get isInstanceMember => enclosingClass != null && !_isStatic;
@override
bool get isStatic => enclosingClass != null && _isStatic;
@override
bool get isTopLevel => enclosingClass == null;
String get _kind;
String toString() =>
'$_kind(${enclosingClass != null ? '${enclosingClass.name}.' : ''}$name)';
}
abstract class JFunction extends JMember implements FunctionEntity {
final ParameterStructure parameterStructure;
final bool isExternal;
final AsyncMarker asyncMarker;
JFunction(int memberIndex, JLibrary library, JClass enclosingClass, Name name,
this.parameterStructure, this.asyncMarker,
{bool isStatic: false, this.isExternal: false})
: super(memberIndex, library, enclosingClass, name, isStatic: isStatic);
}
abstract class JConstructor extends JFunction implements ConstructorEntity {
final bool isConst;
JConstructor(int memberIndex, JClass enclosingClass, Name name,
ParameterStructure parameterStructure, {bool isExternal, this.isConst})
: super(memberIndex, enclosingClass.library, enclosingClass, name,
parameterStructure, AsyncMarker.SYNC,
isExternal: isExternal);
@override
bool get isConstructor => true;
@override
bool get isInstanceMember => false;
@override
bool get isStatic => false;
@override
bool get isTopLevel => false;
@override
bool get isFromEnvironmentConstructor => false;
String get _kind => 'constructor';
}
class JGenerativeConstructor extends JConstructor {
JGenerativeConstructor(int constructorIndex, JClass enclosingClass, Name name,
ParameterStructure parameterStructure, {bool isExternal, bool isConst})
: super(constructorIndex, enclosingClass, name, parameterStructure,
isExternal: isExternal, isConst: isConst);
@override
bool get isFactoryConstructor => false;
@override
bool get isGenerativeConstructor => true;
}
class JFactoryConstructor extends JConstructor {
@override
final bool isFromEnvironmentConstructor;
JFactoryConstructor(int memberIndex, JClass enclosingClass, Name name,
ParameterStructure parameterStructure,
{bool isExternal, bool isConst, this.isFromEnvironmentConstructor})
: super(memberIndex, enclosingClass, name, parameterStructure,
isExternal: isExternal, isConst: isConst);
@override
bool get isFactoryConstructor => true;
@override
bool get isGenerativeConstructor => false;
}
class JMethod extends JFunction {
final bool isAbstract;
JMethod(int memberIndex, JLibrary library, JClass enclosingClass, Name name,
ParameterStructure parameterStructure, AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, this.isAbstract})
: super(memberIndex, library, enclosingClass, name, parameterStructure,
asyncMarker,
isStatic: isStatic, isExternal: isExternal);
@override
bool get isFunction => true;
String get _kind => 'method';
}
class JGetter extends JFunction {
final bool isAbstract;
JGetter(int memberIndex, JLibrary library, JClass enclosingClass, Name name,
AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, this.isAbstract})
: super(memberIndex, library, enclosingClass, name,
const ParameterStructure.getter(), asyncMarker,
isStatic: isStatic, isExternal: isExternal);
@override
bool get isGetter => true;
String get _kind => 'getter';
}
class JSetter extends JFunction {
final bool isAbstract;
JSetter(int memberIndex, JLibrary library, JClass enclosingClass, Name name,
{bool isStatic, bool isExternal, this.isAbstract})
: super(memberIndex, library, enclosingClass, name,
const ParameterStructure.setter(), AsyncMarker.SYNC,
isStatic: isStatic, isExternal: isExternal);
@override
bool get isAssignable => true;
@override
bool get isSetter => true;
String get _kind => 'setter';
}
class JField extends JMember implements FieldEntity {
final bool isAssignable;
final bool isConst;
JField(int memberIndex, JLibrary library, JClass enclosingClass, Name name,
{bool isStatic, this.isAssignable, this.isConst})
: super(memberIndex, library, enclosingClass, name, isStatic: isStatic);
@override
bool get isField => true;
String get _kind => 'field';
}
class JTypeVariable implements TypeVariableEntity {
final Entity typeDeclaration;
final String name;
final int index;
JTypeVariable(this.typeDeclaration, this.name, this.index);
String toString() => 'type_variable(${typeDeclaration.name}.$name)';
}
class JsClosedWorld extends ClosedWorldBase {
JsClosedWorld(
{ElementEnvironment elementEnvironment,
DartTypes dartTypes,
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(
elementEnvironment: elementEnvironment,
dartTypes: dartTypes,
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 {
FunctionEntity f(FunctionEntity e) => _map.toBackendMember(e);
return _backendUsage.globalFunctionDependencies.map(f);
}
@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 isMirrorsUsed => _backendUsage.isMirrorsUsed;
@override
bool get isNoSuchMethodUsed => _backendUsage.isNoSuchMethodUsed;
}
class JsElementEnvironment implements ElementEnvironment {
final JsToFrontendMap _map;
final ElementEnvironment _elementEnvironment;
JsElementEnvironment(this._map, this._elementEnvironment);
@override
Iterable<ConstantValue> getMemberMetadata(MemberEntity member) {
throw new UnimplementedError('JsElementEnvironment.getMemberMetadata');
}
@override
bool isDeferredLoadLibraryGetter(MemberEntity member) {
throw new UnimplementedError(
'JsElementEnvironment.isDeferredLoadLibraryGetter');
}
@override
DartType getUnaliasedType(DartType type) {
throw new UnimplementedError('JsElementEnvironment.getUnaliasedType');
}
@override
FunctionType getLocalFunctionType(Local local) {
throw new UnimplementedError('JsElementEnvironment.getLocalFunctionType');
}
@override
FunctionType getFunctionType(FunctionEntity function) {
return _map.toBackendType(
_elementEnvironment.getFunctionType(_map.toFrontendMember(function)));
}
@override
DartType getTypeVariableBound(TypeVariableEntity typeVariable) {
throw new UnimplementedError('JsElementEnvironment.getTypeVariableBound');
}
@override
ClassEntity getEffectiveMixinClass(ClassEntity cls) {
throw new UnimplementedError('JsElementEnvironment.getEffectiveMixinClass');
}
@override
bool isUnnamedMixinApplication(ClassEntity cls) {
throw new UnimplementedError(
'JsElementEnvironment.isUnnamedMixinApplication');
}
@override
bool isMixinApplication(ClassEntity cls) {
throw new UnimplementedError('JsElementEnvironment.isMixinApplication');
}
@override
bool isGenericClass(ClassEntity cls) {
throw new UnimplementedError('JsElementEnvironment.isGenericClass');
}
@override
InterfaceType getThisType(ClassEntity cls) {
throw new UnimplementedError('JsElementEnvironment.getThisType');
}
@override
InterfaceType getRawType(ClassEntity cls) {
throw new UnimplementedError('JsElementEnvironment.getRawType');
}
@override
DartType get dynamicType {
throw new UnimplementedError('JsElementEnvironment.dynamicType');
}
@override
InterfaceType createInterfaceType(
ClassEntity cls, List<DartType> typeArguments) {
throw new UnimplementedError('JsElementEnvironment.createInterfaceType');
}
@override
void forEachMixin(ClassEntity cls, void f(ClassEntity mixin)) {
throw new UnimplementedError('JsElementEnvironment.forEachMixin');
}
@override
void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype)) {
throw new UnimplementedError('JsElementEnvironment.forEachSupertype');
}
@override
ClassEntity getSuperClass(ClassEntity cls,
{bool skipUnnamedMixinApplications: false}) {
throw new UnimplementedError('JsElementEnvironment.getSuperClass');
}
@override
void forEachConstructor(
ClassEntity cls, void f(ConstructorEntity constructor)) {
throw new UnimplementedError('JsElementEnvironment.forEachConstructor');
}
@override
void forEachClassMember(
ClassEntity cls, void f(ClassEntity declarer, MemberEntity member)) {
throw new UnimplementedError('JsElementEnvironment.forEachClassMember');
}
@override
ConstructorEntity lookupConstructor(ClassEntity cls, String name,
{bool required: false}) {
throw new UnimplementedError('JsElementEnvironment.lookupConstructor');
}
@override
MemberEntity lookupClassMember(ClassEntity cls, String name,
{bool setter: false, bool required: false}) {
throw new UnimplementedError('JsElementEnvironment.lookupClassMember');
}
@override
MemberEntity lookupLibraryMember(LibraryEntity library, String name,
{bool setter: false, bool required: false}) {
throw new UnimplementedError('JsElementEnvironment.lookupLibraryMember');
}
@override
void forEachLibraryMember(
LibraryEntity library, void f(MemberEntity member)) {
_elementEnvironment.forEachLibraryMember(_map.toFrontendLibrary(library),
(MemberEntity member) {
f(_map.toBackendMember(member));
});
}
@override
ClassEntity lookupClass(LibraryEntity library, String name,
{bool required: false}) {
throw new UnimplementedError('JsElementEnvironment.lookupClass');
}
@override
void forEachClass(LibraryEntity library, void f(ClassEntity cls)) {
throw new UnimplementedError('JsElementEnvironment.forEachClass');
}
@override
LibraryEntity lookupLibrary(Uri uri, {bool required: false}) {
throw new UnimplementedError('JsElementEnvironment.lookupLibrary');
}
@override
String getLibraryName(LibraryEntity library) {
return _elementEnvironment.getLibraryName(_map.toFrontendLibrary(library));
}
@override
Iterable<LibraryEntity> get libraries {
throw new UnimplementedError('JsElementEnvironment.libraries');
}
@override
FunctionEntity get mainFunction {
return _map.toBackendMember(_elementEnvironment.mainFunction);
}
@override
LibraryEntity get mainLibrary {
return _map.toBackendLibrary(_elementEnvironment.mainLibrary);
}
}
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.toBackendType(_commonElements.symbolImplementationType);
}
@override
FieldEntity get symbolField =>
_map.toBackendMember(_commonElements.symbolField);
@override
InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
{bool hasProtoKey: false, bool onlyStringKeys: false}) {
return _map.toBackendType(_commonElements.getConstantMapTypeFor(
_map.toFrontendType(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.toBackendType(
_commonElements.streamType(_map.toFrontendType(elementType)));
}
@override
InterfaceType futureType([DartType elementType]) {
return _map.toBackendType(
_commonElements.futureType(_map.toFrontendType(elementType)));
}
@override
InterfaceType iterableType([DartType elementType]) {
return _map.toBackendType(
_commonElements.iterableType(_map.toFrontendType(elementType)));
}
@override
InterfaceType mapType([DartType keyType, DartType valueType]) {
return _map.toBackendType(_commonElements.mapType(
_map.toFrontendType(keyType), _map.toFrontendType(valueType)));
}
@override
InterfaceType listType([DartType elementType]) {
return _map.toBackendType(
_commonElements.listType(_map.toFrontendType(elementType)));
}
@override
InterfaceType get stackTraceType =>
_map.toBackendType(_commonElements.stackTraceType);
@override
InterfaceType get typeLiteralType =>
_map.toBackendType(_commonElements.typeLiteralType);
@override
InterfaceType get typeType => _map.toBackendType(_commonElements.typeType);
@override
InterfaceType get nullType => _map.toBackendType(_commonElements.nullType);
@override
InterfaceType get functionType =>
_map.toBackendType(_commonElements.functionType);
@override
InterfaceType get symbolType =>
_map.toBackendType(_commonElements.symbolType);
@override
InterfaceType get stringType =>
_map.toBackendType(_commonElements.stringType);
@override
InterfaceType get resourceType =>
_map.toBackendType(_commonElements.resourceType);
@override
InterfaceType get doubleType =>
_map.toBackendType(_commonElements.doubleType);
@override
InterfaceType get intType => _map.toBackendType(_commonElements.intType);
@override
InterfaceType get numType => _map.toBackendType(_commonElements.numType);
@override
InterfaceType get boolType => _map.toBackendType(_commonElements.boolType);
@override
InterfaceType get objectType =>
_map.toBackendType(_commonElements.objectType);
@override
DynamicType get dynamicType =>
_map.toBackendType(_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);
}