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 import 'package:kernel/clone.dart'; | 8 import 'package:kernel/clone.dart'; |
9 import 'package:kernel/type_algebra.dart'; | 9 import 'package:kernel/type_algebra.dart'; |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 import '../frontend_strategy.dart'; | 26 import '../frontend_strategy.dart'; |
27 import '../js_backend/backend_usage.dart'; | 27 import '../js_backend/backend_usage.dart'; |
28 import '../js_backend/constant_system_javascript.dart'; | 28 import '../js_backend/constant_system_javascript.dart'; |
29 import '../js_backend/interceptor_data.dart'; | 29 import '../js_backend/interceptor_data.dart'; |
30 import '../js_backend/native_data.dart'; | 30 import '../js_backend/native_data.dart'; |
31 import '../js_backend/no_such_method_registry.dart'; | 31 import '../js_backend/no_such_method_registry.dart'; |
32 import '../native/native.dart' as native; | 32 import '../native/native.dart' as native; |
33 import '../native/resolver.dart'; | 33 import '../native/resolver.dart'; |
34 import '../ordered_typeset.dart'; | 34 import '../ordered_typeset.dart'; |
35 import '../ssa/kernel_impact.dart'; | 35 import '../ssa/kernel_impact.dart'; |
| 36 import '../universe/class_set.dart'; |
| 37 import '../universe/function_set.dart'; |
| 38 import '../universe/selector.dart'; |
36 import '../universe/world_builder.dart'; | 39 import '../universe/world_builder.dart'; |
| 40 import '../world.dart'; |
37 import '../util/util.dart' show Link, LinkBuilder; | 41 import '../util/util.dart' show Link, LinkBuilder; |
38 import 'element_map.dart'; | 42 import 'element_map.dart'; |
39 import 'elements.dart'; | 43 import 'elements.dart'; |
40 | 44 |
41 part 'native_basic_data.dart'; | 45 part 'native_basic_data.dart'; |
42 part 'no_such_method_resolver.dart'; | 46 part 'no_such_method_resolver.dart'; |
43 part 'types.dart'; | 47 part 'types.dart'; |
44 | 48 |
45 /// Element builder used for creating elements and types corresponding to Kernel | 49 /// Element builder used for creating elements and types corresponding to Kernel |
46 /// IR nodes. | 50 /// IR nodes. |
(...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1487 return elementMap._getAppliedMixin(cls); | 1491 return elementMap._getAppliedMixin(cls); |
1488 } | 1492 } |
1489 | 1493 |
1490 @override | 1494 @override |
1491 bool validateClass(ClassEntity cls) => true; | 1495 bool validateClass(ClassEntity cls) => true; |
1492 | 1496 |
1493 @override | 1497 @override |
1494 bool checkClass(ClassEntity cls) => true; | 1498 bool checkClass(ClassEntity cls) => true; |
1495 } | 1499 } |
1496 | 1500 |
| 1501 class KernelClosedWorld extends ClosedWorldBase { |
| 1502 final KernelToElementMapImpl _elementMap; |
| 1503 final ElementEnvironment _elementEnvironment; |
| 1504 |
| 1505 KernelClosedWorld(this._elementMap, |
| 1506 {ElementEnvironment elementEnvironment, |
| 1507 CommonElements commonElements, |
| 1508 ConstantSystem constantSystem, |
| 1509 NativeData nativeData, |
| 1510 InterceptorData interceptorData, |
| 1511 BackendUsage backendUsage, |
| 1512 ResolutionWorldBuilder resolutionWorldBuilder, |
| 1513 FunctionSet functionSet, |
| 1514 Iterable<TypedefElement> allTypedefs, |
| 1515 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
| 1516 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
| 1517 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, |
| 1518 Map<ClassEntity, ClassSet> classSets}) |
| 1519 : this._elementEnvironment = elementEnvironment, |
| 1520 super( |
| 1521 commonElements: commonElements, |
| 1522 constantSystem: constantSystem, |
| 1523 nativeData: nativeData, |
| 1524 interceptorData: interceptorData, |
| 1525 backendUsage: backendUsage, |
| 1526 resolutionWorldBuilder: resolutionWorldBuilder, |
| 1527 functionSet: functionSet, |
| 1528 allTypedefs: allTypedefs, |
| 1529 mixinUses: mixinUses, |
| 1530 typesImplementedBySubclasses: typesImplementedBySubclasses, |
| 1531 classHierarchyNodes: classHierarchyNodes, |
| 1532 classSets: classSets); |
| 1533 |
| 1534 @override |
| 1535 bool hasConcreteMatch(ClassEntity cls, Selector selector, |
| 1536 {ClassEntity stopAtSuperclass}) { |
| 1537 throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch'); |
| 1538 } |
| 1539 |
| 1540 @override |
| 1541 bool isNamedMixinApplication(ClassEntity cls) { |
| 1542 throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication'); |
| 1543 } |
| 1544 |
| 1545 @override |
| 1546 ClassEntity getAppliedMixin(ClassEntity cls) { |
| 1547 throw new UnimplementedError('KernelClosedWorld.getAppliedMixin'); |
| 1548 } |
| 1549 |
| 1550 @override |
| 1551 Iterable<ClassEntity> getInterfaces(ClassEntity cls) { |
| 1552 throw new UnimplementedError('KernelClosedWorld.getInterfaces'); |
| 1553 } |
| 1554 |
| 1555 @override |
| 1556 ClassEntity getSuperClass(ClassEntity cls) { |
| 1557 throw new UnimplementedError('KernelClosedWorld.getSuperClass'); |
| 1558 } |
| 1559 |
| 1560 @override |
| 1561 int getHierarchyDepth(ClassEntity cls) { |
| 1562 return _elementMap._getHierarchyDepth(cls); |
| 1563 } |
| 1564 |
| 1565 @override |
| 1566 OrderedTypeSet getOrderedTypeSet(ClassEntity cls) { |
| 1567 return _elementMap._getOrderedTypeSet(cls); |
| 1568 } |
| 1569 |
| 1570 @override |
| 1571 bool checkInvariants(ClassEntity cls, {bool mustBeInstantiated: true}) => |
| 1572 true; |
| 1573 |
| 1574 @override |
| 1575 bool checkClass(ClassEntity cls) => true; |
| 1576 |
| 1577 @override |
| 1578 bool checkEntity(Entity element) => true; |
| 1579 |
| 1580 @override |
| 1581 void registerClosureClass(ClassElement cls) { |
| 1582 throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); |
| 1583 } |
| 1584 |
| 1585 @override |
| 1586 bool hasElementIn(ClassEntity cls, Selector selector, Entity element) { |
| 1587 while (cls != null) { |
| 1588 MemberEntity member = _elementEnvironment |
| 1589 .lookupClassMember(cls, selector.name, setter: selector.isSetter); |
| 1590 if (member != null && |
| 1591 (!selector.memberName.isPrivate || |
| 1592 member.library == selector.library)) { |
| 1593 return member == element; |
| 1594 } |
| 1595 cls = _elementEnvironment.getSuperClass(cls); |
| 1596 } |
| 1597 return false; |
| 1598 } |
| 1599 } |
| 1600 |
1497 // Interface for testing equivalence of Kernel-based entities. | 1601 // Interface for testing equivalence of Kernel-based entities. |
1498 class WorldDeconstructionForTesting { | 1602 class WorldDeconstructionForTesting { |
1499 final KernelToElementMapImpl elementMap; | 1603 final KernelToElementMapImpl elementMap; |
1500 | 1604 |
1501 WorldDeconstructionForTesting(this.elementMap); | 1605 WorldDeconstructionForTesting(this.elementMap); |
1502 | 1606 |
1503 KClass getSuperclassForClass(KClass cls) { | 1607 KClass getSuperclassForClass(KClass cls) { |
1504 _KClassEnv env = elementMap._classEnvs[cls.classIndex]; | 1608 _KClassEnv env = elementMap._classEnvs[cls.classIndex]; |
1505 ir.Supertype supertype = env.cls.supertype; | 1609 ir.Supertype supertype = env.cls.supertype; |
1506 if (supertype == null) return null; | 1610 if (supertype == null) return null; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 return node.isExternal && | 1667 return node.isExternal && |
1564 !elementMap.isForeignLibrary(node.enclosingLibrary); | 1668 !elementMap.isForeignLibrary(node.enclosingLibrary); |
1565 } | 1669 } |
1566 | 1670 |
1567 @override | 1671 @override |
1568 bool isJsInteropMember(MemberEntity element) { | 1672 bool isJsInteropMember(MemberEntity element) { |
1569 // TODO(johnniwinther): Compute this. | 1673 // TODO(johnniwinther): Compute this. |
1570 return false; | 1674 return false; |
1571 } | 1675 } |
1572 } | 1676 } |
OLD | NEW |