| 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 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 535 |
| 536 void _ensureSupertypes(KClass cls, _KClassEnv env) { | 536 void _ensureSupertypes(KClass cls, _KClassEnv env) { |
| 537 if (env.orderedTypeSet == null) { | 537 if (env.orderedTypeSet == null) { |
| 538 _ensureThisAndRawType(cls, env); | 538 _ensureThisAndRawType(cls, env); |
| 539 | 539 |
| 540 ir.Class node = env.cls; | 540 ir.Class node = env.cls; |
| 541 | 541 |
| 542 if (node.supertype == null) { | 542 if (node.supertype == null) { |
| 543 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType); | 543 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType); |
| 544 env.isMixinApplication = false; | 544 env.isMixinApplication = false; |
| 545 env.interfaces = const <InterfaceType>[]; |
| 545 } else { | 546 } else { |
| 546 InterfaceType processSupertype(ir.Supertype node) { | 547 InterfaceType processSupertype(ir.Supertype node) { |
| 547 InterfaceType type = _typeConverter.visitSupertype(node); | 548 InterfaceType type = _typeConverter.visitSupertype(node); |
| 548 KClass superclass = type.element; | 549 KClass superclass = type.element; |
| 549 _KClassEnv env = _classEnvs[superclass.classIndex]; | 550 _KClassEnv env = _classEnvs[superclass.classIndex]; |
| 550 _ensureSupertypes(superclass, env); | 551 _ensureSupertypes(superclass, env); |
| 551 return type; | 552 return type; |
| 552 } | 553 } |
| 553 | 554 |
| 554 env.supertype = processSupertype(node.supertype); | 555 env.supertype = processSupertype(node.supertype); |
| 555 LinkBuilder<InterfaceType> linkBuilder = | 556 LinkBuilder<InterfaceType> linkBuilder = |
| 556 new LinkBuilder<InterfaceType>(); | 557 new LinkBuilder<InterfaceType>(); |
| 557 if (node.mixedInType != null) { | 558 if (node.mixedInType != null) { |
| 558 env.isMixinApplication = true; | 559 env.isMixinApplication = true; |
| 559 linkBuilder | 560 linkBuilder |
| 560 .addLast(env.mixedInType = processSupertype(node.mixedInType)); | 561 .addLast(env.mixedInType = processSupertype(node.mixedInType)); |
| 561 } else { | 562 } else { |
| 562 env.isMixinApplication = false; | 563 env.isMixinApplication = false; |
| 563 } | 564 } |
| 564 node.implementedTypes.forEach((ir.Supertype supertype) { | 565 node.implementedTypes.forEach((ir.Supertype supertype) { |
| 565 linkBuilder.addLast(processSupertype(supertype)); | 566 linkBuilder.addLast(processSupertype(supertype)); |
| 566 }); | 567 }); |
| 567 Link<InterfaceType> interfaces = linkBuilder.toLink(); | 568 Link<InterfaceType> interfaces = linkBuilder.toLink(); |
| 568 OrderedTypeSetBuilder setBuilder = | 569 OrderedTypeSetBuilder setBuilder = |
| 569 new _KernelOrderedTypeSetBuilder(this, cls); | 570 new _KernelOrderedTypeSetBuilder(this, cls); |
| 570 env.orderedTypeSet = | 571 env.orderedTypeSet = |
| 571 setBuilder.createOrderedTypeSet(env.supertype, interfaces); | 572 setBuilder.createOrderedTypeSet(env.supertype, interfaces); |
| 573 env.interfaces = new List<InterfaceType>.from(interfaces.toList()); |
| 572 } | 574 } |
| 573 } | 575 } |
| 574 } | 576 } |
| 575 | 577 |
| 576 OrderedTypeSet _getOrderedTypeSet(KClass cls) { | 578 OrderedTypeSet _getOrderedTypeSet(KClass cls) { |
| 577 _KClassEnv env = _classEnvs[cls.classIndex]; | 579 _KClassEnv env = _classEnvs[cls.classIndex]; |
| 578 _ensureSupertypes(cls, env); | 580 _ensureSupertypes(cls, env); |
| 579 return env.orderedTypeSet; | 581 return env.orderedTypeSet; |
| 580 } | 582 } |
| 581 | 583 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 607 _ensureSupertypes(cls, env); | 609 _ensureSupertypes(cls, env); |
| 608 return env.isMixinApplication; | 610 return env.isMixinApplication; |
| 609 } | 611 } |
| 610 | 612 |
| 611 bool _isUnnamedMixinApplication(KClass cls) { | 613 bool _isUnnamedMixinApplication(KClass cls) { |
| 612 _KClassEnv env = _classEnvs[cls.classIndex]; | 614 _KClassEnv env = _classEnvs[cls.classIndex]; |
| 613 _ensureSupertypes(cls, env); | 615 _ensureSupertypes(cls, env); |
| 614 return env.isUnnamedMixinApplication; | 616 return env.isUnnamedMixinApplication; |
| 615 } | 617 } |
| 616 | 618 |
| 619 Iterable<InterfaceType> _getInterfaces(KClass cls) { |
| 620 _KClassEnv env = _classEnvs[cls.classIndex]; |
| 621 _ensureSupertypes(cls, env); |
| 622 return env.interfaces; |
| 623 } |
| 624 |
| 617 void _forEachSupertype(KClass cls, void f(InterfaceType supertype)) { | 625 void _forEachSupertype(KClass cls, void f(InterfaceType supertype)) { |
| 618 _KClassEnv env = _classEnvs[cls.classIndex]; | 626 _KClassEnv env = _classEnvs[cls.classIndex]; |
| 619 _ensureSupertypes(cls, env); | 627 _ensureSupertypes(cls, env); |
| 620 env.orderedTypeSet.supertypes.forEach(f); | 628 env.orderedTypeSet.supertypes.forEach(f); |
| 621 } | 629 } |
| 622 | 630 |
| 623 void _forEachMixin(KClass cls, void f(ClassEntity mixin)) { | 631 void _forEachMixin(KClass cls, void f(ClassEntity mixin)) { |
| 624 while (cls != null) { | 632 while (cls != null) { |
| 625 _KClassEnv env = _classEnvs[cls.classIndex]; | 633 _KClassEnv env = _classEnvs[cls.classIndex]; |
| 626 _ensureSupertypes(cls, env); | 634 _ensureSupertypes(cls, env); |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 /// Environment for fast lookup of class members. | 925 /// Environment for fast lookup of class members. |
| 918 class _KClassEnv { | 926 class _KClassEnv { |
| 919 final ir.Class cls; | 927 final ir.Class cls; |
| 920 bool isMixinApplication; | 928 bool isMixinApplication; |
| 921 final bool isUnnamedMixinApplication; | 929 final bool isUnnamedMixinApplication; |
| 922 | 930 |
| 923 InterfaceType thisType; | 931 InterfaceType thisType; |
| 924 InterfaceType rawType; | 932 InterfaceType rawType; |
| 925 InterfaceType supertype; | 933 InterfaceType supertype; |
| 926 InterfaceType mixedInType; | 934 InterfaceType mixedInType; |
| 935 List<InterfaceType> interfaces; |
| 927 OrderedTypeSet orderedTypeSet; | 936 OrderedTypeSet orderedTypeSet; |
| 928 | 937 |
| 929 Map<String, ir.Member> _constructorMap; | 938 Map<String, ir.Member> _constructorMap; |
| 930 Map<String, ir.Member> _memberMap; | 939 Map<String, ir.Member> _memberMap; |
| 931 Map<String, ir.Member> _setterMap; | 940 Map<String, ir.Member> _setterMap; |
| 932 | 941 |
| 933 Iterable<ConstantValue> _metadata; | 942 Iterable<ConstantValue> _metadata; |
| 934 | 943 |
| 935 _KClassEnv(this.cls) | 944 _KClassEnv(this.cls) |
| 936 // TODO(johnniwinther): Change this to use a property on [cls] when such | 945 // TODO(johnniwinther): Change this to use a property on [cls] when such |
| (...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1541 | 1550 |
| 1542 KernelResolutionWorldBuilder( | 1551 KernelResolutionWorldBuilder( |
| 1543 this.elementMap, | 1552 this.elementMap, |
| 1544 NativeBasicData nativeBasicData, | 1553 NativeBasicData nativeBasicData, |
| 1545 NativeDataBuilder nativeDataBuilder, | 1554 NativeDataBuilder nativeDataBuilder, |
| 1546 InterceptorDataBuilder interceptorDataBuilder, | 1555 InterceptorDataBuilder interceptorDataBuilder, |
| 1547 BackendUsageBuilder backendUsageBuilder, | 1556 BackendUsageBuilder backendUsageBuilder, |
| 1548 SelectorConstraintsStrategy selectorConstraintsStrategy) | 1557 SelectorConstraintsStrategy selectorConstraintsStrategy) |
| 1549 : super( | 1558 : super( |
| 1550 elementMap.elementEnvironment, | 1559 elementMap.elementEnvironment, |
| 1560 elementMap.types, |
| 1551 elementMap.commonElements, | 1561 elementMap.commonElements, |
| 1552 elementMap._constantEnvironment.constantSystem, | 1562 elementMap._constantEnvironment.constantSystem, |
| 1553 nativeBasicData, | 1563 nativeBasicData, |
| 1554 nativeDataBuilder, | 1564 nativeDataBuilder, |
| 1555 interceptorDataBuilder, | 1565 interceptorDataBuilder, |
| 1556 backendUsageBuilder, | 1566 backendUsageBuilder, |
| 1557 selectorConstraintsStrategy); | 1567 selectorConstraintsStrategy); |
| 1558 | 1568 |
| 1559 @override | 1569 @override |
| 1560 Iterable<InterfaceType> getSupertypes(ClassEntity cls) { | 1570 Iterable<InterfaceType> getSupertypes(ClassEntity cls) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1587 | 1597 |
| 1588 @override | 1598 @override |
| 1589 bool checkClass(ClassEntity cls) => true; | 1599 bool checkClass(ClassEntity cls) => true; |
| 1590 } | 1600 } |
| 1591 | 1601 |
| 1592 class KernelClosedWorld extends ClosedWorldBase { | 1602 class KernelClosedWorld extends ClosedWorldBase { |
| 1593 final KernelToElementMapImpl _elementMap; | 1603 final KernelToElementMapImpl _elementMap; |
| 1594 | 1604 |
| 1595 KernelClosedWorld(this._elementMap, | 1605 KernelClosedWorld(this._elementMap, |
| 1596 {ElementEnvironment elementEnvironment, | 1606 {ElementEnvironment elementEnvironment, |
| 1607 DartTypes dartTypes, |
| 1597 CommonElements commonElements, | 1608 CommonElements commonElements, |
| 1598 ConstantSystem constantSystem, | 1609 ConstantSystem constantSystem, |
| 1599 NativeData nativeData, | 1610 NativeData nativeData, |
| 1600 InterceptorData interceptorData, | 1611 InterceptorData interceptorData, |
| 1601 BackendUsage backendUsage, | 1612 BackendUsage backendUsage, |
| 1602 ResolutionWorldBuilder resolutionWorldBuilder, | 1613 ResolutionWorldBuilder resolutionWorldBuilder, |
| 1603 Set<ClassEntity> implementedClasses, | 1614 Set<ClassEntity> implementedClasses, |
| 1604 FunctionSet functionSet, | 1615 FunctionSet functionSet, |
| 1605 Set<TypedefElement> allTypedefs, | 1616 Set<TypedefElement> allTypedefs, |
| 1606 Map<ClassEntity, Set<ClassEntity>> mixinUses, | 1617 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
| 1607 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 1618 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
| 1608 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, | 1619 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, |
| 1609 Map<ClassEntity, ClassSet> classSets}) | 1620 Map<ClassEntity, ClassSet> classSets}) |
| 1610 : super( | 1621 : super( |
| 1611 elementEnvironment: elementEnvironment, | 1622 elementEnvironment: elementEnvironment, |
| 1623 dartTypes: dartTypes, |
| 1612 commonElements: commonElements, | 1624 commonElements: commonElements, |
| 1613 constantSystem: constantSystem, | 1625 constantSystem: constantSystem, |
| 1614 nativeData: nativeData, | 1626 nativeData: nativeData, |
| 1615 interceptorData: interceptorData, | 1627 interceptorData: interceptorData, |
| 1616 backendUsage: backendUsage, | 1628 backendUsage: backendUsage, |
| 1617 resolutionWorldBuilder: resolutionWorldBuilder, | 1629 resolutionWorldBuilder: resolutionWorldBuilder, |
| 1618 implementedClasses: implementedClasses, | 1630 implementedClasses: implementedClasses, |
| 1619 functionSet: functionSet, | 1631 functionSet: functionSet, |
| 1620 allTypedefs: allTypedefs, | 1632 allTypedefs: allTypedefs, |
| 1621 mixinUses: mixinUses, | 1633 mixinUses: mixinUses, |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1907 throw new UnsupportedError( | 1919 throw new UnsupportedError( |
| 1908 "JsKernelToElementMap.getConstantFieldInitializer"); | 1920 "JsKernelToElementMap.getConstantFieldInitializer"); |
| 1909 } | 1921 } |
| 1910 | 1922 |
| 1911 @override | 1923 @override |
| 1912 bool hasConstantFieldInitializer(FieldEntity field) { | 1924 bool hasConstantFieldInitializer(FieldEntity field) { |
| 1913 throw new UnsupportedError( | 1925 throw new UnsupportedError( |
| 1914 "JsKernelToElementMap.hasConstantFieldInitializer"); | 1926 "JsKernelToElementMap.hasConstantFieldInitializer"); |
| 1915 } | 1927 } |
| 1916 } | 1928 } |
| OLD | NEW |