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.kernel.element_map; | 5 library dart2js.kernel.element_map; |
6 | 6 |
7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
8 | 8 |
9 import '../common.dart'; | 9 import '../common.dart'; |
10 import '../common/names.dart' show Identifiers; | 10 import '../common/names.dart' show Identifiers; |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 ClassEntity cls = getMember(context).enclosingClass; | 354 ClassEntity cls = getMember(context).enclosingClass; |
355 IndexedClass superclass = _getSuperType(cls)?.element; | 355 IndexedClass superclass = _getSuperType(cls)?.element; |
356 while (superclass != null) { | 356 while (superclass != null) { |
357 ClassEnv env = _classEnvs[superclass.classIndex]; | 357 ClassEnv env = _classEnvs[superclass.classIndex]; |
358 ir.Member superMember = env.lookupMember(name.name, setter: setter); | 358 ir.Member superMember = env.lookupMember(name.name, setter: setter); |
359 if (superMember != null) { | 359 if (superMember != null) { |
360 return getMember(superMember); | 360 return getMember(superMember); |
361 } | 361 } |
362 superclass = _getSuperType(superclass)?.element; | 362 superclass = _getSuperType(superclass)?.element; |
363 } | 363 } |
364 throw new SpannableAssertionFailure( | 364 throw failedAt(cls, "No super method member found for ${name} in $cls."); |
365 cls, "No super method member found for ${name} in $cls."); | |
366 } | 365 } |
367 | 366 |
368 @override | 367 @override |
369 ConstructorEntity getConstructor(ir.Member node) => _getConstructor(node); | 368 ConstructorEntity getConstructor(ir.Member node) => _getConstructor(node); |
370 | 369 |
371 ConstructorEntity _getConstructor(ir.Member node); | 370 ConstructorEntity _getConstructor(ir.Member node); |
372 | 371 |
373 ConstructorEntity getSuperConstructor( | 372 ConstructorEntity getSuperConstructor( |
374 ir.Constructor sourceNode, ir.Member targetNode) { | 373 ir.Constructor sourceNode, ir.Member targetNode) { |
375 ConstructorEntity source = getConstructor(sourceNode); | 374 ConstructorEntity source = getConstructor(sourceNode); |
376 ClassEntity sourceClass = source.enclosingClass; | 375 ClassEntity sourceClass = source.enclosingClass; |
377 ConstructorEntity target = getConstructor(targetNode); | 376 ConstructorEntity target = getConstructor(targetNode); |
378 ClassEntity targetClass = target.enclosingClass; | 377 ClassEntity targetClass = target.enclosingClass; |
379 IndexedClass superClass = _getSuperType(sourceClass)?.element; | 378 IndexedClass superClass = _getSuperType(sourceClass)?.element; |
380 if (superClass == targetClass) { | 379 if (superClass == targetClass) { |
381 return target; | 380 return target; |
382 } | 381 } |
383 ClassEnv env = _classEnvs[superClass.classIndex]; | 382 ClassEnv env = _classEnvs[superClass.classIndex]; |
384 ir.Member member = env.lookupConstructor(target.name); | 383 ir.Member member = env.lookupConstructor(target.name); |
385 if (member != null) { | 384 if (member != null) { |
386 return getConstructor(member); | 385 return getConstructor(member); |
387 } | 386 } |
388 throw new SpannableAssertionFailure( | 387 throw failedAt(source, "Super constructor for $source not found."); |
389 source, "Super constructor for $source not found."); | |
390 } | 388 } |
391 | 389 |
392 @override | 390 @override |
393 FunctionEntity getMethod(ir.Procedure node) => _getMethod(node); | 391 FunctionEntity getMethod(ir.Procedure node) => _getMethod(node); |
394 | 392 |
395 FunctionEntity _getMethod(ir.Procedure node); | 393 FunctionEntity _getMethod(ir.Procedure node); |
396 | 394 |
397 @override | 395 @override |
398 FieldEntity getField(ir.Field node) => _getField(node); | 396 FieldEntity getField(ir.Field node) => _getField(node); |
399 | 397 |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
763 bool isFromEnvironment = isExternal && | 761 bool isFromEnvironment = isExternal && |
764 name.text == 'fromEnvironment' && | 762 name.text == 'fromEnvironment' && |
765 const ['int', 'bool', 'String'].contains(enclosingClass.name); | 763 const ['int', 'bool', 'String'].contains(enclosingClass.name); |
766 constructor = createFactoryConstructor(memberIndex, enclosingClass, | 764 constructor = createFactoryConstructor(memberIndex, enclosingClass, |
767 name, _getParameterStructure(functionNode), | 765 name, _getParameterStructure(functionNode), |
768 isExternal: isExternal, | 766 isExternal: isExternal, |
769 isConst: node.isConst, | 767 isConst: node.isConst, |
770 isFromEnvironmentConstructor: isFromEnvironment); | 768 isFromEnvironmentConstructor: isFromEnvironment); |
771 } else { | 769 } else { |
772 // TODO(johnniwinther): Convert `node.location` to a [SourceSpan]. | 770 // TODO(johnniwinther): Convert `node.location` to a [SourceSpan]. |
773 throw new SpannableAssertionFailure( | 771 throw failedAt( |
774 NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}."); | 772 NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}."); |
775 } | 773 } |
776 _memberData.add(new ConstructorData(node, functionNode)); | 774 _memberData.add(new ConstructorData(node, functionNode)); |
777 _memberList.add(constructor); | 775 _memberList.add(constructor); |
778 return constructor; | 776 return constructor; |
779 }); | 777 }); |
780 } | 778 } |
781 | 779 |
782 FunctionEntity _getMethod(ir.Procedure node) { | 780 FunctionEntity _getMethod(ir.Procedure node) { |
783 return _methodMap.putIfAbsent(node, () { | 781 return _methodMap.putIfAbsent(node, () { |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1178 } | 1176 } |
1179 | 1177 |
1180 @override | 1178 @override |
1181 DartType getUnaliasedType(DartType type) => type; | 1179 DartType getUnaliasedType(DartType type) => type; |
1182 | 1180 |
1183 @override | 1181 @override |
1184 ConstructorEntity lookupConstructor(ClassEntity cls, String name, | 1182 ConstructorEntity lookupConstructor(ClassEntity cls, String name, |
1185 {bool required: false}) { | 1183 {bool required: false}) { |
1186 ConstructorEntity constructor = elementMap.lookupConstructor(cls, name); | 1184 ConstructorEntity constructor = elementMap.lookupConstructor(cls, name); |
1187 if (constructor == null && required) { | 1185 if (constructor == null && required) { |
1188 throw new SpannableAssertionFailure( | 1186 throw failedAt( |
1189 CURRENT_ELEMENT_SPANNABLE, | 1187 CURRENT_ELEMENT_SPANNABLE, |
1190 "The constructor '$name' was not found in class '${cls.name}' " | 1188 "The constructor '$name' was not found in class '${cls.name}' " |
1191 "in library ${cls.library.canonicalUri}."); | 1189 "in library ${cls.library.canonicalUri}."); |
1192 } | 1190 } |
1193 return constructor; | 1191 return constructor; |
1194 } | 1192 } |
1195 | 1193 |
1196 @override | 1194 @override |
1197 MemberEntity lookupClassMember(ClassEntity cls, String name, | 1195 MemberEntity lookupClassMember(ClassEntity cls, String name, |
1198 {bool setter: false, bool required: false}) { | 1196 {bool setter: false, bool required: false}) { |
1199 MemberEntity member = | 1197 MemberEntity member = |
1200 elementMap.lookupClassMember(cls, name, setter: setter); | 1198 elementMap.lookupClassMember(cls, name, setter: setter); |
1201 if (member == null && required) { | 1199 if (member == null && required) { |
1202 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, | 1200 throw failedAt(CURRENT_ELEMENT_SPANNABLE, |
1203 "The member '$name' was not found in ${cls.name}."); | 1201 "The member '$name' was not found in ${cls.name}."); |
1204 } | 1202 } |
1205 return member; | 1203 return member; |
1206 } | 1204 } |
1207 | 1205 |
1208 @override | 1206 @override |
1209 ClassEntity getSuperClass(ClassEntity cls, | 1207 ClassEntity getSuperClass(ClassEntity cls, |
1210 {bool skipUnnamedMixinApplications: false}) { | 1208 {bool skipUnnamedMixinApplications: false}) { |
1211 ClassEntity superclass = elementMap._getSuperType(cls)?.element; | 1209 ClassEntity superclass = elementMap._getSuperType(cls)?.element; |
1212 if (skipUnnamedMixinApplications) { | 1210 if (skipUnnamedMixinApplications) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1251 LibraryEntity library, void f(MemberEntity member)) { | 1249 LibraryEntity library, void f(MemberEntity member)) { |
1252 elementMap._forEachLibraryMember(library, f); | 1250 elementMap._forEachLibraryMember(library, f); |
1253 } | 1251 } |
1254 | 1252 |
1255 @override | 1253 @override |
1256 MemberEntity lookupLibraryMember(LibraryEntity library, String name, | 1254 MemberEntity lookupLibraryMember(LibraryEntity library, String name, |
1257 {bool setter: false, bool required: false}) { | 1255 {bool setter: false, bool required: false}) { |
1258 MemberEntity member = | 1256 MemberEntity member = |
1259 elementMap.lookupLibraryMember(library, name, setter: setter); | 1257 elementMap.lookupLibraryMember(library, name, setter: setter); |
1260 if (member == null && required) { | 1258 if (member == null && required) { |
1261 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, | 1259 failedAt(CURRENT_ELEMENT_SPANNABLE, |
1262 "The member '${name}' was not found in library '${library.name}'."); | 1260 "The member '${name}' was not found in library '${library.name}'."); |
1263 } | 1261 } |
1264 return member; | 1262 return member; |
1265 } | 1263 } |
1266 | 1264 |
1267 @override | 1265 @override |
1268 ClassEntity lookupClass(LibraryEntity library, String name, | 1266 ClassEntity lookupClass(LibraryEntity library, String name, |
1269 {bool required: false}) { | 1267 {bool required: false}) { |
1270 ClassEntity cls = elementMap.lookupClass(library, name); | 1268 ClassEntity cls = elementMap.lookupClass(library, name); |
1271 if (cls == null && required) { | 1269 if (cls == null && required) { |
1272 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, | 1270 failedAt(CURRENT_ELEMENT_SPANNABLE, |
1273 "The class '$name' was not found in library '${library.name}'."); | 1271 "The class '$name' was not found in library '${library.name}'."); |
1274 } | 1272 } |
1275 return cls; | 1273 return cls; |
1276 } | 1274 } |
1277 | 1275 |
1278 @override | 1276 @override |
1279 void forEachClass(LibraryEntity library, void f(ClassEntity cls)) { | 1277 void forEachClass(LibraryEntity library, void f(ClassEntity cls)) { |
1280 elementMap._forEachClass(library, f); | 1278 elementMap._forEachClass(library, f); |
1281 } | 1279 } |
1282 | 1280 |
1283 @override | 1281 @override |
1284 LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { | 1282 LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { |
1285 LibraryEntity library = elementMap.lookupLibrary(uri); | 1283 LibraryEntity library = elementMap.lookupLibrary(uri); |
1286 if (library == null && required) { | 1284 if (library == null && required) { |
1287 throw new SpannableAssertionFailure( | 1285 failedAt(CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found."); |
1288 CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found."); | |
1289 } | 1286 } |
1290 return library; | 1287 return library; |
1291 } | 1288 } |
1292 | 1289 |
1293 @override | 1290 @override |
1294 bool isDeferredLoadLibraryGetter(MemberEntity member) { | 1291 bool isDeferredLoadLibraryGetter(MemberEntity member) { |
1295 // TODO(redemption): Support these. | 1292 // TODO(redemption): Support these. |
1296 return false; | 1293 return false; |
1297 } | 1294 } |
1298 | 1295 |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2009 if (data.constructorBody != null) { | 2006 if (data.constructorBody != null) { |
2010 f(data.constructorBody); | 2007 f(data.constructorBody); |
2011 } | 2008 } |
2012 }); | 2009 }); |
2013 } | 2010 } |
2014 | 2011 |
2015 String getDeferredUri(ir.LibraryDependency node) { | 2012 String getDeferredUri(ir.LibraryDependency node) { |
2016 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri'); | 2013 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri'); |
2017 } | 2014 } |
2018 } | 2015 } |
OLD | NEW |