Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2970943002: Use index in J/KTypeVariable and fix remaining inequivalence (Closed)
Patch Set: Fix Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/elements.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 DartTypeConverter _typeConverter; 67 DartTypeConverter _typeConverter;
68 KernelConstantEnvironment _constantEnvironment; 68 KernelConstantEnvironment _constantEnvironment;
69 _KernelDartTypes _types; 69 _KernelDartTypes _types;
70 70
71 /// Library environment. Used for fast lookup. 71 /// Library environment. Used for fast lookup.
72 ProgramEnv _env = new ProgramEnv(); 72 ProgramEnv _env = new ProgramEnv();
73 73
74 List<LibraryEntity> _libraryList = <LibraryEntity>[]; 74 List<LibraryEntity> _libraryList = <LibraryEntity>[];
75 List<ClassEntity> _classList = <ClassEntity>[]; 75 List<ClassEntity> _classList = <ClassEntity>[];
76 List<MemberEntity> _memberList = <MemberEntity>[]; 76 List<MemberEntity> _memberList = <MemberEntity>[];
77 List<TypeVariableEntity> _typeVariableList = <TypeVariableEntity>[];
77 78
78 /// List of library environments by `IndexedLibrary.libraryIndex`. This is 79 /// List of library environments by `IndexedLibrary.libraryIndex`. This is
79 /// used for fast lookup into library classes and members. 80 /// used for fast lookup into library classes and members.
80 List<LibraryEnv> _libraryEnvs = <LibraryEnv>[]; 81 List<LibraryEnv> _libraryEnvs = <LibraryEnv>[];
81 82
82 /// List of class environments by `IndexedClass.classIndex`. This is used for 83 /// List of class environments by `IndexedClass.classIndex`. This is used for
83 /// fast lookup into class members. 84 /// fast lookup into class members.
84 List<ClassEnv> _classEnvs = <ClassEnv>[]; 85 List<ClassEnv> _classEnvs = <ClassEnv>[];
85 86
86 /// List of class data by `IndexedClass.classIndex`. This is used for 87 /// List of class data by `IndexedClass.classIndex`. This is used for
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 /// creating K-model elements. 521 /// creating K-model elements.
521 abstract class ElementCreatorMixin { 522 abstract class ElementCreatorMixin {
522 ProgramEnv get _env; 523 ProgramEnv get _env;
523 List<LibraryEntity> get _libraryList; 524 List<LibraryEntity> get _libraryList;
524 List<LibraryEnv> get _libraryEnvs; 525 List<LibraryEnv> get _libraryEnvs;
525 List<ClassEntity> get _classList; 526 List<ClassEntity> get _classList;
526 List<ClassEnv> get _classEnvs; 527 List<ClassEnv> get _classEnvs;
527 List<ClassData> get _classData; 528 List<ClassData> get _classData;
528 List<MemberEntity> get _memberList; 529 List<MemberEntity> get _memberList;
529 List<MemberData> get _memberData; 530 List<MemberData> get _memberData;
531 List<TypeVariableEntity> get _typeVariableList;
530 532
531 Map<ir.Library, IndexedLibrary> _libraryMap = <ir.Library, IndexedLibrary>{}; 533 Map<ir.Library, IndexedLibrary> _libraryMap = <ir.Library, IndexedLibrary>{};
532 Map<ir.Class, IndexedClass> _classMap = <ir.Class, IndexedClass>{}; 534 Map<ir.Class, IndexedClass> _classMap = <ir.Class, IndexedClass>{};
533 Map<ir.TypeParameter, TypeVariableEntity> _typeVariableMap = 535 Map<ir.TypeParameter, IndexedTypeVariable> _typeVariableMap =
534 <ir.TypeParameter, TypeVariableEntity>{}; 536 <ir.TypeParameter, IndexedTypeVariable>{};
535 Map<ir.Member, IndexedConstructor> _constructorMap = 537 Map<ir.Member, IndexedConstructor> _constructorMap =
536 <ir.Member, IndexedConstructor>{}; 538 <ir.Member, IndexedConstructor>{};
537 Map<ir.Procedure, IndexedFunction> _methodMap = 539 Map<ir.Procedure, IndexedFunction> _methodMap =
538 <ir.Procedure, IndexedFunction>{}; 540 <ir.Procedure, IndexedFunction>{};
539 Map<ir.Field, IndexedField> _fieldMap = <ir.Field, IndexedField>{}; 541 Map<ir.Field, IndexedField> _fieldMap = <ir.Field, IndexedField>{};
540 Map<ir.TreeNode, Local> _localFunctionMap = <ir.TreeNode, Local>{}; 542 Map<ir.TreeNode, Local> _localFunctionMap = <ir.TreeNode, Local>{};
541 543
542 Name getName(ir.Name node); 544 Name getName(ir.Name node);
543 FunctionType getFunctionType(ir.FunctionNode node); 545 FunctionType getFunctionType(ir.FunctionNode node);
544 MemberEntity getMember(ir.Member node); 546 MemberEntity getMember(ir.Member node);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 ClassEntity cls = createClass(library, _classMap.length, node.name, 583 ClassEntity cls = createClass(library, _classMap.length, node.name,
582 isAbstract: node.isAbstract); 584 isAbstract: node.isAbstract);
583 _classList.add(cls); 585 _classList.add(cls);
584 return cls; 586 return cls;
585 }); 587 });
586 } 588 }
587 589
588 TypeVariableEntity _getTypeVariable(ir.TypeParameter node) { 590 TypeVariableEntity _getTypeVariable(ir.TypeParameter node) {
589 return _typeVariableMap.putIfAbsent(node, () { 591 return _typeVariableMap.putIfAbsent(node, () {
590 if (node.parent is ir.Class) { 592 if (node.parent is ir.Class) {
593 int typeVariableIndex = _typeVariableList.length;
591 ir.Class cls = node.parent; 594 ir.Class cls = node.parent;
592 int index = cls.typeParameters.indexOf(node); 595 int index = cls.typeParameters.indexOf(node);
593 return createTypeVariable(_getClass(cls), node.name, index); 596 TypeVariableEntity typeVariable = createTypeVariable(
597 typeVariableIndex, _getClass(cls), node.name, index);
598 _typeVariableList.add(typeVariable);
599 return typeVariable;
594 } 600 }
595 if (node.parent is ir.FunctionNode) { 601 if (node.parent is ir.FunctionNode) {
596 ir.FunctionNode func = node.parent; 602 ir.FunctionNode func = node.parent;
597 int index = func.typeParameters.indexOf(node); 603 int index = func.typeParameters.indexOf(node);
598 if (func.parent is ir.Constructor) { 604 if (func.parent is ir.Constructor) {
599 ir.Constructor constructor = func.parent; 605 ir.Constructor constructor = func.parent;
600 ir.Class cls = constructor.enclosingClass; 606 ir.Class cls = constructor.enclosingClass;
601 return _getTypeVariable(cls.typeParameters[index]); 607 return _getTypeVariable(cls.typeParameters[index]);
602 } 608 }
603 if (func.parent is ir.Procedure) { 609 if (func.parent is ir.Procedure) {
604 ir.Procedure procedure = func.parent; 610 ir.Procedure procedure = func.parent;
605 if (procedure.kind == ir.ProcedureKind.Factory) { 611 if (procedure.kind == ir.ProcedureKind.Factory) {
606 ir.Class cls = procedure.enclosingClass; 612 ir.Class cls = procedure.enclosingClass;
607 return _getTypeVariable(cls.typeParameters[index]); 613 return _getTypeVariable(cls.typeParameters[index]);
608 } else { 614 } else {
609 return createTypeVariable(_getMethod(procedure), node.name, index); 615 int typeVariableIndex = _typeVariableList.length;
616 TypeVariableEntity typeVariable = createTypeVariable(
617 typeVariableIndex, _getMethod(procedure), node.name, index);
618 _typeVariableList.add(typeVariable);
619 return typeVariable;
610 } 620 }
611 } 621 }
612 } 622 }
613 throw new UnsupportedError('Unsupported type parameter type node $node.'); 623 throw new UnsupportedError('Unsupported type parameter type node $node.');
614 }); 624 });
615 } 625 }
616 626
617 ConstructorEntity _getConstructor(ir.Member node) { 627 ConstructorEntity _getConstructor(ir.Member node) {
618 return _constructorMap.putIfAbsent(node, () { 628 return _constructorMap.putIfAbsent(node, () {
619 int memberIndex = _memberData.length; 629 int memberIndex = _memberData.length;
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 name, memberContext, executableContext, functionType); 791 name, memberContext, executableContext, functionType);
782 }); 792 });
783 } 793 }
784 794
785 IndexedLibrary createLibrary(int libraryIndex, String name, Uri canonicalUri); 795 IndexedLibrary createLibrary(int libraryIndex, String name, Uri canonicalUri);
786 796
787 IndexedClass createClass(LibraryEntity library, int classIndex, String name, 797 IndexedClass createClass(LibraryEntity library, int classIndex, String name,
788 {bool isAbstract}); 798 {bool isAbstract});
789 799
790 TypeVariableEntity createTypeVariable( 800 TypeVariableEntity createTypeVariable(
791 Entity typeDeclaration, String name, int index); 801 int typeVariableIndex, Entity typeDeclaration, String name, int index);
792 802
793 IndexedConstructor createGenerativeConstructor( 803 IndexedConstructor createGenerativeConstructor(
794 int memberIndex, 804 int memberIndex,
795 ClassEntity enclosingClass, 805 ClassEntity enclosingClass,
796 Name name, 806 Name name,
797 ParameterStructure parameterStructure, 807 ParameterStructure parameterStructure,
798 {bool isExternal, 808 {bool isExternal,
799 bool isConst}); 809 bool isConst});
800 810
801 IndexedConstructor createFactoryConstructor( 811 IndexedConstructor createFactoryConstructor(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 int libraryIndex, String name, Uri canonicalUri) { 849 int libraryIndex, String name, Uri canonicalUri) {
840 return new KLibrary(libraryIndex, name, canonicalUri); 850 return new KLibrary(libraryIndex, name, canonicalUri);
841 } 851 }
842 852
843 IndexedClass createClass(LibraryEntity library, int classIndex, String name, 853 IndexedClass createClass(LibraryEntity library, int classIndex, String name,
844 {bool isAbstract}) { 854 {bool isAbstract}) {
845 return new KClass(library, classIndex, name, isAbstract: isAbstract); 855 return new KClass(library, classIndex, name, isAbstract: isAbstract);
846 } 856 }
847 857
848 TypeVariableEntity createTypeVariable( 858 TypeVariableEntity createTypeVariable(
849 Entity typeDeclaration, String name, int index) { 859 int typeVariableIndex, Entity typeDeclaration, String name, int index) {
850 return new KTypeVariable(typeDeclaration, name, index); 860 return new KTypeVariable(typeVariableIndex, typeDeclaration, name, index);
851 } 861 }
852 862
853 IndexedConstructor createGenerativeConstructor( 863 IndexedConstructor createGenerativeConstructor(
854 int memberIndex, 864 int memberIndex,
855 ClassEntity enclosingClass, 865 ClassEntity enclosingClass,
856 Name name, 866 Name name,
857 ParameterStructure parameterStructure, 867 ParameterStructure parameterStructure,
858 {bool isExternal, 868 {bool isExternal,
859 bool isConst}) { 869 bool isConst}) {
860 return new KGenerativeConstructor( 870 return new KGenerativeConstructor(
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 return _frontend._classList[cls.classIndex]; 1691 return _frontend._classList[cls.classIndex];
1682 } 1692 }
1683 1693
1684 MemberEntity toBackendMember(covariant IndexedMember member) { 1694 MemberEntity toBackendMember(covariant IndexedMember member) {
1685 return _backend._memberList[member.memberIndex]; 1695 return _backend._memberList[member.memberIndex];
1686 } 1696 }
1687 1697
1688 MemberEntity toFrontendMember(covariant IndexedMember member) { 1698 MemberEntity toFrontendMember(covariant IndexedMember member) {
1689 return _frontend._memberList[member.memberIndex]; 1699 return _frontend._memberList[member.memberIndex];
1690 } 1700 }
1701
1702 TypeVariableEntity toBackendTypeVariable(
1703 covariant IndexedTypeVariable typeVariable) {
1704 return _backend._typeVariableList[typeVariable.typeVariableIndex];
1705 }
1706
1707 TypeVariableEntity toFrontendTypeVariable(
1708 covariant IndexedTypeVariable typeVariable) {
1709 return _frontend._typeVariableList[typeVariable.typeVariableIndex];
1710 }
1691 } 1711 }
1692 1712
1693 class JsKernelToElementMap extends KernelToElementMapBase 1713 class JsKernelToElementMap extends KernelToElementMapBase
1694 with 1714 with
1695 KernelToElementMapForBuildingMixin, 1715 KernelToElementMapForBuildingMixin,
1696 KernelToElementMapForBuildingFromBaseMixin, 1716 KernelToElementMapForBuildingFromBaseMixin,
1697 JsElementCreatorMixin, 1717 JsElementCreatorMixin,
1698 // TODO(johnniwinther): Avoid mixin in [ElementCreatorMixin]. The 1718 // TODO(johnniwinther): Avoid mixin in [ElementCreatorMixin]. The
1699 // codegen world should be a strict subset of the resolution world and 1719 // codegen world should be a strict subset of the resolution world and
1700 // creating elements for IR nodes should therefore not be needed. 1720 // creating elements for IR nodes should therefore not be needed.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 _memberList.add(newMember); 1771 _memberList.add(newMember);
1752 _memberData.add(data.copy()); 1772 _memberData.add(data.copy());
1753 if (newMember.isField) { 1773 if (newMember.isField) {
1754 _fieldMap[data.node] = newMember; 1774 _fieldMap[data.node] = newMember;
1755 } else if (newMember.isConstructor) { 1775 } else if (newMember.isConstructor) {
1756 _constructorMap[data.node] = newMember; 1776 _constructorMap[data.node] = newMember;
1757 } else { 1777 } else {
1758 _methodMap[data.node] = newMember; 1778 _methodMap[data.node] = newMember;
1759 } 1779 }
1760 } 1780 }
1781 for (int typeVariableIndex = 0;
1782 typeVariableIndex < _elementMap._typeVariableList.length;
1783 typeVariableIndex++) {
1784 TypeVariableEntity oldTypeVariable =
1785 _elementMap._typeVariableList[typeVariableIndex];
1786 Entity newTypeDeclaration;
1787 if (oldTypeVariable.typeDeclaration is ClassEntity) {
1788 IndexedClass cls = oldTypeVariable.typeDeclaration;
1789 newTypeDeclaration = _classList[cls.classIndex];
1790 } else {
1791 IndexedMember member = oldTypeVariable.typeDeclaration;
1792 newTypeDeclaration = _memberList[member.memberIndex];
1793 }
1794 TypeVariableEntity newTypeVariable = createTypeVariable(typeVariableIndex,
1795 newTypeDeclaration, oldTypeVariable.name, oldTypeVariable.index);
1796 _typeVariableList.add(newTypeVariable);
1797 }
1761 } 1798 }
1762 1799
1763 JsToFrontendMap get jsToFrontendMap => _jsToFrontendMap; 1800 JsToFrontendMap get jsToFrontendMap => _jsToFrontendMap;
1764 1801
1765 @override 1802 @override
1766 Spannable getSpannable(MemberEntity member, ir.Node node) { 1803 Spannable getSpannable(MemberEntity member, ir.Node node) {
1767 return _getSpannable(member, node); 1804 return _getSpannable(member, node);
1768 } 1805 }
1769 1806
1770 Iterable<LibraryEntity> get _libraries { 1807 Iterable<LibraryEntity> get _libraries {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1816 @override 1853 @override
1817 ir.Member getMemberNode(MemberEntity member) { 1854 ir.Member getMemberNode(MemberEntity member) {
1818 return _getMemberNode(member); 1855 return _getMemberNode(member);
1819 } 1856 }
1820 1857
1821 @override 1858 @override
1822 ir.Class getClassNode(ClassEntity cls) { 1859 ir.Class getClassNode(ClassEntity cls) {
1823 return _getClassNode(cls); 1860 return _getClassNode(cls);
1824 } 1861 }
1825 } 1862 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698