| 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 |