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

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

Issue 2996723002: Support typedef type literals (Closed)
Patch Set: Cleanup Created 3 years, 4 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
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 '../closure.dart' show BoxLocal; 9 import '../closure.dart' show BoxLocal;
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 KernelConstantEnvironment _constantEnvironment; 75 KernelConstantEnvironment _constantEnvironment;
76 _KernelDartTypes _types; 76 _KernelDartTypes _types;
77 77
78 /// Library environment. Used for fast lookup. 78 /// Library environment. Used for fast lookup.
79 ProgramEnv _env = new ProgramEnv(); 79 ProgramEnv _env = new ProgramEnv();
80 80
81 List<LibraryEntity> _libraryList = <LibraryEntity>[]; 81 List<LibraryEntity> _libraryList = <LibraryEntity>[];
82 List<ClassEntity> _classList = <ClassEntity>[]; 82 List<ClassEntity> _classList = <ClassEntity>[];
83 List<MemberEntity> _memberList = <MemberEntity>[]; 83 List<MemberEntity> _memberList = <MemberEntity>[];
84 List<TypeVariableEntity> _typeVariableList = <TypeVariableEntity>[]; 84 List<TypeVariableEntity> _typeVariableList = <TypeVariableEntity>[];
85 List<TypedefEntity> _typedefList = <TypedefEntity>[];
85 86
86 /// List of library environments by `IndexedLibrary.libraryIndex`. This is 87 /// List of library environments by `IndexedLibrary.libraryIndex`. This is
87 /// used for fast lookup into library classes and members. 88 /// used for fast lookup into library classes and members.
88 List<LibraryEnv> _libraryEnvs = <LibraryEnv>[]; 89 List<LibraryEnv> _libraryEnvs = <LibraryEnv>[];
89 90
90 /// List of library data by `IndexedLibrary.libraryIndex`. This is used for 91 /// List of library data by `IndexedLibrary.libraryIndex`. This is used for
91 /// fast lookup into library properties. 92 /// fast lookup into library properties.
92 List<LibraryData> _libraryData = <LibraryData>[]; 93 List<LibraryData> _libraryData = <LibraryData>[];
93 94
94 /// List of class environments by `IndexedClass.classIndex`. This is used for 95 /// List of class environments by `IndexedClass.classIndex`. This is used for
95 /// fast lookup into class members. 96 /// fast lookup into class members.
96 List<ClassEnv> _classEnvs = <ClassEnv>[]; 97 List<ClassEnv> _classEnvs = <ClassEnv>[];
97 98
98 /// List of class data by `IndexedClass.classIndex`. This is used for 99 /// List of class data by `IndexedClass.classIndex`. This is used for
99 /// fast lookup into class properties. 100 /// fast lookup into class properties.
100 List<ClassData> _classData = <ClassData>[]; 101 List<ClassData> _classData = <ClassData>[];
101 102
102 /// List of member data by `IndexedMember.memberIndex`. This is used for 103 /// List of member data by `IndexedMember.memberIndex`. This is used for
103 /// fast lookup into member properties. 104 /// fast lookup into member properties.
104 List<MemberData> _memberData = <MemberData>[]; 105 List<MemberData> _memberData = <MemberData>[];
105 106
107 /// List of typedef data by `IndexedTypedef.typedefIndex`. This is used for
108 /// fast lookup into typedef properties.
109 List<TypedefData> _typedefData = <TypedefData>[];
110
106 KernelToElementMapBase(this.reporter, Environment environment) { 111 KernelToElementMapBase(this.reporter, Environment environment) {
107 _elementEnvironment = new KernelElementEnvironment(this); 112 _elementEnvironment = new KernelElementEnvironment(this);
108 _commonElements = new CommonElements(_elementEnvironment); 113 _commonElements = new CommonElements(_elementEnvironment);
109 _constantEnvironment = new KernelConstantEnvironment(this, environment); 114 _constantEnvironment = new KernelConstantEnvironment(this, environment);
110 _typeConverter = new DartTypeConverter(this); 115 _typeConverter = new DartTypeConverter(this);
111 _types = new _KernelDartTypes(this); 116 _types = new _KernelDartTypes(this);
112 } 117 }
113 118
114 bool checkFamily(Entity entity); 119 bool checkFamily(Entity entity);
115 120
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 OrderedTypeSetBuilder setBuilder = 322 OrderedTypeSetBuilder setBuilder =
318 new _KernelOrderedTypeSetBuilder(this, cls); 323 new _KernelOrderedTypeSetBuilder(this, cls);
319 data.orderedTypeSet = setBuilder.createOrderedTypeSet( 324 data.orderedTypeSet = setBuilder.createOrderedTypeSet(
320 data.supertype, interfaces.reverse()); 325 data.supertype, interfaces.reverse());
321 data.interfaces = new List<InterfaceType>.from(interfaces.toList()); 326 data.interfaces = new List<InterfaceType>.from(interfaces.toList());
322 } 327 }
323 } 328 }
324 } 329 }
325 330
326 @override 331 @override
332 TypedefType getTypedefType(ir.Typedef node) {
333 IndexedTypedef typedef = _getTypedef(node);
334 return _typedefData[typedef.typedefIndex].rawType;
335 }
336
337 TypedefEntity _getTypedef(ir.Typedef node);
338
339 @override
327 MemberEntity getMember(ir.Member node) { 340 MemberEntity getMember(ir.Member node) {
328 if (node is ir.Field) { 341 if (node is ir.Field) {
329 return _getField(node); 342 return _getField(node);
330 } else if (node is ir.Constructor) { 343 } else if (node is ir.Constructor) {
331 return _getConstructor(node); 344 return _getConstructor(node);
332 } else if (node is ir.Procedure) { 345 } else if (node is ir.Procedure) {
333 if (node.kind == ir.ProcedureKind.Factory) { 346 if (node.kind == ir.ProcedureKind.Factory) {
334 return _getConstructor(node); 347 return _getConstructor(node);
335 } else { 348 } else {
336 return _getMethod(node); 349 return _getMethod(node);
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 ProgramEnv get _env; 617 ProgramEnv get _env;
605 List<LibraryEntity> get _libraryList; 618 List<LibraryEntity> get _libraryList;
606 List<LibraryEnv> get _libraryEnvs; 619 List<LibraryEnv> get _libraryEnvs;
607 List<LibraryData> get _libraryData; 620 List<LibraryData> get _libraryData;
608 List<ClassEntity> get _classList; 621 List<ClassEntity> get _classList;
609 List<ClassEnv> get _classEnvs; 622 List<ClassEnv> get _classEnvs;
610 List<ClassData> get _classData; 623 List<ClassData> get _classData;
611 List<MemberEntity> get _memberList; 624 List<MemberEntity> get _memberList;
612 List<MemberData> get _memberData; 625 List<MemberData> get _memberData;
613 List<TypeVariableEntity> get _typeVariableList; 626 List<TypeVariableEntity> get _typeVariableList;
627 List<TypedefEntity> get _typedefList;
628 List<TypedefData> get _typedefData;
Siggi Cherem (dart-lang) 2017/08/09 16:38:07 given we have so many of these now, it might be wo
Johnni Winther 2017/08/10 08:18:34 Acknowledged. Will do in a follow-up.
614 629
615 Map<ir.Library, IndexedLibrary> _libraryMap = <ir.Library, IndexedLibrary>{}; 630 Map<ir.Library, IndexedLibrary> _libraryMap = <ir.Library, IndexedLibrary>{};
616 Map<ir.Class, IndexedClass> _classMap = <ir.Class, IndexedClass>{}; 631 Map<ir.Class, IndexedClass> _classMap = <ir.Class, IndexedClass>{};
632 Map<ir.Typedef, IndexedTypedef> _typedefMap = <ir.Typedef, IndexedTypedef>{};
617 Map<ir.TypeParameter, IndexedTypeVariable> _typeVariableMap = 633 Map<ir.TypeParameter, IndexedTypeVariable> _typeVariableMap =
618 <ir.TypeParameter, IndexedTypeVariable>{}; 634 <ir.TypeParameter, IndexedTypeVariable>{};
619 Map<ir.Member, IndexedConstructor> _constructorMap = 635 Map<ir.Member, IndexedConstructor> _constructorMap =
620 <ir.Member, IndexedConstructor>{}; 636 <ir.Member, IndexedConstructor>{};
621 Map<ir.Procedure, IndexedFunction> _methodMap = 637 Map<ir.Procedure, IndexedFunction> _methodMap =
622 <ir.Procedure, IndexedFunction>{}; 638 <ir.Procedure, IndexedFunction>{};
623 Map<ir.Field, IndexedField> _fieldMap = <ir.Field, IndexedField>{}; 639 Map<ir.Field, IndexedField> _fieldMap = <ir.Field, IndexedField>{};
624 Map<ir.TreeNode, Local> _localFunctionMap = <ir.TreeNode, Local>{}; 640 Map<ir.TreeNode, Local> _localFunctionMap = <ir.TreeNode, Local>{};
625 641
626 Name getName(ir.Name node); 642 Name getName(ir.Name node);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 _classEnvs.add(classEnv); 680 _classEnvs.add(classEnv);
665 ClassEntity cls = createClass(library, _classList.length, node.name, 681 ClassEntity cls = createClass(library, _classList.length, node.name,
666 isAbstract: node.isAbstract); 682 isAbstract: node.isAbstract);
667 _classData 683 _classData
668 .add(new ClassData(node, new RegularClassDefinition(cls, node))); 684 .add(new ClassData(node, new RegularClassDefinition(cls, node)));
669 _classList.add(cls); 685 _classList.add(cls);
670 return cls; 686 return cls;
671 }); 687 });
672 } 688 }
673 689
690 TypedefEntity _getTypedef(ir.Typedef node) {
691 return _typedefMap.putIfAbsent(node, () {
692 IndexedLibrary library = _getLibrary(node.enclosingLibrary);
693 TypedefEntity typedef =
694 createTypedef(library, _typedefList.length, node.name);
695 TypedefType typedefType = new TypedefType(
696 typedef,
697 new List<DartType>.filled(
698 node.typeParameters.length, const DynamicType()));
699 _typedefData.add(new TypedefData(node, typedef, typedefType));
700 _typedefList.add(typedef);
701 return typedef;
702 });
703 }
704
674 TypeVariableEntity _getTypeVariable(ir.TypeParameter node) { 705 TypeVariableEntity _getTypeVariable(ir.TypeParameter node) {
675 return _typeVariableMap.putIfAbsent(node, () { 706 return _typeVariableMap.putIfAbsent(node, () {
676 if (node.parent is ir.Class) { 707 if (node.parent is ir.Class) {
677 int typeVariableIndex = _typeVariableList.length; 708 int typeVariableIndex = _typeVariableList.length;
678 ir.Class cls = node.parent; 709 ir.Class cls = node.parent;
679 int index = cls.typeParameters.indexOf(node); 710 int index = cls.typeParameters.indexOf(node);
680 TypeVariableEntity typeVariable = createTypeVariable( 711 TypeVariableEntity typeVariable = createTypeVariable(
681 typeVariableIndex, _getClass(cls), node.name, index); 712 typeVariableIndex, _getClass(cls), node.name, index);
682 _typeVariableList.add(typeVariable); 713 _typeVariableList.add(typeVariable);
683 return typeVariable; 714 return typeVariable;
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 node.namedParameters.map((p) => p.name).toList()..sort(); 879 node.namedParameters.map((p) => p.name).toList()..sort();
849 return new ParameterStructure( 880 return new ParameterStructure(
850 requiredParameters, positionalParameters, namedParameters); 881 requiredParameters, positionalParameters, namedParameters);
851 } 882 }
852 883
853 IndexedLibrary createLibrary(int libraryIndex, String name, Uri canonicalUri); 884 IndexedLibrary createLibrary(int libraryIndex, String name, Uri canonicalUri);
854 885
855 IndexedClass createClass(LibraryEntity library, int classIndex, String name, 886 IndexedClass createClass(LibraryEntity library, int classIndex, String name,
856 {bool isAbstract}); 887 {bool isAbstract});
857 888
889 IndexedTypedef createTypedef(
890 LibraryEntity library, int typedefIndex, String name);
891
858 TypeVariableEntity createTypeVariable( 892 TypeVariableEntity createTypeVariable(
859 int typeVariableIndex, Entity typeDeclaration, String name, int index); 893 int typeVariableIndex, Entity typeDeclaration, String name, int index);
860 894
861 IndexedConstructor createGenerativeConstructor( 895 IndexedConstructor createGenerativeConstructor(
862 int memberIndex, 896 int memberIndex,
863 ClassEntity enclosingClass, 897 ClassEntity enclosingClass,
864 Name name, 898 Name name,
865 ParameterStructure parameterStructure, 899 ParameterStructure parameterStructure,
866 {bool isExternal, 900 {bool isExternal,
867 bool isConst}); 901 bool isConst});
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 IndexedLibrary createLibrary( 938 IndexedLibrary createLibrary(
905 int libraryIndex, String name, Uri canonicalUri) { 939 int libraryIndex, String name, Uri canonicalUri) {
906 return new KLibrary(libraryIndex, name, canonicalUri); 940 return new KLibrary(libraryIndex, name, canonicalUri);
907 } 941 }
908 942
909 IndexedClass createClass(LibraryEntity library, int classIndex, String name, 943 IndexedClass createClass(LibraryEntity library, int classIndex, String name,
910 {bool isAbstract}) { 944 {bool isAbstract}) {
911 return new KClass(library, classIndex, name, isAbstract: isAbstract); 945 return new KClass(library, classIndex, name, isAbstract: isAbstract);
912 } 946 }
913 947
948 @override
949 IndexedTypedef createTypedef(
950 LibraryEntity library, int typedefIndex, String name) {
951 throw new UnsupportedError('KElementCreatorMixin.createTypedef');
952 }
953
914 TypeVariableEntity createTypeVariable( 954 TypeVariableEntity createTypeVariable(
915 int typeVariableIndex, Entity typeDeclaration, String name, int index) { 955 int typeVariableIndex, Entity typeDeclaration, String name, int index) {
916 return new KTypeVariable(typeVariableIndex, typeDeclaration, name, index); 956 return new KTypeVariable(typeVariableIndex, typeDeclaration, name, index);
917 } 957 }
918 958
919 IndexedConstructor createGenerativeConstructor( 959 IndexedConstructor createGenerativeConstructor(
920 int memberIndex, 960 int memberIndex,
921 ClassEntity enclosingClass, 961 ClassEntity enclosingClass,
922 Name name, 962 Name name,
923 ParameterStructure parameterStructure, 963 ParameterStructure parameterStructure,
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after
2117 /// 2157 ///
2118 /// These names are not used in generated code, just as element name. 2158 /// These names are not used in generated code, just as element name.
2119 String _getClosureVariableName(String name, int id) { 2159 String _getClosureVariableName(String name, int id) {
2120 return "_captured_${name}_$id"; 2160 return "_captured_${name}_$id";
2121 } 2161 }
2122 2162
2123 String getDeferredUri(ir.LibraryDependency node) { 2163 String getDeferredUri(ir.LibraryDependency node) {
2124 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri'); 2164 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri');
2125 } 2165 }
2126 } 2166 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698