Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.js_model.elements; | 5 library dart2js.js_model.elements; |
| 6 | 6 |
| 7 import '../common_elements.dart'; | 7 import '../common_elements.dart'; |
| 8 import '../constants/constant_system.dart'; | 8 import '../constants/constant_system.dart'; |
| 9 import '../constants/values.dart'; | |
| 9 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
| 10 import '../elements/entities.dart'; | 11 import '../elements/entities.dart'; |
| 12 import '../elements/names.dart'; | |
| 11 import '../elements/types.dart'; | 13 import '../elements/types.dart'; |
| 12 import '../js_backend/backend_usage.dart'; | 14 import '../js_backend/backend_usage.dart'; |
| 13 import '../js_backend/interceptor_data.dart'; | 15 import '../js_backend/interceptor_data.dart'; |
| 14 import '../js_backend/native_data.dart'; | 16 import '../js_backend/native_data.dart'; |
| 15 import '../native/behavior.dart'; | 17 import '../native/behavior.dart'; |
| 16 import '../ordered_typeset.dart'; | 18 import '../ordered_typeset.dart'; |
| 17 import '../universe/class_set.dart'; | 19 import '../universe/class_set.dart'; |
| 18 import '../universe/function_set.dart'; | 20 import '../universe/function_set.dart'; |
| 19 import '../universe/selector.dart'; | 21 import '../universe/selector.dart'; |
| 20 import '../universe/world_builder.dart'; | 22 import '../universe/world_builder.dart'; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 32 LibraryEntity toBackendLibrary(LibraryEntity library) => library; | 34 LibraryEntity toBackendLibrary(LibraryEntity library) => library; |
| 33 LibraryEntity toFrontendLibrary(LibraryEntity library) => library; | 35 LibraryEntity toFrontendLibrary(LibraryEntity library) => library; |
| 34 | 36 |
| 35 ClassEntity toBackendClass(ClassEntity cls) => cls; | 37 ClassEntity toBackendClass(ClassEntity cls) => cls; |
| 36 ClassEntity toFrontendClass(ClassEntity cls) => cls; | 38 ClassEntity toFrontendClass(ClassEntity cls) => cls; |
| 37 | 39 |
| 38 MemberEntity toBackendMember(MemberEntity member) => member; | 40 MemberEntity toBackendMember(MemberEntity member) => member; |
| 39 MemberEntity toFrontendMember(MemberEntity member) => member; | 41 MemberEntity toFrontendMember(MemberEntity member) => member; |
| 40 | 42 |
| 41 DartType toBackendType(DartType type) => type; | 43 DartType toBackendType(DartType type) => type; |
| 42 DartType fromFrontendType(DartType type) => type; | 44 DartType toFrontendType(DartType type) => type; |
| 45 } | |
| 46 | |
| 47 class JsToFrontendMapImpl implements JsToFrontendMap { | |
| 48 final Map<LibraryEntity, LibraryEntity> _toBackendLibrary = | |
| 49 <LibraryEntity, LibraryEntity>{}; | |
| 50 final List<LibraryEntity> _frontendLibraryList = <LibraryEntity>[]; | |
| 51 | |
| 52 LibraryEntity toBackendLibrary(LibraryEntity library) { | |
| 53 return _toBackendLibrary.putIfAbsent(library, () { | |
| 54 JLibrary newLibrary = new JLibrary( | |
| 55 _toBackendLibrary.length, library.name, library.canonicalUri); | |
| 56 _frontendLibraryList.add(library); | |
| 57 return newLibrary; | |
| 58 }); | |
| 59 } | |
| 60 | |
| 61 LibraryEntity toFrontendLibrary(JLibrary library) => | |
| 62 _frontendLibraryList[library.libraryIndex]; | |
| 63 | |
| 64 final Map<ClassEntity, ClassEntity> _toBackendClass = | |
| 65 <ClassEntity, ClassEntity>{}; | |
| 66 final List<ClassEntity> _frontendClassList = <ClassEntity>[]; | |
| 67 | |
| 68 ClassEntity toBackendClass(ClassEntity cls) { | |
| 69 return _toBackendClass.putIfAbsent(cls, () { | |
| 70 LibraryEntity library = toBackendLibrary(cls.library); | |
| 71 JClass newClass = new JClass(library, _toBackendClass.length, cls.name, | |
| 72 isAbstract: cls.isAbstract); | |
| 73 _frontendClassList.add(cls); | |
| 74 return newClass; | |
| 75 }); | |
| 76 } | |
| 77 | |
| 78 ClassEntity toFrontendClass(JClass cls) => _frontendClassList[cls.classIndex]; | |
| 79 | |
| 80 final Map<MemberEntity, MemberEntity> _toBackendMember = | |
| 81 <MemberEntity, MemberEntity>{}; | |
| 82 final List<MemberEntity> _frontendMemberList = <MemberEntity>[]; | |
| 83 | |
| 84 MemberEntity toBackendMember(MemberEntity member) { | |
| 85 return _toBackendMember.putIfAbsent(member, () { | |
| 86 LibraryEntity library = toBackendLibrary(member.library); | |
| 87 ClassEntity cls; | |
| 88 if (member.enclosingClass != null) { | |
| 89 cls = toBackendClass(member.enclosingClass); | |
| 90 } | |
| 91 | |
| 92 JMember newMember; | |
| 93 Name memberName = new Name(member.memberName.text, library, | |
| 94 isSetter: member.memberName.isSetter); | |
| 95 if (member.isField) { | |
| 96 FieldEntity field = member; | |
| 97 newMember = new JField( | |
| 98 _toBackendMember.length, library, cls, memberName, | |
| 99 isStatic: field.isStatic, | |
| 100 isAssignable: field.isAssignable, | |
| 101 isConst: field.isConst); | |
| 102 } else if (member.isConstructor) { | |
| 103 ConstructorEntity constructor = member; | |
| 104 if (constructor.isFactoryConstructor) { | |
| 105 // TODO(johnniwinther): This should be a JFunction. | |
| 106 newMember = new JFactoryConstructor(_toBackendMember.length, cls, | |
| 107 memberName, constructor.parameterStructure, | |
| 108 isExternal: constructor.isExternal, | |
| 109 isConst: constructor.isConst, | |
| 110 isFromEnvironmentConstructor: | |
| 111 constructor.isFromEnvironmentConstructor); | |
| 112 } else { | |
| 113 newMember = new JGenerativeConstructor(_toBackendMember.length, cls, | |
| 114 memberName, constructor.parameterStructure, | |
| 115 isExternal: constructor.isExternal, isConst: constructor.isConst); | |
| 116 } | |
| 117 } else if (member.isGetter) { | |
| 118 FunctionEntity getter = member; | |
| 119 newMember = new JGetter(_toBackendMember.length, library, cls, | |
| 120 memberName, getter.asyncMarker, | |
| 121 isStatic: getter.isStatic, | |
| 122 isExternal: getter.isExternal, | |
| 123 isAbstract: getter.isAbstract); | |
| 124 } else if (member.isSetter) { | |
| 125 FunctionEntity setter = member; | |
| 126 newMember = new JSetter( | |
| 127 _toBackendMember.length, library, cls, memberName, | |
| 128 isStatic: setter.isStatic, | |
| 129 isExternal: setter.isExternal, | |
| 130 isAbstract: setter.isAbstract); | |
| 131 } else { | |
| 132 FunctionEntity function = member; | |
| 133 newMember = new JMethod(_toBackendMember.length, library, cls, | |
| 134 memberName, function.parameterStructure, function.asyncMarker, | |
| 135 isStatic: function.isStatic, | |
| 136 isExternal: function.isExternal, | |
| 137 isAbstract: function.isAbstract); | |
| 138 } | |
| 139 _frontendMemberList.add(member); | |
| 140 return newMember; | |
| 141 }); | |
| 142 } | |
| 143 | |
| 144 MemberEntity toFrontendMember(JMember member) => | |
| 145 _frontendMemberList[member.memberIndex]; | |
| 146 | |
| 147 DartType toBackendType(DartType type) => | |
| 148 const TypeConverter().visit(type, _toBackendEntity); | |
| 149 DartType toFrontendType(DartType type) => | |
| 150 const TypeConverter().visit(type, _toFrontendEntity); | |
| 151 | |
| 152 Entity _toBackendEntity(Entity entity) { | |
| 153 if (entity is ClassEntity) return toBackendClass(entity); | |
| 154 assert(entity is TypeVariableEntity); | |
| 155 return _toBackendTypeVariable(entity); | |
| 156 } | |
| 157 | |
| 158 final Map<TypeVariableEntity, TypeVariableEntity> _toBackendTypeVariableMap = | |
| 159 <TypeVariableEntity, TypeVariableEntity>{}; | |
| 160 | |
| 161 final Map<TypeVariableEntity, TypeVariableEntity> _toFrontendTypeVariableMap = | |
| 162 <TypeVariableEntity, TypeVariableEntity>{}; | |
| 163 | |
| 164 TypeVariableEntity _toBackendTypeVariable(TypeVariableEntity typeVariable) { | |
| 165 return _toBackendTypeVariableMap.putIfAbsent(typeVariable, () { | |
| 166 Entity typeDeclaration; | |
| 167 if (typeVariable.typeDeclaration is ClassEntity) { | |
| 168 typeDeclaration = toBackendClass(typeVariable.typeDeclaration); | |
| 169 } else { | |
| 170 typeDeclaration = toBackendMember(typeVariable.typeDeclaration); | |
| 171 } | |
| 172 TypeVariableEntity newTypeVariable = new JTypeVariable( | |
| 173 typeDeclaration, typeVariable.name, typeVariable.index); | |
| 174 _toFrontendTypeVariableMap[newTypeVariable] = typeVariable; | |
| 175 return newTypeVariable; | |
| 176 }); | |
| 177 } | |
| 178 | |
| 179 Entity _toFrontendEntity(Entity entity) { | |
| 180 if (entity is ClassEntity) return toFrontendClass(entity); | |
| 181 assert(entity is TypeVariableEntity); | |
| 182 TypeVariableEntity typeVariable = _toFrontendTypeVariableMap[entity]; | |
| 183 assert(typeVariable != null, "No front end type variable for $entity"); | |
| 184 return typeVariable; | |
| 185 } | |
| 186 } | |
| 187 | |
| 188 typedef Entity EntityConverter(Entity cls); | |
| 189 | |
| 190 class TypeConverter implements DartTypeVisitor<DartType, EntityConverter> { | |
| 191 const TypeConverter(); | |
| 192 | |
| 193 @override | |
| 194 DartType visit(DartType type, EntityConverter converter) { | |
| 195 return type.accept(this, converter); | |
| 196 } | |
| 197 | |
| 198 List<DartType> visitList(List<DartType> types, EntityConverter converter) { | |
| 199 List<DartType> list = <DartType>[]; | |
| 200 for (DartType type in types) { | |
| 201 list.add(visit(type, converter)); | |
| 202 } | |
| 203 return list; | |
| 204 } | |
| 205 | |
| 206 @override | |
| 207 DartType visitDynamicType(DynamicType type, EntityConverter converter) { | |
| 208 return const DynamicType(); | |
| 209 } | |
| 210 | |
| 211 @override | |
| 212 DartType visitInterfaceType(InterfaceType type, EntityConverter converter) { | |
| 213 return new InterfaceType( | |
| 214 converter(type.element), visitList(type.typeArguments, converter)); | |
| 215 } | |
| 216 | |
| 217 @override | |
| 218 DartType visitFunctionType(FunctionType type, EntityConverter converter) { | |
| 219 return new FunctionType( | |
| 220 visit(type.returnType, converter), | |
| 221 visitList(type.parameterTypes, converter), | |
| 222 visitList(type.optionalParameterTypes, converter), | |
| 223 type.namedParameters, | |
| 224 visitList(type.namedParameterTypes, converter)); | |
| 225 } | |
| 226 | |
| 227 @override | |
| 228 DartType visitTypeVariableType( | |
| 229 TypeVariableType type, EntityConverter converter) { | |
| 230 return new TypeVariableType(converter(type.element)); | |
| 231 } | |
| 232 | |
| 233 @override | |
| 234 DartType visitVoidType(VoidType type, EntityConverter converter) { | |
| 235 return const VoidType(); | |
| 236 } | |
| 237 } | |
| 238 | |
| 239 class JLibrary implements LibraryEntity { | |
| 240 /// Library index used for fast lookup in [JernelWorldBuilder]. | |
|
Siggi Cherem (dart-lang)
2017/06/15 23:10:49
Jernel! that's new :)... maybe also mention that w
Johnni Winther
2017/06/16 11:06:44
Done.
| |
| 241 final int libraryIndex; | |
| 242 final String name; | |
| 243 final Uri canonicalUri; | |
| 244 | |
| 245 JLibrary(this.libraryIndex, this.name, this.canonicalUri); | |
| 246 | |
| 247 String toString() => 'library($name)'; | |
| 248 } | |
| 249 | |
| 250 class JClass implements ClassEntity { | |
| 251 final JLibrary library; | |
| 252 | |
| 253 /// Class index used for fast lookup in [JernelWorldBuilder]. | |
| 254 final int classIndex; | |
| 255 | |
| 256 final String name; | |
| 257 final bool isAbstract; | |
| 258 | |
| 259 JClass(this.library, this.classIndex, this.name, {this.isAbstract}); | |
| 260 | |
| 261 @override | |
| 262 bool get isClosure => false; | |
| 263 | |
| 264 String toString() => 'class($name)'; | |
| 265 } | |
| 266 | |
| 267 abstract class JMember implements MemberEntity { | |
| 268 /// Member index used for fast lookup in [JsWorldBuilder]. | |
| 269 final int memberIndex; | |
| 270 final JLibrary library; | |
| 271 final JClass enclosingClass; | |
| 272 final Name _name; | |
| 273 final bool _isStatic; | |
| 274 | |
| 275 JMember(this.memberIndex, this.library, this.enclosingClass, this._name, | |
| 276 {bool isStatic: false}) | |
| 277 : _isStatic = isStatic; | |
| 278 | |
| 279 String get name => _name.text; | |
| 280 | |
| 281 Name get memberName => _name; | |
| 282 | |
| 283 @override | |
| 284 bool get isAssignable => false; | |
| 285 | |
| 286 @override | |
| 287 bool get isConst => false; | |
| 288 | |
| 289 @override | |
| 290 bool get isAbstract => false; | |
| 291 | |
| 292 @override | |
| 293 bool get isSetter => false; | |
| 294 | |
| 295 @override | |
| 296 bool get isGetter => false; | |
| 297 | |
| 298 @override | |
| 299 bool get isFunction => false; | |
| 300 | |
| 301 @override | |
| 302 bool get isField => false; | |
| 303 | |
| 304 @override | |
| 305 bool get isConstructor => false; | |
| 306 | |
| 307 @override | |
| 308 bool get isInstanceMember => enclosingClass != null && !_isStatic; | |
| 309 | |
| 310 @override | |
| 311 bool get isStatic => enclosingClass != null && _isStatic; | |
| 312 | |
| 313 @override | |
| 314 bool get isTopLevel => enclosingClass == null; | |
| 315 | |
| 316 String get _kind; | |
| 317 | |
| 318 String toString() => | |
| 319 '$_kind(${enclosingClass != null ? '${enclosingClass.name}.' : ''}$name)'; | |
| 320 } | |
| 321 | |
| 322 abstract class JFunction extends JMember implements FunctionEntity { | |
| 323 final ParameterStructure parameterStructure; | |
| 324 final bool isExternal; | |
| 325 final AsyncMarker asyncMarker; | |
| 326 | |
| 327 JFunction(int memberIndex, JLibrary library, JClass enclosingClass, Name name, | |
| 328 this.parameterStructure, this.asyncMarker, | |
| 329 {bool isStatic: false, this.isExternal: false}) | |
| 330 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); | |
| 331 } | |
| 332 | |
| 333 abstract class JConstructor extends JFunction implements ConstructorEntity { | |
| 334 final bool isConst; | |
| 335 | |
| 336 JConstructor(int memberIndex, JClass enclosingClass, Name name, | |
| 337 ParameterStructure parameterStructure, {bool isExternal, this.isConst}) | |
| 338 : super(memberIndex, enclosingClass.library, enclosingClass, name, | |
| 339 parameterStructure, AsyncMarker.SYNC, | |
| 340 isExternal: isExternal); | |
| 341 | |
| 342 @override | |
| 343 bool get isConstructor => true; | |
| 344 | |
| 345 @override | |
| 346 bool get isInstanceMember => false; | |
| 347 | |
| 348 @override | |
| 349 bool get isStatic => false; | |
| 350 | |
| 351 @override | |
| 352 bool get isTopLevel => false; | |
| 353 | |
| 354 @override | |
| 355 bool get isFromEnvironmentConstructor => false; | |
| 356 | |
| 357 String get _kind => 'constructor'; | |
| 358 } | |
| 359 | |
| 360 class JGenerativeConstructor extends JConstructor { | |
| 361 JGenerativeConstructor(int constructorIndex, JClass enclosingClass, Name name, | |
| 362 ParameterStructure parameterStructure, {bool isExternal, bool isConst}) | |
| 363 : super(constructorIndex, enclosingClass, name, parameterStructure, | |
| 364 isExternal: isExternal, isConst: isConst); | |
| 365 | |
| 366 @override | |
| 367 bool get isFactoryConstructor => false; | |
| 368 | |
| 369 @override | |
| 370 bool get isGenerativeConstructor => true; | |
| 371 } | |
| 372 | |
| 373 class JFactoryConstructor extends JConstructor { | |
| 374 @override | |
| 375 final bool isFromEnvironmentConstructor; | |
| 376 | |
| 377 JFactoryConstructor(int memberIndex, JClass enclosingClass, Name name, | |
| 378 ParameterStructure parameterStructure, | |
| 379 {bool isExternal, bool isConst, this.isFromEnvironmentConstructor}) | |
| 380 : super(memberIndex, enclosingClass, name, parameterStructure, | |
| 381 isExternal: isExternal, isConst: isConst); | |
| 382 | |
| 383 @override | |
| 384 bool get isFactoryConstructor => true; | |
| 385 | |
| 386 @override | |
| 387 bool get isGenerativeConstructor => false; | |
| 388 } | |
| 389 | |
| 390 class JMethod extends JFunction { | |
| 391 final bool isAbstract; | |
| 392 | |
| 393 JMethod(int memberIndex, JLibrary library, JClass enclosingClass, Name name, | |
| 394 ParameterStructure parameterStructure, AsyncMarker asyncMarker, | |
| 395 {bool isStatic, bool isExternal, this.isAbstract}) | |
| 396 : super(memberIndex, library, enclosingClass, name, parameterStructure, | |
| 397 asyncMarker, | |
| 398 isStatic: isStatic, isExternal: isExternal); | |
| 399 | |
| 400 @override | |
| 401 bool get isFunction => true; | |
| 402 | |
| 403 String get _kind => 'method'; | |
| 404 } | |
| 405 | |
| 406 class JGetter extends JFunction { | |
| 407 final bool isAbstract; | |
| 408 | |
| 409 JGetter(int memberIndex, JLibrary library, JClass enclosingClass, Name name, | |
| 410 AsyncMarker asyncMarker, | |
| 411 {bool isStatic, bool isExternal, this.isAbstract}) | |
| 412 : super(memberIndex, library, enclosingClass, name, | |
| 413 const ParameterStructure.getter(), asyncMarker, | |
| 414 isStatic: isStatic, isExternal: isExternal); | |
| 415 | |
| 416 @override | |
| 417 bool get isGetter => true; | |
| 418 | |
| 419 String get _kind => 'getter'; | |
| 420 } | |
| 421 | |
| 422 class JSetter extends JFunction { | |
| 423 final bool isAbstract; | |
| 424 | |
| 425 JSetter(int memberIndex, JLibrary library, JClass enclosingClass, Name name, | |
| 426 {bool isStatic, bool isExternal, this.isAbstract}) | |
| 427 : super(memberIndex, library, enclosingClass, name, | |
| 428 const ParameterStructure.setter(), AsyncMarker.SYNC, | |
| 429 isStatic: isStatic, isExternal: isExternal); | |
| 430 | |
| 431 @override | |
| 432 bool get isAssignable => true; | |
| 433 | |
| 434 @override | |
| 435 bool get isSetter => true; | |
| 436 | |
| 437 String get _kind => 'setter'; | |
| 438 } | |
| 439 | |
| 440 class JField extends JMember implements FieldEntity { | |
| 441 final bool isAssignable; | |
| 442 final bool isConst; | |
| 443 | |
| 444 JField(int memberIndex, JLibrary library, JClass enclosingClass, Name name, | |
| 445 {bool isStatic, this.isAssignable, this.isConst}) | |
| 446 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); | |
| 447 | |
| 448 @override | |
| 449 bool get isField => true; | |
| 450 | |
| 451 String get _kind => 'field'; | |
| 452 } | |
| 453 | |
| 454 class JTypeVariable implements TypeVariableEntity { | |
| 455 final Entity typeDeclaration; | |
| 456 final String name; | |
| 457 final int index; | |
| 458 | |
| 459 JTypeVariable(this.typeDeclaration, this.name, this.index); | |
| 460 | |
| 461 String toString() => 'type_variable(${typeDeclaration.name}.$name)'; | |
| 43 } | 462 } |
| 44 | 463 |
| 45 class JsClosedWorld extends ClosedWorldBase { | 464 class JsClosedWorld extends ClosedWorldBase { |
| 46 JsClosedWorld( | 465 JsClosedWorld( |
| 47 {ElementEnvironment elementEnvironment, | 466 {ElementEnvironment elementEnvironment, |
| 48 CommonElements commonElements, | 467 CommonElements commonElements, |
| 49 ConstantSystem constantSystem, | 468 ConstantSystem constantSystem, |
| 50 NativeData nativeData, | 469 NativeData nativeData, |
| 51 InterceptorData interceptorData, | 470 InterceptorData interceptorData, |
| 52 BackendUsage backendUsage, | 471 BackendUsage backendUsage, |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 291 @override | 710 @override |
| 292 bool get isIsolateInUse => _backendUsage.isIsolateInUse; | 711 bool get isIsolateInUse => _backendUsage.isIsolateInUse; |
| 293 | 712 |
| 294 @override | 713 @override |
| 295 bool get isFunctionApplyUsed => _backendUsage.isFunctionApplyUsed; | 714 bool get isFunctionApplyUsed => _backendUsage.isFunctionApplyUsed; |
| 296 | 715 |
| 297 @override | 716 @override |
| 298 bool get isNoSuchMethodUsed => _backendUsage.isNoSuchMethodUsed; | 717 bool get isNoSuchMethodUsed => _backendUsage.isNoSuchMethodUsed; |
| 299 } | 718 } |
| 300 | 719 |
| 720 class JsElementEnvironment implements ElementEnvironment { | |
| 721 final JsToFrontendMap _map; | |
| 722 final ElementEnvironment _elementEnvironment; | |
| 723 | |
| 724 JsElementEnvironment(this._map, this._elementEnvironment); | |
| 725 | |
| 726 @override | |
| 727 Iterable<ConstantValue> getMemberMetadata(MemberEntity member) { | |
| 728 throw new UnimplementedError('JsElementEnvironment.getMemberMetadata'); | |
| 729 } | |
| 730 | |
| 731 @override | |
| 732 bool isDeferredLoadLibraryGetter(MemberEntity member) { | |
| 733 throw new UnimplementedError( | |
| 734 'JsElementEnvironment.isDeferredLoadLibraryGetter'); | |
| 735 } | |
| 736 | |
| 737 @override | |
| 738 DartType getUnaliasedType(DartType type) { | |
| 739 throw new UnimplementedError('JsElementEnvironment.getUnaliasedType'); | |
| 740 } | |
| 741 | |
| 742 @override | |
| 743 FunctionType getLocalFunctionType(Local local) { | |
| 744 throw new UnimplementedError('JsElementEnvironment.getLocalFunctionType'); | |
| 745 } | |
| 746 | |
| 747 @override | |
| 748 FunctionType getFunctionType(FunctionEntity function) { | |
| 749 return _map.toBackendType( | |
| 750 _elementEnvironment.getFunctionType(_map.toFrontendMember(function))); | |
| 751 } | |
| 752 | |
| 753 @override | |
| 754 DartType getTypeVariableBound(TypeVariableEntity typeVariable) { | |
| 755 throw new UnimplementedError('JsElementEnvironment.getTypeVariableBound'); | |
| 756 } | |
| 757 | |
| 758 @override | |
| 759 ClassEntity getEffectiveMixinClass(ClassEntity cls) { | |
| 760 throw new UnimplementedError('JsElementEnvironment.getEffectiveMixinClass'); | |
| 761 } | |
| 762 | |
| 763 @override | |
| 764 bool isUnnamedMixinApplication(ClassEntity cls) { | |
| 765 throw new UnimplementedError( | |
| 766 'JsElementEnvironment.isUnnamedMixinApplication'); | |
| 767 } | |
| 768 | |
| 769 @override | |
| 770 bool isMixinApplication(ClassEntity cls) { | |
| 771 throw new UnimplementedError('JsElementEnvironment.isMixinApplication'); | |
| 772 } | |
| 773 | |
| 774 @override | |
| 775 bool isGenericClass(ClassEntity cls) { | |
| 776 throw new UnimplementedError('JsElementEnvironment.isGenericClass'); | |
| 777 } | |
| 778 | |
| 779 @override | |
| 780 InterfaceType getThisType(ClassEntity cls) { | |
| 781 throw new UnimplementedError('JsElementEnvironment.getThisType'); | |
| 782 } | |
| 783 | |
| 784 @override | |
| 785 InterfaceType getRawType(ClassEntity cls) { | |
| 786 throw new UnimplementedError('JsElementEnvironment.getRawType'); | |
| 787 } | |
| 788 | |
| 789 @override | |
| 790 DartType get dynamicType { | |
| 791 throw new UnimplementedError('JsElementEnvironment.dynamicType'); | |
| 792 } | |
| 793 | |
| 794 @override | |
| 795 InterfaceType createInterfaceType( | |
| 796 ClassEntity cls, List<DartType> typeArguments) { | |
| 797 throw new UnimplementedError('JsElementEnvironment.createInterfaceType'); | |
| 798 } | |
| 799 | |
| 800 @override | |
| 801 void forEachMixin(ClassEntity cls, void f(ClassEntity mixin)) { | |
| 802 throw new UnimplementedError('JsElementEnvironment.forEachMixin'); | |
| 803 } | |
| 804 | |
| 805 @override | |
| 806 void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype)) { | |
| 807 throw new UnimplementedError('JsElementEnvironment.forEachSupertype'); | |
| 808 } | |
| 809 | |
| 810 @override | |
| 811 ClassEntity getSuperClass(ClassEntity cls, | |
| 812 {bool skipUnnamedMixinApplications: false}) { | |
| 813 throw new UnimplementedError('JsElementEnvironment.getSuperClass'); | |
| 814 } | |
| 815 | |
| 816 @override | |
| 817 void forEachConstructor( | |
| 818 ClassEntity cls, void f(ConstructorEntity constructor)) { | |
| 819 throw new UnimplementedError('JsElementEnvironment.forEachConstructor'); | |
| 820 } | |
| 821 | |
| 822 @override | |
| 823 void forEachClassMember( | |
| 824 ClassEntity cls, void f(ClassEntity declarer, MemberEntity member)) { | |
| 825 throw new UnimplementedError('JsElementEnvironment.forEachClassMember'); | |
| 826 } | |
| 827 | |
| 828 @override | |
| 829 ConstructorEntity lookupConstructor(ClassEntity cls, String name, | |
| 830 {bool required: false}) { | |
| 831 throw new UnimplementedError('JsElementEnvironment.lookupConstructor'); | |
| 832 } | |
| 833 | |
| 834 @override | |
| 835 MemberEntity lookupClassMember(ClassEntity cls, String name, | |
| 836 {bool setter: false, bool required: false}) { | |
| 837 throw new UnimplementedError('JsElementEnvironment.lookupClassMember'); | |
| 838 } | |
| 839 | |
| 840 @override | |
| 841 MemberEntity lookupLibraryMember(LibraryEntity library, String name, | |
| 842 {bool setter: false, bool required: false}) { | |
| 843 throw new UnimplementedError('JsElementEnvironment.lookupLibraryMember'); | |
| 844 } | |
| 845 | |
| 846 @override | |
| 847 void forEachLibraryMember( | |
| 848 LibraryEntity library, void f(MemberEntity member)) { | |
| 849 _elementEnvironment.forEachLibraryMember(_map.toFrontendLibrary(library), | |
| 850 (MemberEntity member) { | |
| 851 f(_map.toBackendMember(member)); | |
| 852 }); | |
| 853 } | |
| 854 | |
| 855 @override | |
| 856 ClassEntity lookupClass(LibraryEntity library, String name, | |
| 857 {bool required: false}) { | |
| 858 throw new UnimplementedError('JsElementEnvironment.lookupClass'); | |
| 859 } | |
| 860 | |
| 861 @override | |
| 862 void forEachClass(LibraryEntity library, void f(ClassEntity cls)) { | |
| 863 throw new UnimplementedError('JsElementEnvironment.forEachClass'); | |
| 864 } | |
| 865 | |
| 866 @override | |
| 867 LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { | |
| 868 throw new UnimplementedError('JsElementEnvironment.lookupLibrary'); | |
| 869 } | |
| 870 | |
| 871 @override | |
| 872 String getLibraryName(LibraryEntity library) { | |
| 873 return _elementEnvironment.getLibraryName(_map.toFrontendLibrary(library)); | |
| 874 } | |
| 875 | |
| 876 @override | |
| 877 Iterable<LibraryEntity> get libraries { | |
| 878 throw new UnimplementedError('JsElementEnvironment.libraries'); | |
| 879 } | |
| 880 | |
| 881 @override | |
| 882 FunctionEntity get mainFunction { | |
| 883 return _map.toBackendMember(_elementEnvironment.mainFunction); | |
| 884 } | |
| 885 | |
| 886 @override | |
| 887 LibraryEntity get mainLibrary { | |
| 888 return _map.toBackendLibrary(_elementEnvironment.mainLibrary); | |
| 889 } | |
| 890 } | |
| 891 | |
| 301 class JsCommonElements implements CommonElements { | 892 class JsCommonElements implements CommonElements { |
| 302 final JsToFrontendMap _map; | 893 final JsToFrontendMap _map; |
| 303 final CommonElements _commonElements; | 894 final CommonElements _commonElements; |
| 304 | 895 |
| 305 JsCommonElements(this._map, this._commonElements); | 896 JsCommonElements(this._map, this._commonElements); |
| 306 | 897 |
| 307 @override | 898 @override |
| 308 ClassEntity get objectClass => | 899 ClassEntity get objectClass => |
| 309 _map.toBackendClass(_commonElements.objectClass); | 900 _map.toBackendClass(_commonElements.objectClass); |
| 310 | 901 |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 991 _map.toBackendMember(_commonElements.malformedTypeError); | 1582 _map.toBackendMember(_commonElements.malformedTypeError); |
| 992 | 1583 |
| 993 @override | 1584 @override |
| 994 bool isDefaultEqualityImplementation(MemberEntity element) { | 1585 bool isDefaultEqualityImplementation(MemberEntity element) { |
| 995 return _commonElements | 1586 return _commonElements |
| 996 .isDefaultEqualityImplementation(_map.toFrontendMember(element)); | 1587 .isDefaultEqualityImplementation(_map.toFrontendMember(element)); |
| 997 } | 1588 } |
| 998 | 1589 |
| 999 @override | 1590 @override |
| 1000 InterfaceType get symbolImplementationType { | 1591 InterfaceType get symbolImplementationType { |
| 1001 return _map.fromFrontendType(_commonElements.symbolImplementationType); | 1592 return _map.toBackendType(_commonElements.symbolImplementationType); |
| 1002 } | 1593 } |
| 1003 | 1594 |
| 1004 @override | 1595 @override |
| 1005 FieldEntity get symbolField => | 1596 FieldEntity get symbolField => |
| 1006 _map.toBackendMember(_commonElements.symbolField); | 1597 _map.toBackendMember(_commonElements.symbolField); |
| 1007 | 1598 |
| 1008 @override | 1599 @override |
| 1009 InterfaceType getConstantMapTypeFor(InterfaceType sourceType, | 1600 InterfaceType getConstantMapTypeFor(InterfaceType sourceType, |
| 1010 {bool hasProtoKey: false, bool onlyStringKeys: false}) { | 1601 {bool hasProtoKey: false, bool onlyStringKeys: false}) { |
| 1011 return _map.fromFrontendType(_commonElements.getConstantMapTypeFor( | 1602 return _map.toBackendType(_commonElements.getConstantMapTypeFor( |
| 1012 _map.toBackendType(sourceType), | 1603 _map.toFrontendType(sourceType), |
| 1013 hasProtoKey: hasProtoKey, | 1604 hasProtoKey: hasProtoKey, |
| 1014 onlyStringKeys: onlyStringKeys)); | 1605 onlyStringKeys: onlyStringKeys)); |
| 1015 } | 1606 } |
| 1016 | 1607 |
| 1017 @override | 1608 @override |
| 1018 bool isListSupertype(ClassEntity element) { | 1609 bool isListSupertype(ClassEntity element) { |
| 1019 return _commonElements.isListSupertype(_map.toFrontendClass(element)); | 1610 return _commonElements.isListSupertype(_map.toFrontendClass(element)); |
| 1020 } | 1611 } |
| 1021 | 1612 |
| 1022 @override | 1613 @override |
| 1023 bool isStringOnlySupertype(ClassEntity element) { | 1614 bool isStringOnlySupertype(ClassEntity element) { |
| 1024 return _commonElements.isStringOnlySupertype(_map.toFrontendClass(element)); | 1615 return _commonElements.isStringOnlySupertype(_map.toFrontendClass(element)); |
| 1025 } | 1616 } |
| 1026 | 1617 |
| 1027 @override | 1618 @override |
| 1028 bool isNumberOrStringSupertype(ClassEntity element) { | 1619 bool isNumberOrStringSupertype(ClassEntity element) { |
| 1029 return _commonElements | 1620 return _commonElements |
| 1030 .isNumberOrStringSupertype(_map.toFrontendClass(element)); | 1621 .isNumberOrStringSupertype(_map.toFrontendClass(element)); |
| 1031 } | 1622 } |
| 1032 | 1623 |
| 1033 @override | 1624 @override |
| 1034 InterfaceType streamType([DartType elementType]) { | 1625 InterfaceType streamType([DartType elementType]) { |
| 1035 return _map.fromFrontendType( | 1626 return _map.toBackendType( |
| 1036 _commonElements.streamType(_map.toBackendType(elementType))); | 1627 _commonElements.streamType(_map.toFrontendType(elementType))); |
| 1037 } | 1628 } |
| 1038 | 1629 |
| 1039 @override | 1630 @override |
| 1040 InterfaceType futureType([DartType elementType]) { | 1631 InterfaceType futureType([DartType elementType]) { |
| 1041 return _map.fromFrontendType( | 1632 return _map.toBackendType( |
| 1042 _commonElements.futureType(_map.toBackendType(elementType))); | 1633 _commonElements.futureType(_map.toFrontendType(elementType))); |
| 1043 } | 1634 } |
| 1044 | 1635 |
| 1045 @override | 1636 @override |
| 1046 InterfaceType iterableType([DartType elementType]) { | 1637 InterfaceType iterableType([DartType elementType]) { |
| 1047 return _map.fromFrontendType( | 1638 return _map.toBackendType( |
| 1048 _commonElements.iterableType(_map.toBackendType(elementType))); | 1639 _commonElements.iterableType(_map.toFrontendType(elementType))); |
| 1049 } | 1640 } |
| 1050 | 1641 |
| 1051 @override | 1642 @override |
| 1052 InterfaceType mapType([DartType keyType, DartType valueType]) { | 1643 InterfaceType mapType([DartType keyType, DartType valueType]) { |
| 1053 return _map.fromFrontendType(_commonElements.mapType( | 1644 return _map.toBackendType(_commonElements.mapType( |
| 1054 _map.toBackendType(keyType), _map.toBackendType(valueType))); | 1645 _map.toFrontendType(keyType), _map.toFrontendType(valueType))); |
| 1055 } | 1646 } |
| 1056 | 1647 |
| 1057 @override | 1648 @override |
| 1058 InterfaceType listType([DartType elementType]) { | 1649 InterfaceType listType([DartType elementType]) { |
| 1059 return _map.fromFrontendType( | 1650 return _map.toBackendType( |
| 1060 _commonElements.listType(_map.toBackendType(elementType))); | 1651 _commonElements.listType(_map.toFrontendType(elementType))); |
| 1061 } | 1652 } |
| 1062 | 1653 |
| 1063 @override | 1654 @override |
| 1064 InterfaceType get stackTraceType => | 1655 InterfaceType get stackTraceType => |
| 1065 _map.fromFrontendType(_commonElements.stackTraceType); | 1656 _map.toBackendType(_commonElements.stackTraceType); |
| 1066 | 1657 |
| 1067 @override | 1658 @override |
| 1068 InterfaceType get typeLiteralType => | 1659 InterfaceType get typeLiteralType => |
| 1069 _map.fromFrontendType(_commonElements.typeLiteralType); | 1660 _map.toBackendType(_commonElements.typeLiteralType); |
| 1070 | 1661 |
| 1071 @override | 1662 @override |
| 1072 InterfaceType get typeType => _map.fromFrontendType(_commonElements.typeType); | 1663 InterfaceType get typeType => _map.toBackendType(_commonElements.typeType); |
| 1073 | 1664 |
| 1074 @override | 1665 @override |
| 1075 InterfaceType get nullType => _map.fromFrontendType(_commonElements.nullType); | 1666 InterfaceType get nullType => _map.toBackendType(_commonElements.nullType); |
| 1076 | 1667 |
| 1077 @override | 1668 @override |
| 1078 InterfaceType get functionType => | 1669 InterfaceType get functionType => |
| 1079 _map.fromFrontendType(_commonElements.functionType); | 1670 _map.toBackendType(_commonElements.functionType); |
| 1080 | 1671 |
| 1081 @override | 1672 @override |
| 1082 InterfaceType get symbolType => | 1673 InterfaceType get symbolType => |
| 1083 _map.fromFrontendType(_commonElements.symbolType); | 1674 _map.toBackendType(_commonElements.symbolType); |
| 1084 | 1675 |
| 1085 @override | 1676 @override |
| 1086 InterfaceType get stringType => | 1677 InterfaceType get stringType => |
| 1087 _map.fromFrontendType(_commonElements.stringType); | 1678 _map.toBackendType(_commonElements.stringType); |
| 1088 | 1679 |
| 1089 @override | 1680 @override |
| 1090 InterfaceType get resourceType => | 1681 InterfaceType get resourceType => |
| 1091 _map.fromFrontendType(_commonElements.resourceType); | 1682 _map.toBackendType(_commonElements.resourceType); |
| 1092 | 1683 |
| 1093 @override | 1684 @override |
| 1094 InterfaceType get doubleType => | 1685 InterfaceType get doubleType => |
| 1095 _map.fromFrontendType(_commonElements.doubleType); | 1686 _map.toBackendType(_commonElements.doubleType); |
| 1096 | 1687 |
| 1097 @override | 1688 @override |
| 1098 InterfaceType get intType => _map.fromFrontendType(_commonElements.intType); | 1689 InterfaceType get intType => _map.toBackendType(_commonElements.intType); |
| 1099 | 1690 |
| 1100 @override | 1691 @override |
| 1101 InterfaceType get numType => _map.fromFrontendType(_commonElements.numType); | 1692 InterfaceType get numType => _map.toBackendType(_commonElements.numType); |
| 1102 | 1693 |
| 1103 @override | 1694 @override |
| 1104 InterfaceType get boolType => _map.fromFrontendType(_commonElements.boolType); | 1695 InterfaceType get boolType => _map.toBackendType(_commonElements.boolType); |
| 1105 | 1696 |
| 1106 @override | 1697 @override |
| 1107 InterfaceType get objectType => | 1698 InterfaceType get objectType => |
| 1108 _map.fromFrontendType(_commonElements.objectType); | 1699 _map.toBackendType(_commonElements.objectType); |
| 1109 | 1700 |
| 1110 @override | 1701 @override |
| 1111 DynamicType get dynamicType => | 1702 DynamicType get dynamicType => |
| 1112 _map.fromFrontendType(_commonElements.dynamicType); | 1703 _map.toBackendType(_commonElements.dynamicType); |
| 1113 | 1704 |
| 1114 @override | 1705 @override |
| 1115 bool isFilledListConstructor(ConstructorEntity element) { | 1706 bool isFilledListConstructor(ConstructorEntity element) { |
| 1116 return _commonElements | 1707 return _commonElements |
| 1117 .isFilledListConstructor(_map.toFrontendMember(element)); | 1708 .isFilledListConstructor(_map.toFrontendMember(element)); |
| 1118 } | 1709 } |
| 1119 | 1710 |
| 1120 @override | 1711 @override |
| 1121 bool isUnnamedListConstructor(ConstructorEntity element) { | 1712 bool isUnnamedListConstructor(ConstructorEntity element) { |
| 1122 return _commonElements | 1713 return _commonElements |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1264 @override | 1855 @override |
| 1265 ClassEntity get numClass => _map.toBackendClass(_commonElements.numClass); | 1856 ClassEntity get numClass => _map.toBackendClass(_commonElements.numClass); |
| 1266 | 1857 |
| 1267 @override | 1858 @override |
| 1268 ClassEntity get boolClass => _map.toBackendClass(_commonElements.boolClass); | 1859 ClassEntity get boolClass => _map.toBackendClass(_commonElements.boolClass); |
| 1269 | 1860 |
| 1270 @override | 1861 @override |
| 1271 FunctionEntity get throwUnsupportedError => | 1862 FunctionEntity get throwUnsupportedError => |
| 1272 _map.toBackendMember(_commonElements.throwUnsupportedError); | 1863 _map.toBackendMember(_commonElements.throwUnsupportedError); |
| 1273 } | 1864 } |
| OLD | NEW |