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

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

Issue 2857373002: Handle more constants in Constantifier (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;
11 import '../common/resolution.dart'; 11 import '../common/resolution.dart';
12 import '../compile_time_constants.dart'; 12 import '../compile_time_constants.dart';
13 import '../constants/constant_system.dart'; 13 import '../constants/constant_system.dart';
14 import '../constants/constructors.dart'; 14 import '../constants/constructors.dart';
15 import '../constants/evaluation.dart'; 15 import '../constants/evaluation.dart';
16 import '../constants/expressions.dart'; 16 import '../constants/expressions.dart';
17 import '../constants/values.dart'; 17 import '../constants/values.dart';
18 import '../common_elements.dart'; 18 import '../common_elements.dart';
19 import '../elements/elements.dart'; 19 import '../elements/elements.dart';
20 import '../elements/entities.dart'; 20 import '../elements/entities.dart';
21 import '../elements/types.dart'; 21 import '../elements/types.dart';
22 import '../environment.dart';
22 import '../frontend_strategy.dart'; 23 import '../frontend_strategy.dart';
23 import '../js_backend/constant_system_javascript.dart'; 24 import '../js_backend/constant_system_javascript.dart';
24 import '../js_backend/native_data.dart'; 25 import '../js_backend/native_data.dart';
25 import '../js_backend/no_such_method_registry.dart'; 26 import '../js_backend/no_such_method_registry.dart';
26 import '../native/native.dart' as native; 27 import '../native/native.dart' as native;
27 import '../native/resolver.dart'; 28 import '../native/resolver.dart';
28 import '../ordered_typeset.dart'; 29 import '../ordered_typeset.dart';
29 import '../ssa/kernel_impact.dart'; 30 import '../ssa/kernel_impact.dart';
30 import '../universe/call_structure.dart'; 31 import '../universe/call_structure.dart';
31 import '../universe/world_builder.dart'; 32 import '../universe/world_builder.dart';
32 import '../util/util.dart' show Link, LinkBuilder; 33 import '../util/util.dart' show Link, LinkBuilder;
33 import 'element_adapter.dart'; 34 import 'element_adapter.dart';
34 import 'elements.dart'; 35 import 'elements.dart';
35 36
36 part 'native_basic_data.dart'; 37 part 'native_basic_data.dart';
37 part 'no_such_method_resolver.dart'; 38 part 'no_such_method_resolver.dart';
38 part 'types.dart'; 39 part 'types.dart';
39 40
40 /// Element builder used for creating elements and types corresponding to Kernel 41 /// Element builder used for creating elements and types corresponding to Kernel
41 /// IR nodes. 42 /// IR nodes.
42 class KernelToElementMap extends KernelElementAdapterMixin { 43 class KernelToElementMap extends KernelElementAdapterMixin {
44 final Environment _environment;
43 CommonElements _commonElements; 45 CommonElements _commonElements;
44 native.BehaviorBuilder _nativeBehaviorBuilder; 46 native.BehaviorBuilder _nativeBehaviorBuilder;
45 final DiagnosticReporter reporter; 47 final DiagnosticReporter reporter;
46 ElementEnvironment _elementEnvironment; 48 ElementEnvironment _elementEnvironment;
47 DartTypeConverter _typeConverter; 49 DartTypeConverter _typeConverter;
48 KernelConstantEnvironment _constantEnvironment; 50 KernelConstantEnvironment _constantEnvironment;
49 _KernelDartTypes _types; 51 _KernelDartTypes _types;
50 52
51 /// Library environment. Used for fast lookup. 53 /// Library environment. Used for fast lookup.
52 _KEnv _env = new _KEnv(); 54 _KEnv _env = new _KEnv();
(...skipping 13 matching lines...) Expand all
66 68
67 List<_MemberData> _memberList = <_MemberData>[]; 69 List<_MemberData> _memberList = <_MemberData>[];
68 70
69 Map<ir.Member, KConstructor> _constructorMap = <ir.Member, KConstructor>{}; 71 Map<ir.Member, KConstructor> _constructorMap = <ir.Member, KConstructor>{};
70 Map<ir.Procedure, KFunction> _methodMap = <ir.Procedure, KFunction>{}; 72 Map<ir.Procedure, KFunction> _methodMap = <ir.Procedure, KFunction>{};
71 Map<ir.Field, KField> _fieldMap = <ir.Field, KField>{}; 73 Map<ir.Field, KField> _fieldMap = <ir.Field, KField>{};
72 74
73 Map<ir.TreeNode, KLocalFunction> _localFunctionMap = 75 Map<ir.TreeNode, KLocalFunction> _localFunctionMap =
74 <ir.TreeNode, KLocalFunction>{}; 76 <ir.TreeNode, KLocalFunction>{};
75 77
76 KernelToElementMap(this.reporter) { 78 KernelToElementMap(this.reporter, this._environment) {
77 _elementEnvironment = new KernelElementEnvironment(this); 79 _elementEnvironment = new KernelElementEnvironment(this);
78 _commonElements = new CommonElements(_elementEnvironment); 80 _commonElements = new CommonElements(_elementEnvironment);
79 _constantEnvironment = new KernelConstantEnvironment(this); 81 _constantEnvironment = new KernelConstantEnvironment(this);
80 _nativeBehaviorBuilder = new KernelBehaviorBuilder(_commonElements); 82 _nativeBehaviorBuilder = new KernelBehaviorBuilder(_commonElements);
81 _types = new _KernelDartTypes(this); 83 _types = new _KernelDartTypes(this);
82 _typeConverter = new DartTypeConverter(this); 84 _typeConverter = new DartTypeConverter(this);
83 } 85 }
84 86
85 /// Adds libraries in [program] to the set of libraries. 87 /// Adds libraries in [program] to the set of libraries.
86 /// 88 ///
(...skipping 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 } 1181 }
1180 1182
1181 @override 1183 @override
1182 bool hasConstantValue(ConstantExpression expression) { 1184 bool hasConstantValue(ConstantExpression expression) {
1183 throw new UnimplementedError("KernelConstantEnvironment.hasConstantValue"); 1185 throw new UnimplementedError("KernelConstantEnvironment.hasConstantValue");
1184 } 1186 }
1185 } 1187 }
1186 1188
1187 /// Evaluation environment used for computing [ConstantValue]s for 1189 /// Evaluation environment used for computing [ConstantValue]s for
1188 /// kernel based [ConstantExpression]s. 1190 /// kernel based [ConstantExpression]s.
1189 class _EvaluationEnvironment implements Environment { 1191 class _EvaluationEnvironment implements EvaluationEnvironment {
1190 final KernelToElementMap _worldBuilder; 1192 final KernelToElementMap _elementMap;
1191 1193
1192 _EvaluationEnvironment(this._worldBuilder); 1194 _EvaluationEnvironment(this._elementMap);
1193 1195
1194 @override 1196 @override
1195 CommonElements get commonElements { 1197 CommonElements get commonElements => _elementMap.commonElements;
1196 throw new UnimplementedError("_EvaluationEnvironment.commonElements");
1197 }
1198 1198
1199 @override 1199 @override
1200 InterfaceType substByContext(InterfaceType base, InterfaceType target) { 1200 InterfaceType substByContext(InterfaceType base, InterfaceType target) {
1201 if (base.typeArguments.isNotEmpty) { 1201 return _elementMap._substByContext(base, target);
1202 throw new UnimplementedError("_EvaluationEnvironment.substByContext");
1203 }
1204 return base;
1205 } 1202 }
1206 1203
1207 @override 1204 @override
1208 ConstantConstructor getConstructorConstant(ConstructorEntity constructor) { 1205 ConstantConstructor getConstructorConstant(ConstructorEntity constructor) {
1209 return _worldBuilder._getConstructorConstant(constructor); 1206 return _elementMap._getConstructorConstant(constructor);
1210 } 1207 }
1211 1208
1212 @override 1209 @override
1213 ConstantExpression getFieldConstant(FieldEntity field) { 1210 ConstantExpression getFieldConstant(FieldEntity field) {
1214 return _worldBuilder._getFieldConstant(field); 1211 return _elementMap._getFieldConstant(field);
1215 } 1212 }
1216 1213
1217 @override 1214 @override
1218 ConstantExpression getLocalConstant(Local local) { 1215 ConstantExpression getLocalConstant(Local local) {
1219 throw new UnimplementedError("_EvaluationEnvironment.getLocalConstant"); 1216 throw new UnimplementedError("_EvaluationEnvironment.getLocalConstant");
1220 } 1217 }
1221 1218
1222 @override 1219 @override
1223 String readFromEnvironment(String name) { 1220 String readFromEnvironment(String name) {
1224 throw new UnimplementedError("_EvaluationEnvironment.readFromEnvironment"); 1221 return _elementMap._environment.valueOf(name);
1225 } 1222 }
1226 } 1223 }
1227 1224
1228 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase { 1225 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase {
1229 final KernelToElementMap elementMap; 1226 final KernelToElementMap elementMap;
1230 1227
1231 KernelResolutionWorldBuilder(this.elementMap, NativeBasicData nativeBasicData, 1228 KernelResolutionWorldBuilder(this.elementMap, NativeBasicData nativeBasicData,
1232 SelectorConstraintsStrategy selectorConstraintsStrategy) 1229 SelectorConstraintsStrategy selectorConstraintsStrategy)
1233 : super(elementMap.elementEnvironment, elementMap.commonElements, 1230 : super(elementMap.elementEnvironment, elementMap.commonElements,
1234 nativeBasicData, selectorConstraintsStrategy); 1231 nativeBasicData, selectorConstraintsStrategy);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 } 1283 }
1287 1284
1288 InterfaceType getMixinTypeForClass(KClass cls) { 1285 InterfaceType getMixinTypeForClass(KClass cls) {
1289 _KClassEnv env = builder._classEnvs[cls.classIndex]; 1286 _KClassEnv env = builder._classEnvs[cls.classIndex];
1290 ir.Supertype mixedInType = env.cls.mixedInType; 1287 ir.Supertype mixedInType = env.cls.mixedInType;
1291 if (mixedInType == null) return null; 1288 if (mixedInType == null) return null;
1292 return builder.createInterfaceType( 1289 return builder.createInterfaceType(
1293 mixedInType.classNode, mixedInType.typeArguments); 1290 mixedInType.classNode, mixedInType.typeArguments);
1294 } 1291 }
1295 } 1292 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_adapter.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