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

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

Issue 2858223004: Rename KernelElementAdapter and element_adapter.dart to IrToElementMap and ir_map.dart (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 13 matching lines...) Expand all
24 import '../js_backend/constant_system_javascript.dart'; 24 import '../js_backend/constant_system_javascript.dart';
25 import '../js_backend/native_data.dart'; 25 import '../js_backend/native_data.dart';
26 import '../js_backend/no_such_method_registry.dart'; 26 import '../js_backend/no_such_method_registry.dart';
27 import '../native/native.dart' as native; 27 import '../native/native.dart' as native;
28 import '../native/resolver.dart'; 28 import '../native/resolver.dart';
29 import '../ordered_typeset.dart'; 29 import '../ordered_typeset.dart';
30 import '../ssa/kernel_impact.dart'; 30 import '../ssa/kernel_impact.dart';
31 import '../universe/call_structure.dart'; 31 import '../universe/call_structure.dart';
32 import '../universe/world_builder.dart'; 32 import '../universe/world_builder.dart';
33 import '../util/util.dart' show Link, LinkBuilder; 33 import '../util/util.dart' show Link, LinkBuilder;
34 import 'element_adapter.dart'; 34 import 'element_map.dart';
35 import 'elements.dart'; 35 import 'elements.dart';
36 36
37 part 'native_basic_data.dart'; 37 part 'native_basic_data.dart';
38 part 'no_such_method_resolver.dart'; 38 part 'no_such_method_resolver.dart';
39 part 'types.dart'; 39 part 'types.dart';
40 40
41 /// Element builder used for creating elements and types corresponding to Kernel 41 /// Element builder used for creating elements and types corresponding to Kernel
42 /// IR nodes. 42 /// IR nodes.
43 class KernelToElementMap extends KernelElementAdapterMixin { 43 class KernelToElementMapImpl extends KernelToElementMapMixin {
44 final Environment _environment; 44 final Environment _environment;
45 CommonElements _commonElements; 45 CommonElements _commonElements;
46 native.BehaviorBuilder _nativeBehaviorBuilder; 46 native.BehaviorBuilder _nativeBehaviorBuilder;
47 final DiagnosticReporter reporter; 47 final DiagnosticReporter reporter;
48 ElementEnvironment _elementEnvironment; 48 ElementEnvironment _elementEnvironment;
49 DartTypeConverter _typeConverter; 49 DartTypeConverter _typeConverter;
50 KernelConstantEnvironment _constantEnvironment; 50 KernelConstantEnvironment _constantEnvironment;
51 _KernelDartTypes _types; 51 _KernelDartTypes _types;
52 52
53 /// Library environment. Used for fast lookup. 53 /// Library environment. Used for fast lookup.
(...skipping 14 matching lines...) Expand all
68 68
69 List<_MemberData> _memberList = <_MemberData>[]; 69 List<_MemberData> _memberList = <_MemberData>[];
70 70
71 Map<ir.Member, KConstructor> _constructorMap = <ir.Member, KConstructor>{}; 71 Map<ir.Member, KConstructor> _constructorMap = <ir.Member, KConstructor>{};
72 Map<ir.Procedure, KFunction> _methodMap = <ir.Procedure, KFunction>{}; 72 Map<ir.Procedure, KFunction> _methodMap = <ir.Procedure, KFunction>{};
73 Map<ir.Field, KField> _fieldMap = <ir.Field, KField>{}; 73 Map<ir.Field, KField> _fieldMap = <ir.Field, KField>{};
74 74
75 Map<ir.TreeNode, KLocalFunction> _localFunctionMap = 75 Map<ir.TreeNode, KLocalFunction> _localFunctionMap =
76 <ir.TreeNode, KLocalFunction>{}; 76 <ir.TreeNode, KLocalFunction>{};
77 77
78 KernelToElementMap(this.reporter, this._environment) { 78 KernelToElementMapImpl(this.reporter, this._environment) {
79 _elementEnvironment = new KernelElementEnvironment(this); 79 _elementEnvironment = new KernelElementEnvironment(this);
80 _commonElements = new CommonElements(_elementEnvironment); 80 _commonElements = new CommonElements(_elementEnvironment);
81 _constantEnvironment = new KernelConstantEnvironment(this); 81 _constantEnvironment = new KernelConstantEnvironment(this);
82 _nativeBehaviorBuilder = new KernelBehaviorBuilder(_commonElements); 82 _nativeBehaviorBuilder = new KernelBehaviorBuilder(_commonElements);
83 _types = new _KernelDartTypes(this); 83 _types = new _KernelDartTypes(this);
84 _typeConverter = new DartTypeConverter(this); 84 _typeConverter = new DartTypeConverter(this);
85 } 85 }
86 86
87 /// Adds libraries in [program] to the set of libraries. 87 /// Adds libraries in [program] to the set of libraries.
88 /// 88 ///
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 _memberMap.values.forEach(f); 811 _memberMap.values.forEach(f);
812 for (ir.Member member in _setterMap.values) { 812 for (ir.Member member in _setterMap.values) {
813 if (member is ir.Procedure) { 813 if (member is ir.Procedure) {
814 f(member); 814 f(member);
815 } else { 815 } else {
816 // Skip fields; these are also in _memberMap. 816 // Skip fields; these are also in _memberMap.
817 } 817 }
818 } 818 }
819 } 819 }
820 820
821 Iterable<ConstantValue> getMetadata(KernelToElementMap elementMap) { 821 Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) {
822 return _metadata ??= elementMap.getMetadata(cls.annotations); 822 return _metadata ??= elementMap.getMetadata(cls.annotations);
823 } 823 }
824 } 824 }
825 825
826 class _MemberData { 826 class _MemberData {
827 final ir.Member node; 827 final ir.Member node;
828 Iterable<ConstantValue> _metadata; 828 Iterable<ConstantValue> _metadata;
829 829
830 _MemberData(this.node); 830 _MemberData(this.node);
831 831
832 ResolutionImpact getWorldImpact(KernelToElementMap elementMap) { 832 ResolutionImpact getWorldImpact(KernelToElementMapImpl elementMap) {
833 return buildKernelImpact(node, elementMap); 833 return buildKernelImpact(node, elementMap);
834 } 834 }
835 835
836 Iterable<ConstantValue> getMetadata(KernelToElementMap elementMap) { 836 Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) {
837 return _metadata ??= elementMap.getMetadata(node.annotations); 837 return _metadata ??= elementMap.getMetadata(node.annotations);
838 } 838 }
839 } 839 }
840 840
841 class _FunctionData extends _MemberData { 841 class _FunctionData extends _MemberData {
842 final ir.FunctionNode functionNode; 842 final ir.FunctionNode functionNode;
843 FunctionType _type; 843 FunctionType _type;
844 CallStructure _callStructure; 844 CallStructure _callStructure;
845 845
846 _FunctionData(ir.Member node, this.functionNode) : super(node); 846 _FunctionData(ir.Member node, this.functionNode) : super(node);
847 847
848 FunctionType getFunctionType(KernelToElementMap elementMap) { 848 FunctionType getFunctionType(KernelToElementMapImpl elementMap) {
849 return _type ??= elementMap.getFunctionType(functionNode); 849 return _type ??= elementMap.getFunctionType(functionNode);
850 } 850 }
851 851
852 CallStructure get callStructure { 852 CallStructure get callStructure {
853 return _callStructure ??= new CallStructure( 853 return _callStructure ??= new CallStructure(
854 functionNode.positionalParameters.length + 854 functionNode.positionalParameters.length +
855 functionNode.namedParameters.length, 855 functionNode.namedParameters.length,
856 functionNode.namedParameters.map((d) => d.name).toList()); 856 functionNode.namedParameters.map((d) => d.name).toList());
857 } 857 }
858 } 858 }
859 859
860 class _ConstructorData extends _FunctionData { 860 class _ConstructorData extends _FunctionData {
861 ConstantConstructor _constantConstructor; 861 ConstantConstructor _constantConstructor;
862 862
863 _ConstructorData(ir.Member node, ir.FunctionNode functionNode) 863 _ConstructorData(ir.Member node, ir.FunctionNode functionNode)
864 : super(node, functionNode); 864 : super(node, functionNode);
865 865
866 ConstantConstructor getConstructorConstant( 866 ConstantConstructor getConstructorConstant(
867 KernelToElementMap elementMap, KConstructor constructor) { 867 KernelToElementMapImpl elementMap, KConstructor constructor) {
868 if (_constantConstructor == null) { 868 if (_constantConstructor == null) {
869 if (node is ir.Constructor && constructor.isConst) { 869 if (node is ir.Constructor && constructor.isConst) {
870 _constantConstructor = 870 _constantConstructor =
871 new Constantifier(elementMap).computeConstantConstructor(node); 871 new Constantifier(elementMap).computeConstantConstructor(node);
872 } else { 872 } else {
873 throw new SpannableAssertionFailure( 873 throw new SpannableAssertionFailure(
874 constructor, 874 constructor,
875 "Unexpected constructor $constructor in " 875 "Unexpected constructor $constructor in "
876 "KernelWorldBuilder._getConstructorConstant"); 876 "KernelWorldBuilder._getConstructorConstant");
877 } 877 }
878 } 878 }
879 return _constantConstructor; 879 return _constantConstructor;
880 } 880 }
881 } 881 }
882 882
883 class _FieldData extends _MemberData { 883 class _FieldData extends _MemberData {
884 ConstantExpression _constant; 884 ConstantExpression _constant;
885 885
886 _FieldData(ir.Field node) : super(node); 886 _FieldData(ir.Field node) : super(node);
887 887
888 ir.Field get node => super.node; 888 ir.Field get node => super.node;
889 889
890 ConstantExpression getFieldConstant( 890 ConstantExpression getFieldConstant(
891 KernelToElementMap elementMap, KField field) { 891 KernelToElementMapImpl elementMap, KField field) {
892 if (_constant == null) { 892 if (_constant == null) {
893 if (node.isConst) { 893 if (node.isConst) {
894 _constant = new Constantifier(elementMap).visit(node.initializer); 894 _constant = new Constantifier(elementMap).visit(node.initializer);
895 } else { 895 } else {
896 throw new SpannableAssertionFailure( 896 throw new SpannableAssertionFailure(
897 field, 897 field,
898 "Unexpected field $field in " 898 "Unexpected field $field in "
899 "KernelWorldBuilder._getConstructorConstant"); 899 "KernelWorldBuilder._getConstructorConstant");
900 } 900 }
901 } 901 }
902 return _constant; 902 return _constant;
903 } 903 }
904 } 904 }
905 905
906 class KernelElementEnvironment implements ElementEnvironment { 906 class KernelElementEnvironment implements ElementEnvironment {
907 final KernelToElementMap elementMap; 907 final KernelToElementMapImpl elementMap;
908 908
909 KernelElementEnvironment(this.elementMap); 909 KernelElementEnvironment(this.elementMap);
910 910
911 @override 911 @override
912 DartType get dynamicType => const DynamicType(); 912 DartType get dynamicType => const DynamicType();
913 913
914 @override 914 @override
915 LibraryEntity get mainLibrary => elementMap._mainLibrary; 915 LibraryEntity get mainLibrary => elementMap._mainLibrary;
916 916
917 @override 917 @override
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 1071
1072 @override 1072 @override
1073 Iterable<ConstantValue> getMemberMetadata(KMember member) { 1073 Iterable<ConstantValue> getMemberMetadata(KMember member) {
1074 _MemberData memberData = elementMap._memberList[member.memberIndex]; 1074 _MemberData memberData = elementMap._memberList[member.memberIndex];
1075 return memberData.getMetadata(elementMap); 1075 return memberData.getMetadata(elementMap);
1076 } 1076 }
1077 } 1077 }
1078 1078
1079 /// Visitor that converts kernel dart types into [DartType]. 1079 /// Visitor that converts kernel dart types into [DartType].
1080 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { 1080 class DartTypeConverter extends ir.DartTypeVisitor<DartType> {
1081 final KernelToElementMap elementAdapter; 1081 final KernelToElementMapImpl elementAdapter;
1082 bool topLevel = true; 1082 bool topLevel = true;
1083 1083
1084 DartTypeConverter(this.elementAdapter); 1084 DartTypeConverter(this.elementAdapter);
1085 1085
1086 DartType convert(ir.DartType type) { 1086 DartType convert(ir.DartType type) {
1087 topLevel = true; 1087 topLevel = true;
1088 return type.accept(this); 1088 return type.accept(this);
1089 } 1089 }
1090 1090
1091 /// Visit a inner type. 1091 /// Visit a inner type.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 1170
1171 @override 1171 @override
1172 NativeData get nativeData { 1172 NativeData get nativeData {
1173 throw new UnimplementedError("KernelNativeBehaviorComputer.nativeData"); 1173 throw new UnimplementedError("KernelNativeBehaviorComputer.nativeData");
1174 } 1174 }
1175 } 1175 }
1176 1176
1177 /// Constant environment mapping [ConstantExpression]s to [ConstantValue]s using 1177 /// Constant environment mapping [ConstantExpression]s to [ConstantValue]s using
1178 /// [_EvaluationEnvironment] for the evaluation. 1178 /// [_EvaluationEnvironment] for the evaluation.
1179 class KernelConstantEnvironment implements ConstantEnvironment { 1179 class KernelConstantEnvironment implements ConstantEnvironment {
1180 KernelToElementMap _worldBuilder; 1180 KernelToElementMapImpl _worldBuilder;
1181 Map<ConstantExpression, ConstantValue> _valueMap = 1181 Map<ConstantExpression, ConstantValue> _valueMap =
1182 <ConstantExpression, ConstantValue>{}; 1182 <ConstantExpression, ConstantValue>{};
1183 1183
1184 KernelConstantEnvironment(this._worldBuilder); 1184 KernelConstantEnvironment(this._worldBuilder);
1185 1185
1186 @override 1186 @override
1187 ConstantSystem get constantSystem => const JavaScriptConstantSystem(); 1187 ConstantSystem get constantSystem => const JavaScriptConstantSystem();
1188 1188
1189 @override 1189 @override
1190 ConstantValue getConstantValueForVariable(VariableElement element) { 1190 ConstantValue getConstantValueForVariable(VariableElement element) {
(...skipping 11 matching lines...) Expand all
1202 1202
1203 @override 1203 @override
1204 bool hasConstantValue(ConstantExpression expression) { 1204 bool hasConstantValue(ConstantExpression expression) {
1205 throw new UnimplementedError("KernelConstantEnvironment.hasConstantValue"); 1205 throw new UnimplementedError("KernelConstantEnvironment.hasConstantValue");
1206 } 1206 }
1207 } 1207 }
1208 1208
1209 /// Evaluation environment used for computing [ConstantValue]s for 1209 /// Evaluation environment used for computing [ConstantValue]s for
1210 /// kernel based [ConstantExpression]s. 1210 /// kernel based [ConstantExpression]s.
1211 class _EvaluationEnvironment implements EvaluationEnvironment { 1211 class _EvaluationEnvironment implements EvaluationEnvironment {
1212 final KernelToElementMap _elementMap; 1212 final KernelToElementMapImpl _elementMap;
1213 1213
1214 _EvaluationEnvironment(this._elementMap); 1214 _EvaluationEnvironment(this._elementMap);
1215 1215
1216 @override 1216 @override
1217 CommonElements get commonElements => _elementMap.commonElements; 1217 CommonElements get commonElements => _elementMap.commonElements;
1218 1218
1219 @override 1219 @override
1220 InterfaceType substByContext(InterfaceType base, InterfaceType target) { 1220 InterfaceType substByContext(InterfaceType base, InterfaceType target) {
1221 return _elementMap._substByContext(base, target); 1221 return _elementMap._substByContext(base, target);
1222 } 1222 }
(...skipping 13 matching lines...) Expand all
1236 throw new UnimplementedError("_EvaluationEnvironment.getLocalConstant"); 1236 throw new UnimplementedError("_EvaluationEnvironment.getLocalConstant");
1237 } 1237 }
1238 1238
1239 @override 1239 @override
1240 String readFromEnvironment(String name) { 1240 String readFromEnvironment(String name) {
1241 return _elementMap._environment.valueOf(name); 1241 return _elementMap._environment.valueOf(name);
1242 } 1242 }
1243 } 1243 }
1244 1244
1245 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase { 1245 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase {
1246 final KernelToElementMap elementMap; 1246 final KernelToElementMapImpl elementMap;
1247 1247
1248 KernelResolutionWorldBuilder(this.elementMap, NativeBasicData nativeBasicData, 1248 KernelResolutionWorldBuilder(this.elementMap, NativeBasicData nativeBasicData,
1249 SelectorConstraintsStrategy selectorConstraintsStrategy) 1249 SelectorConstraintsStrategy selectorConstraintsStrategy)
1250 : super(elementMap.elementEnvironment, elementMap.commonElements, 1250 : super(elementMap.elementEnvironment, elementMap.commonElements,
1251 nativeBasicData, selectorConstraintsStrategy); 1251 nativeBasicData, selectorConstraintsStrategy);
1252 1252
1253 @override 1253 @override
1254 Iterable<InterfaceType> getSupertypes(ClassEntity cls) { 1254 Iterable<InterfaceType> getSupertypes(ClassEntity cls) {
1255 return elementMap._getOrderedTypeSet(cls).supertypes; 1255 return elementMap._getOrderedTypeSet(cls).supertypes;
1256 } 1256 }
(...skipping 22 matching lines...) Expand all
1279 1279
1280 @override 1280 @override
1281 bool validateClass(ClassEntity cls) => true; 1281 bool validateClass(ClassEntity cls) => true;
1282 1282
1283 @override 1283 @override
1284 bool checkClass(ClassEntity cls) => true; 1284 bool checkClass(ClassEntity cls) => true;
1285 } 1285 }
1286 1286
1287 // Interface for testing equivalence of Kernel-based entities. 1287 // Interface for testing equivalence of Kernel-based entities.
1288 class WorldDeconstructionForTesting { 1288 class WorldDeconstructionForTesting {
1289 final KernelToElementMap elementMap; 1289 final KernelToElementMapImpl elementMap;
1290 1290
1291 WorldDeconstructionForTesting(this.elementMap); 1291 WorldDeconstructionForTesting(this.elementMap);
1292 1292
1293 KClass getSuperclassForClass(KClass cls) { 1293 KClass getSuperclassForClass(KClass cls) {
1294 _KClassEnv env = elementMap._classEnvs[cls.classIndex]; 1294 _KClassEnv env = elementMap._classEnvs[cls.classIndex];
1295 ir.Supertype supertype = env.cls.supertype; 1295 ir.Supertype supertype = env.cls.supertype;
1296 if (supertype == null) return null; 1296 if (supertype == null) return null;
1297 return elementMap.getClass(supertype.classNode); 1297 return elementMap.getClass(supertype.classNode);
1298 } 1298 }
1299 1299
1300 bool isUnnamedMixinApplication(KClass cls) { 1300 bool isUnnamedMixinApplication(KClass cls) {
1301 return elementMap._isUnnamedMixinApplication(cls); 1301 return elementMap._isUnnamedMixinApplication(cls);
1302 } 1302 }
1303 1303
1304 InterfaceType getMixinTypeForClass(KClass cls) { 1304 InterfaceType getMixinTypeForClass(KClass cls) {
1305 _KClassEnv env = elementMap._classEnvs[cls.classIndex]; 1305 _KClassEnv env = elementMap._classEnvs[cls.classIndex];
1306 ir.Supertype mixedInType = env.cls.mixedInType; 1306 ir.Supertype mixedInType = env.cls.mixedInType;
1307 if (mixedInType == null) return null; 1307 if (mixedInType == null) return null;
1308 return elementMap.createInterfaceType( 1308 return elementMap.createInterfaceType(
1309 mixedInType.classNode, mixedInType.typeArguments); 1309 mixedInType.classNode, mixedInType.typeArguments);
1310 } 1310 }
1311 } 1311 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/kernel_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698