| 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 '../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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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; |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |