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