Chromium Code Reviews| 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/resolution.dart'; | 10 import '../common/resolution.dart'; |
| (...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 793 _memberMap.values.forEach(f); | 793 _memberMap.values.forEach(f); |
| 794 for (ir.Member member in _setterMap.values) { | 794 for (ir.Member member in _setterMap.values) { |
| 795 if (member is ir.Procedure) { | 795 if (member is ir.Procedure) { |
| 796 f(member); | 796 f(member); |
| 797 } else { | 797 } else { |
| 798 // Skip fields; these are also in _memberMap. | 798 // Skip fields; these are also in _memberMap. |
| 799 } | 799 } |
| 800 } | 800 } |
| 801 } | 801 } |
| 802 | 802 |
| 803 Iterable<ConstantExpression> getMetadata(KernelToElementMap worldBuilder) { | 803 Iterable<ConstantExpression> getMetadata(KernelToElementMap elementMap) { |
| 804 if (_metadata == null) { | 804 if (_metadata == null) { |
| 805 _metadata = worldBuilder.getMetadata(cls.annotations); | 805 _metadata = elementMap.getMetadata(cls.annotations); |
| 806 } | 806 } |
| 807 return _metadata; | 807 return _metadata; |
| 808 } | 808 } |
| 809 } | 809 } |
| 810 | 810 |
| 811 class _MemberData { | 811 class _MemberData { |
| 812 final ir.Member node; | 812 final ir.Member node; |
| 813 Iterable<ConstantExpression> _metadata; | |
| 813 | 814 |
| 814 _MemberData(this.node); | 815 _MemberData(this.node); |
| 815 | 816 |
| 816 ResolutionImpact getWorldImpact(KernelToElementMap elementMap) { | 817 ResolutionImpact getWorldImpact(KernelToElementMap elementMap) { |
| 817 return buildKernelImpact(node, elementMap); | 818 return buildKernelImpact(node, elementMap); |
| 818 } | 819 } |
| 820 | |
| 821 Iterable<ConstantExpression> getMetadata(KernelToElementMap elementMap) { | |
| 822 if (_metadata == null) { | |
| 823 _metadata = elementMap.getMetadata(node.annotations); | |
|
Siggi Cherem (dart-lang)
2017/05/02 20:04:22
nit: replace with ??=
Johnni Winther
2017/05/03 08:05:59
Done.
| |
| 824 } | |
| 825 return _metadata; | |
| 826 } | |
| 819 } | 827 } |
| 820 | 828 |
| 821 class _FunctionData extends _MemberData { | 829 class _FunctionData extends _MemberData { |
| 822 final ir.FunctionNode functionNode; | 830 final ir.FunctionNode functionNode; |
| 823 FunctionType _type; | 831 FunctionType _type; |
| 824 CallStructure _callStructure; | 832 CallStructure _callStructure; |
| 825 | 833 |
| 826 _FunctionData(ir.Member node, this.functionNode) : super(node); | 834 _FunctionData(ir.Member node, this.functionNode) : super(node); |
| 827 | 835 |
| 828 FunctionType getFunctionType(KernelToElementMap elementMap) { | 836 FunctionType getFunctionType(KernelToElementMap elementMap) { |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1033 CallStructure getCallStructure(KFunction function) { | 1041 CallStructure getCallStructure(KFunction function) { |
| 1034 _FunctionData data = elementMap._memberList[function.memberIndex]; | 1042 _FunctionData data = elementMap._memberList[function.memberIndex]; |
| 1035 return data.callStructure; | 1043 return data.callStructure; |
| 1036 } | 1044 } |
| 1037 | 1045 |
| 1038 @override | 1046 @override |
| 1039 bool isDeferredLoadLibraryGetter(KMember member) { | 1047 bool isDeferredLoadLibraryGetter(KMember member) { |
| 1040 // TODO(johnniwinther): Support these. | 1048 // TODO(johnniwinther): Support these. |
| 1041 return false; | 1049 return false; |
| 1042 } | 1050 } |
| 1051 | |
| 1052 @override | |
| 1053 Iterable<ConstantValue> getMemberMetadata(KMember member) { | |
| 1054 List<ConstantValue> values = <ConstantValue>[]; | |
| 1055 _MemberData memberData = elementMap._memberList[member.memberIndex]; | |
| 1056 for (ConstantExpression constant in memberData.getMetadata(elementMap)) { | |
| 1057 values.add(elementMap.constantEnvironment.getConstantValue(constant)); | |
| 1058 } | |
| 1059 return values; | |
| 1060 } | |
| 1043 } | 1061 } |
| 1044 | 1062 |
| 1045 /// Visitor that converts kernel dart types into [DartType]. | 1063 /// Visitor that converts kernel dart types into [DartType]. |
| 1046 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { | 1064 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { |
| 1047 final KernelToElementMap elementAdapter; | 1065 final KernelToElementMap elementAdapter; |
| 1048 bool topLevel = true; | 1066 bool topLevel = true; |
| 1049 | 1067 |
| 1050 DartTypeConverter(this.elementAdapter); | 1068 DartTypeConverter(this.elementAdapter); |
| 1051 | 1069 |
| 1052 DartType convert(ir.DartType type) { | 1070 DartType convert(ir.DartType type) { |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1297 } | 1315 } |
| 1298 | 1316 |
| 1299 InterfaceType getMixinTypeForClass(KClass cls) { | 1317 InterfaceType getMixinTypeForClass(KClass cls) { |
| 1300 _KClassEnv env = builder._classEnvs[cls.classIndex]; | 1318 _KClassEnv env = builder._classEnvs[cls.classIndex]; |
| 1301 ir.Supertype mixedInType = env.cls.mixedInType; | 1319 ir.Supertype mixedInType = env.cls.mixedInType; |
| 1302 if (mixedInType == null) return null; | 1320 if (mixedInType == null) return null; |
| 1303 return builder.createInterfaceType( | 1321 return builder.createInterfaceType( |
| 1304 mixedInType.classNode, mixedInType.typeArguments); | 1322 mixedInType.classNode, mixedInType.typeArguments); |
| 1305 } | 1323 } |
| 1306 } | 1324 } |
| OLD | NEW |