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

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

Issue 2882523003: Add forEachLibraryMember and forEachConstructor to ElementEnvironment (Closed)
Patch Set: Updated cf. comments. Created 3 years, 7 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 '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 }); 152 });
153 } 153 }
154 154
155 MemberEntity lookupLibraryMember(KLibrary library, String name, 155 MemberEntity lookupLibraryMember(KLibrary library, String name,
156 {bool setter: false}) { 156 {bool setter: false}) {
157 _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 157 _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
158 ir.Member member = libraryEnv.lookupMember(name, setter: setter); 158 ir.Member member = libraryEnv.lookupMember(name, setter: setter);
159 return member != null ? getMember(member) : null; 159 return member != null ? getMember(member) : null;
160 } 160 }
161 161
162 void _forEachLibraryMember(KLibrary library, void f(MemberEntity member)) {
163 _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
164 libraryEnv.forEachMember((ir.Member node) {
165 f(getMember(node));
166 });
167 }
168
162 ClassEntity lookupClass(KLibrary library, String name) { 169 ClassEntity lookupClass(KLibrary library, String name) {
163 _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 170 _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
164 _KClassEnv classEnv = libraryEnv.lookupClass(name); 171 _KClassEnv classEnv = libraryEnv.lookupClass(name);
165 if (classEnv != null) { 172 if (classEnv != null) {
166 return _getClass(classEnv.cls, classEnv); 173 return _getClass(classEnv.cls, classEnv);
167 } 174 }
168 return null; 175 return null;
169 } 176 }
170 177
171 void _forEachClass(KLibrary library, void f(ClassEntity cls)) { 178 void _forEachClass(KLibrary library, void f(ClassEntity cls)) {
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 while (cls != null) { 530 while (cls != null) {
524 _KClassEnv env = _classEnvs[cls.classIndex]; 531 _KClassEnv env = _classEnvs[cls.classIndex];
525 _ensureSupertypes(cls, env); 532 _ensureSupertypes(cls, env);
526 if (env.mixedInType != null) { 533 if (env.mixedInType != null) {
527 f(env.mixedInType.element); 534 f(env.mixedInType.element);
528 } 535 }
529 cls = env.supertype?.element; 536 cls = env.supertype?.element;
530 } 537 }
531 } 538 }
532 539
540 void _forEachConstructor(KClass cls, void f(ConstructorEntity member)) {
541 _KClassEnv env = _classEnvs[cls.classIndex];
542 env.forEachConstructor((ir.Member member) {
543 f(getConstructor(member));
544 });
545 }
546
533 void _forEachClassMember( 547 void _forEachClassMember(
534 KClass cls, void f(ClassEntity cls, MemberEntity member)) { 548 KClass cls, void f(ClassEntity cls, MemberEntity member)) {
535 _KClassEnv env = _classEnvs[cls.classIndex]; 549 _KClassEnv env = _classEnvs[cls.classIndex];
536 env.forEachMember((ir.Member member) { 550 env.forEachMember((ir.Member member) {
537 f(cls, getMember(member)); 551 f(cls, getMember(member));
538 }); 552 });
539 _ensureSupertypes(cls, env); 553 _ensureSupertypes(cls, env);
540 if (env.supertype != null) { 554 if (env.supertype != null) {
541 _forEachClassMember(env.supertype.element, f); 555 _forEachClassMember(env.supertype.element, f);
542 } 556 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 _ensureClassMap(); 716 _ensureClassMap();
703 return _classMap[name]; 717 return _classMap[name];
704 } 718 }
705 719
706 /// Calls [f] for each class in this library. 720 /// Calls [f] for each class in this library.
707 void forEachClass(void f(_KClassEnv cls)) { 721 void forEachClass(void f(_KClassEnv cls)) {
708 _ensureClassMap(); 722 _ensureClassMap();
709 _classMap.values.forEach(f); 723 _classMap.values.forEach(f);
710 } 724 }
711 725
712 /// Return the [ir.Member] for the member [name] in [library]. 726 void _ensureMemberMaps() {
713 ir.Member lookupMember(String name, {bool setter: false}) {
714 if (_memberMap == null) { 727 if (_memberMap == null) {
715 _memberMap = <String, ir.Member>{}; 728 _memberMap = <String, ir.Member>{};
716 _setterMap = <String, ir.Member>{}; 729 _setterMap = <String, ir.Member>{};
717 for (ir.Member member in library.members) { 730 for (ir.Member member in library.members) {
718 if (member is ir.Procedure) { 731 if (member is ir.Procedure) {
719 if (member.kind == ir.ProcedureKind.Setter) { 732 if (member.kind == ir.ProcedureKind.Setter) {
720 _setterMap[member.name.name] = member; 733 _setterMap[member.name.name] = member;
721 } else { 734 } else {
722 _memberMap[member.name.name] = member; 735 _memberMap[member.name.name] = member;
723 } 736 }
724 } else if (member is ir.Field) { 737 } else if (member is ir.Field) {
725 _memberMap[member.name.name] = member; 738 _memberMap[member.name.name] = member;
726 if (member.isMutable) { 739 if (member.isMutable) {
727 _setterMap[member.name.name] = member; 740 _setterMap[member.name.name] = member;
728 } 741 }
729 } else { 742 } else {
730 throw new SpannableAssertionFailure( 743 throw new SpannableAssertionFailure(
731 NO_LOCATION_SPANNABLE, "Unexpected library member node: $member"); 744 NO_LOCATION_SPANNABLE, "Unexpected library member node: $member");
732 } 745 }
733 } 746 }
734 } 747 }
735 return _memberMap[name]; 748 }
749
750 /// Return the [ir.Member] for the member [name] in [library].
751 ir.Member lookupMember(String name, {bool setter: false}) {
752 _ensureMemberMaps();
753 return setter ? _setterMap[name] : _memberMap[name];
754 }
755
756 void forEachMember(void f(ir.Member member)) {
757 _ensureMemberMaps();
758 _memberMap.values.forEach(f);
759 for (ir.Member member in _setterMap.values) {
760 if (member is ir.Procedure) {
761 f(member);
762 } else {
763 // Skip fields; these are also in _memberMap.
764 }
765 }
736 } 766 }
737 } 767 }
738 768
739 /// Environment for fast lookup of class members. 769 /// Environment for fast lookup of class members.
740 class _KClassEnv { 770 class _KClassEnv {
741 final ir.Class cls; 771 final ir.Class cls;
742 final bool isUnnamedMixinApplication; 772 final bool isUnnamedMixinApplication;
743 773
744 InterfaceType thisType; 774 InterfaceType thisType;
745 InterfaceType rawType; 775 InterfaceType rawType;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 _ensureMaps(); 834 _ensureMaps();
805 return setter ? _setterMap[name] : _memberMap[name]; 835 return setter ? _setterMap[name] : _memberMap[name];
806 } 836 }
807 837
808 /// Return the [ir.Member] for the member [name] in [library]. 838 /// Return the [ir.Member] for the member [name] in [library].
809 ir.Member lookupConstructor(String name) { 839 ir.Member lookupConstructor(String name) {
810 _ensureMaps(); 840 _ensureMaps();
811 return _constructorMap[name]; 841 return _constructorMap[name];
812 } 842 }
813 843
814 void forEachMember(f(ir.Member member)) { 844 void forEachMember(void f(ir.Member member)) {
815 _ensureMaps(); 845 _ensureMaps();
816 _memberMap.values.forEach(f); 846 _memberMap.values.forEach(f);
817 for (ir.Member member in _setterMap.values) { 847 for (ir.Member member in _setterMap.values) {
818 if (member is ir.Procedure) { 848 if (member is ir.Procedure) {
819 f(member); 849 f(member);
820 } else { 850 } else {
821 // Skip fields; these are also in _memberMap. 851 // Skip fields; these are also in _memberMap.
822 } 852 }
823 } 853 }
824 } 854 }
825 855
856 void forEachConstructor(void f(ir.Member member)) {
857 _ensureMaps();
858 _constructorMap.values.forEach(f);
859 }
860
826 Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) { 861 Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) {
827 return _metadata ??= elementMap.getMetadata(cls.annotations); 862 return _metadata ??= elementMap.getMetadata(cls.annotations);
828 } 863 }
829 } 864 }
830 865
831 class _MemberData { 866 class _MemberData {
832 final ir.Member node; 867 final ir.Member node;
833 Iterable<ConstantValue> _metadata; 868 Iterable<ConstantValue> _metadata;
834 869
835 _MemberData(this.node); 870 _MemberData(this.node);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 elementMap._forEachMixin(cls, f); 1048 elementMap._forEachMixin(cls, f);
1014 } 1049 }
1015 1050
1016 @override 1051 @override
1017 void forEachClassMember( 1052 void forEachClassMember(
1018 ClassEntity cls, void f(ClassEntity declarer, MemberEntity member)) { 1053 ClassEntity cls, void f(ClassEntity declarer, MemberEntity member)) {
1019 elementMap._forEachClassMember(cls, f); 1054 elementMap._forEachClassMember(cls, f);
1020 } 1055 }
1021 1056
1022 @override 1057 @override
1058 void forEachConstructor(
1059 ClassEntity cls, void f(ConstructorEntity constructor)) {
1060 elementMap._forEachConstructor(cls, f);
1061 }
1062
1063 @override
1064 void forEachLibraryMember(
1065 LibraryEntity library, void f(MemberEntity member)) {
1066 elementMap._forEachLibraryMember(library, f);
1067 }
1068
1069 @override
1023 MemberEntity lookupLibraryMember(LibraryEntity library, String name, 1070 MemberEntity lookupLibraryMember(LibraryEntity library, String name,
1024 {bool setter: false, bool required: false}) { 1071 {bool setter: false, bool required: false}) {
1025 MemberEntity member = 1072 MemberEntity member =
1026 elementMap.lookupLibraryMember(library, name, setter: setter); 1073 elementMap.lookupLibraryMember(library, name, setter: setter);
1027 if (member == null && required) { 1074 if (member == null && required) {
1028 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, 1075 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE,
1029 "The member '${name}' was not found in library '${library.name}'."); 1076 "The member '${name}' was not found in library '${library.name}'.");
1030 } 1077 }
1031 return member; 1078 return member;
1032 } 1079 }
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 return node.isExternal && 1408 return node.isExternal &&
1362 !elementMap.isForeignLibrary(node.enclosingLibrary); 1409 !elementMap.isForeignLibrary(node.enclosingLibrary);
1363 } 1410 }
1364 1411
1365 @override 1412 @override
1366 bool isJsInteropMember(MemberEntity element) { 1413 bool isJsInteropMember(MemberEntity element) {
1367 // TODO(johnniwinther): Compute this. 1414 // TODO(johnniwinther): Compute this.
1368 return false; 1415 return false;
1369 } 1416 }
1370 } 1417 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/common_elements.dart ('k') | pkg/compiler/lib/src/resolution/resolution_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698