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 |