Index: pkg/compiler/lib/src/js_model/elements.dart |
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart |
index a2dbfd13192cfbe51246505d9e908368e0ce5fb2..58f32ab2f423c4e7db3e3125eff5b0af0ad4403d 100644 |
--- a/pkg/compiler/lib/src/js_model/elements.dart |
+++ b/pkg/compiler/lib/src/js_model/elements.dart |
@@ -6,8 +6,10 @@ 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'; |
@@ -39,7 +41,424 @@ class JsToFrontendMap { |
MemberEntity toFrontendMember(MemberEntity member) => member; |
DartType toBackendType(DartType type) => type; |
- DartType fromFrontendType(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(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(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(johnniwinther): 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(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 { |
@@ -298,6 +717,178 @@ class JsBackendUsage implements BackendUsage { |
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; |
@@ -998,7 +1589,7 @@ class JsCommonElements implements CommonElements { |
@override |
InterfaceType get symbolImplementationType { |
- return _map.fromFrontendType(_commonElements.symbolImplementationType); |
+ return _map.toBackendType(_commonElements.symbolImplementationType); |
} |
@override |
@@ -1008,8 +1599,8 @@ class JsCommonElements implements CommonElements { |
@override |
InterfaceType getConstantMapTypeFor(InterfaceType sourceType, |
{bool hasProtoKey: false, bool onlyStringKeys: false}) { |
- return _map.fromFrontendType(_commonElements.getConstantMapTypeFor( |
- _map.toBackendType(sourceType), |
+ return _map.toBackendType(_commonElements.getConstantMapTypeFor( |
+ _map.toFrontendType(sourceType), |
hasProtoKey: hasProtoKey, |
onlyStringKeys: onlyStringKeys)); |
} |
@@ -1032,84 +1623,84 @@ class JsCommonElements implements CommonElements { |
@override |
InterfaceType streamType([DartType elementType]) { |
- return _map.fromFrontendType( |
- _commonElements.streamType(_map.toBackendType(elementType))); |
+ return _map.toBackendType( |
+ _commonElements.streamType(_map.toFrontendType(elementType))); |
} |
@override |
InterfaceType futureType([DartType elementType]) { |
- return _map.fromFrontendType( |
- _commonElements.futureType(_map.toBackendType(elementType))); |
+ return _map.toBackendType( |
+ _commonElements.futureType(_map.toFrontendType(elementType))); |
} |
@override |
InterfaceType iterableType([DartType elementType]) { |
- return _map.fromFrontendType( |
- _commonElements.iterableType(_map.toBackendType(elementType))); |
+ return _map.toBackendType( |
+ _commonElements.iterableType(_map.toFrontendType(elementType))); |
} |
@override |
InterfaceType mapType([DartType keyType, DartType valueType]) { |
- return _map.fromFrontendType(_commonElements.mapType( |
- _map.toBackendType(keyType), _map.toBackendType(valueType))); |
+ return _map.toBackendType(_commonElements.mapType( |
+ _map.toFrontendType(keyType), _map.toFrontendType(valueType))); |
} |
@override |
InterfaceType listType([DartType elementType]) { |
- return _map.fromFrontendType( |
- _commonElements.listType(_map.toBackendType(elementType))); |
+ return _map.toBackendType( |
+ _commonElements.listType(_map.toFrontendType(elementType))); |
} |
@override |
InterfaceType get stackTraceType => |
- _map.fromFrontendType(_commonElements.stackTraceType); |
+ _map.toBackendType(_commonElements.stackTraceType); |
@override |
InterfaceType get typeLiteralType => |
- _map.fromFrontendType(_commonElements.typeLiteralType); |
+ _map.toBackendType(_commonElements.typeLiteralType); |
@override |
- InterfaceType get typeType => _map.fromFrontendType(_commonElements.typeType); |
+ InterfaceType get typeType => _map.toBackendType(_commonElements.typeType); |
@override |
- InterfaceType get nullType => _map.fromFrontendType(_commonElements.nullType); |
+ InterfaceType get nullType => _map.toBackendType(_commonElements.nullType); |
@override |
InterfaceType get functionType => |
- _map.fromFrontendType(_commonElements.functionType); |
+ _map.toBackendType(_commonElements.functionType); |
@override |
InterfaceType get symbolType => |
- _map.fromFrontendType(_commonElements.symbolType); |
+ _map.toBackendType(_commonElements.symbolType); |
@override |
InterfaceType get stringType => |
- _map.fromFrontendType(_commonElements.stringType); |
+ _map.toBackendType(_commonElements.stringType); |
@override |
InterfaceType get resourceType => |
- _map.fromFrontendType(_commonElements.resourceType); |
+ _map.toBackendType(_commonElements.resourceType); |
@override |
InterfaceType get doubleType => |
- _map.fromFrontendType(_commonElements.doubleType); |
+ _map.toBackendType(_commonElements.doubleType); |
@override |
- InterfaceType get intType => _map.fromFrontendType(_commonElements.intType); |
+ InterfaceType get intType => _map.toBackendType(_commonElements.intType); |
@override |
- InterfaceType get numType => _map.fromFrontendType(_commonElements.numType); |
+ InterfaceType get numType => _map.toBackendType(_commonElements.numType); |
@override |
- InterfaceType get boolType => _map.fromFrontendType(_commonElements.boolType); |
+ InterfaceType get boolType => _map.toBackendType(_commonElements.boolType); |
@override |
InterfaceType get objectType => |
- _map.fromFrontendType(_commonElements.objectType); |
+ _map.toBackendType(_commonElements.objectType); |
@override |
DynamicType get dynamicType => |
- _map.fromFrontendType(_commonElements.dynamicType); |
+ _map.toBackendType(_commonElements.dynamicType); |
@override |
bool isFilledListConstructor(ConstructorEntity element) { |