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 import 'package:compiler/src/common.dart'; | 5 import 'package:compiler/src/common.dart'; |
6 import 'package:compiler/src/compiler.dart'; | 6 import 'package:compiler/src/compiler.dart'; |
7 import 'package:compiler/src/elements/elements.dart'; | 7 import 'package:compiler/src/elements/elements.dart'; |
8 import 'package:compiler/src/elements/entities.dart'; | 8 import 'package:compiler/src/elements/entities.dart'; |
9 import 'package:compiler/src/tree/nodes.dart'; | 9 import 'package:compiler/src/tree/nodes.dart'; |
10 import 'package:compiler/src/types/types.dart'; | 10 import 'package:compiler/src/types/types.dart'; |
11 | 11 |
12 import '../equivalence/id_equivalence.dart'; | 12 import '../equivalence/id_equivalence.dart'; |
13 import '../equivalence/id_equivalence_helper.dart'; | 13 import '../equivalence/id_equivalence_helper.dart'; |
14 | 14 |
15 /// Compute type inference data for [_member] as a [MemberElement]. | 15 /// Compute type inference data for [_member] as a [MemberElement]. |
16 /// | 16 /// |
17 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans | 17 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans |
18 /// for the data origin. | 18 /// for the data origin. |
19 void computeMemberAstTypeMasks(Compiler compiler, MemberEntity _member, | 19 void computeMemberAstTypeMasks( |
20 Map<Id, String> actualMap, Map<Id, Spannable> spannableMap, | 20 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap, |
21 {bool verbose: false}) { | 21 {bool verbose: false}) { |
22 MemberElement member = _member; | 22 MemberElement member = _member; |
23 ResolvedAst resolvedAst = member.resolvedAst; | 23 ResolvedAst resolvedAst = member.resolvedAst; |
24 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; | 24 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; |
25 compiler.reporter.withCurrentElement(member.implementation, () { | 25 compiler.reporter.withCurrentElement(member.implementation, () { |
26 new TypeMaskComputer(compiler.reporter, actualMap, spannableMap, | 26 new TypeMaskComputer(compiler.reporter, actualMap, resolvedAst, |
27 resolvedAst, compiler.globalInference.results) | 27 compiler.globalInference.results) |
28 .run(); | 28 .run(); |
29 }); | 29 }); |
30 } | 30 } |
31 | 31 |
32 /// AST visitor for computing inference data for a member. | 32 /// AST visitor for computing inference data for a member. |
33 class TypeMaskComputer extends AbstractResolvedAstComputer { | 33 class TypeMaskComputer extends AbstractResolvedAstComputer { |
34 final GlobalTypeInferenceResults results; | 34 final GlobalTypeInferenceResults results; |
35 final GlobalTypeInferenceElementResult result; | 35 final GlobalTypeInferenceElementResult result; |
36 | 36 |
37 TypeMaskComputer(DiagnosticReporter reporter, Map<Id, String> actualMap, | 37 TypeMaskComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap, |
38 Map<Id, Spannable> spannableMap, ResolvedAst resolvedAst, this.results) | 38 ResolvedAst resolvedAst, this.results) |
39 : result = results.resultOfMember(resolvedAst.element as MemberElement), | 39 : result = results.resultOfMember(resolvedAst.element as MemberElement), |
40 super(reporter, actualMap, spannableMap, resolvedAst); | 40 super(reporter, actualMap, resolvedAst); |
41 | 41 |
42 @override | 42 @override |
43 String computeElementValue(AstElement element) { | 43 String computeElementValue(AstElement element) { |
44 GlobalTypeInferenceElementResult elementResult; | 44 GlobalTypeInferenceElementResult elementResult; |
45 if (element.isParameter) { | 45 if (element.isParameter) { |
46 ParameterElement parameter = element; | 46 ParameterElement parameter = element; |
47 elementResult = results.resultOfParameter(parameter); | 47 elementResult = results.resultOfParameter(parameter); |
48 } else if (element.isLocal) { | 48 } else if (element.isLocal) { |
49 LocalFunctionElement localFunction = element; | 49 LocalFunctionElement localFunction = element; |
50 elementResult = results.resultOfMember(localFunction.callMethod); | 50 elementResult = results.resultOfMember(localFunction.callMethod); |
(...skipping 11 matching lines...) Expand all Loading... |
62 String computeNodeValue(Node node, [AstElement element]) { | 62 String computeNodeValue(Node node, [AstElement element]) { |
63 if (node is Send) { | 63 if (node is Send) { |
64 TypeMask value = result.typeOfSend(node); | 64 TypeMask value = result.typeOfSend(node); |
65 return value != null ? '$value' : null; | 65 return value != null ? '$value' : null; |
66 } else if (element != null && element.isLocal) { | 66 } else if (element != null && element.isLocal) { |
67 return computeElementValue(element); | 67 return computeElementValue(element); |
68 } | 68 } |
69 return null; | 69 return null; |
70 } | 70 } |
71 } | 71 } |
OLD | NEW |