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 14 matching lines...) Expand all Loading... |
25 import '../js_backend/backend_usage.dart'; | 25 import '../js_backend/backend_usage.dart'; |
26 import '../js_backend/constant_system_javascript.dart'; | 26 import '../js_backend/constant_system_javascript.dart'; |
27 import '../js_backend/interceptor_data.dart'; | 27 import '../js_backend/interceptor_data.dart'; |
28 import '../js_backend/native_data.dart'; | 28 import '../js_backend/native_data.dart'; |
29 import '../js_backend/no_such_method_registry.dart'; | 29 import '../js_backend/no_such_method_registry.dart'; |
30 import '../js_model/elements.dart'; | 30 import '../js_model/elements.dart'; |
31 import '../native/native.dart' as native; | 31 import '../native/native.dart' as native; |
32 import '../native/resolver.dart'; | 32 import '../native/resolver.dart'; |
33 import '../ordered_typeset.dart'; | 33 import '../ordered_typeset.dart'; |
34 import '../universe/class_set.dart'; | 34 import '../universe/class_set.dart'; |
35 import '../universe/function_set.dart'; | |
36 import '../universe/selector.dart'; | 35 import '../universe/selector.dart'; |
37 import '../universe/world_builder.dart'; | 36 import '../universe/world_builder.dart'; |
38 import '../world.dart'; | 37 import '../world.dart'; |
39 import '../util/util.dart' show Link, LinkBuilder; | 38 import '../util/util.dart' show Link, LinkBuilder; |
40 import 'element_map.dart'; | 39 import 'element_map.dart'; |
41 import 'element_map_mixins.dart'; | 40 import 'element_map_mixins.dart'; |
42 import 'elements.dart'; | 41 import 'elements.dart'; |
43 import 'env.dart'; | 42 import 'env.dart'; |
44 import 'kelements.dart'; | 43 import 'kelements.dart'; |
45 | 44 |
(...skipping 1415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1461 return elementMap._getAppliedMixin(cls); | 1460 return elementMap._getAppliedMixin(cls); |
1462 } | 1461 } |
1463 | 1462 |
1464 @override | 1463 @override |
1465 bool validateClass(ClassEntity cls) => true; | 1464 bool validateClass(ClassEntity cls) => true; |
1466 | 1465 |
1467 @override | 1466 @override |
1468 bool checkClass(ClassEntity cls) => true; | 1467 bool checkClass(ClassEntity cls) => true; |
1469 } | 1468 } |
1470 | 1469 |
1471 class KernelClosedWorld extends ClosedWorldBase { | 1470 abstract class KernelClosedWorldMixin implements ClosedWorld { |
| 1471 @override |
| 1472 bool hasElementIn(ClassEntity cls, Selector selector, Entity element) { |
| 1473 while (cls != null) { |
| 1474 MemberEntity member = elementEnvironment |
| 1475 .lookupClassMember(cls, selector.name, setter: selector.isSetter); |
| 1476 if (member != null && |
| 1477 (!selector.memberName.isPrivate || |
| 1478 member.library == selector.library)) { |
| 1479 return member == element; |
| 1480 } |
| 1481 cls = elementEnvironment.getSuperClass(cls); |
| 1482 } |
| 1483 return false; |
| 1484 } |
| 1485 } |
| 1486 |
| 1487 class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin { |
1472 final KernelToElementMapForImpactImpl _elementMap; | 1488 final KernelToElementMapForImpactImpl _elementMap; |
1473 | 1489 |
1474 KernelClosedWorld(this._elementMap, | 1490 KernelClosedWorld(this._elementMap, |
1475 {ElementEnvironment elementEnvironment, | 1491 {ElementEnvironment elementEnvironment, |
1476 DartTypes dartTypes, | 1492 DartTypes dartTypes, |
1477 CommonElements commonElements, | 1493 CommonElements commonElements, |
1478 ConstantSystem constantSystem, | 1494 ConstantSystem constantSystem, |
1479 NativeData nativeData, | 1495 NativeData nativeData, |
1480 InterceptorData interceptorData, | 1496 InterceptorData interceptorData, |
1481 BackendUsage backendUsage, | 1497 BackendUsage backendUsage, |
1482 ResolutionWorldBuilder resolutionWorldBuilder, | 1498 ResolutionWorldBuilder resolutionWorldBuilder, |
1483 Set<ClassEntity> implementedClasses, | 1499 Set<ClassEntity> implementedClasses, |
1484 FunctionSet functionSet, | 1500 Iterable<MemberEntity> liveInstanceMembers, |
1485 Set<TypedefElement> allTypedefs, | 1501 Set<TypedefElement> allTypedefs, |
1486 Map<ClassEntity, Set<ClassEntity>> mixinUses, | 1502 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
1487 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 1503 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
1488 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, | 1504 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, |
1489 Map<ClassEntity, ClassSet> classSets}) | 1505 Map<ClassEntity, ClassSet> classSets}) |
1490 : super( | 1506 : super( |
1491 elementEnvironment: elementEnvironment, | 1507 elementEnvironment, |
1492 dartTypes: dartTypes, | 1508 dartTypes, |
1493 commonElements: commonElements, | 1509 commonElements, |
1494 constantSystem: constantSystem, | 1510 constantSystem, |
1495 nativeData: nativeData, | 1511 nativeData, |
1496 interceptorData: interceptorData, | 1512 interceptorData, |
1497 backendUsage: backendUsage, | 1513 backendUsage, |
1498 resolutionWorldBuilder: resolutionWorldBuilder, | 1514 resolutionWorldBuilder, |
1499 implementedClasses: implementedClasses, | 1515 implementedClasses, |
1500 functionSet: functionSet, | 1516 liveInstanceMembers, |
1501 allTypedefs: allTypedefs, | 1517 allTypedefs, |
1502 mixinUses: mixinUses, | 1518 mixinUses, |
1503 typesImplementedBySubclasses: typesImplementedBySubclasses, | 1519 typesImplementedBySubclasses, |
1504 classHierarchyNodes: classHierarchyNodes, | 1520 classHierarchyNodes, |
1505 classSets: classSets); | 1521 classSets); |
1506 | 1522 |
1507 @override | 1523 @override |
1508 bool hasConcreteMatch(ClassEntity cls, Selector selector, | 1524 bool hasConcreteMatch(ClassEntity cls, Selector selector, |
1509 {ClassEntity stopAtSuperclass}) { | 1525 {ClassEntity stopAtSuperclass}) { |
1510 throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch'); | 1526 throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch'); |
1511 } | 1527 } |
1512 | 1528 |
1513 @override | 1529 @override |
1514 bool isNamedMixinApplication(ClassEntity cls) { | 1530 bool isNamedMixinApplication(ClassEntity cls) { |
1515 throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication'); | 1531 throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication'); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 @override | 1563 @override |
1548 bool checkClass(ClassEntity cls) => true; | 1564 bool checkClass(ClassEntity cls) => true; |
1549 | 1565 |
1550 @override | 1566 @override |
1551 bool checkEntity(Entity element) => true; | 1567 bool checkEntity(Entity element) => true; |
1552 | 1568 |
1553 @override | 1569 @override |
1554 void registerClosureClass(ClassElement cls) { | 1570 void registerClosureClass(ClassElement cls) { |
1555 throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); | 1571 throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); |
1556 } | 1572 } |
1557 | |
1558 @override | |
1559 bool hasElementIn(ClassEntity cls, Selector selector, Entity element) { | |
1560 while (cls != null) { | |
1561 MemberEntity member = elementEnvironment | |
1562 .lookupClassMember(cls, selector.name, setter: selector.isSetter); | |
1563 if (member != null && | |
1564 (!selector.memberName.isPrivate || | |
1565 member.library == selector.library)) { | |
1566 return member == element; | |
1567 } | |
1568 cls = elementEnvironment.getSuperClass(cls); | |
1569 } | |
1570 return false; | |
1571 } | |
1572 } | 1573 } |
1573 | 1574 |
1574 // Interface for testing equivalence of Kernel-based entities. | 1575 // Interface for testing equivalence of Kernel-based entities. |
1575 class WorldDeconstructionForTesting { | 1576 class WorldDeconstructionForTesting { |
1576 final KernelToElementMapBase elementMap; | 1577 final KernelToElementMapBase elementMap; |
1577 | 1578 |
1578 WorldDeconstructionForTesting(this.elementMap); | 1579 WorldDeconstructionForTesting(this.elementMap); |
1579 | 1580 |
1580 KClass getSuperclassForClass(KClass cls) { | 1581 KClass getSuperclassForClass(KClass cls) { |
1581 ClassEnv env = elementMap._classEnvs[cls.classIndex]; | 1582 ClassEnv env = elementMap._classEnvs[cls.classIndex]; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1835 throw new UnsupportedError( | 1836 throw new UnsupportedError( |
1836 "JsKernelToElementMap.getConstantFieldInitializer"); | 1837 "JsKernelToElementMap.getConstantFieldInitializer"); |
1837 } | 1838 } |
1838 | 1839 |
1839 @override | 1840 @override |
1840 bool hasConstantFieldInitializer(FieldEntity field) { | 1841 bool hasConstantFieldInitializer(FieldEntity field) { |
1841 throw new UnsupportedError( | 1842 throw new UnsupportedError( |
1842 "JsKernelToElementMap.hasConstantFieldInitializer"); | 1843 "JsKernelToElementMap.hasConstantFieldInitializer"); |
1843 } | 1844 } |
1844 } | 1845 } |
OLD | NEW |