| 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'; | |
| 14 | 13 |
| 15 /// Compute type inference data for [_member] as a [MemberElement]. | 14 /// Compute type inference data for [_member] as a [MemberElement]. |
| 16 /// | 15 /// |
| 17 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans | 16 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans |
| 18 /// for the data origin. | 17 /// for the data origin. |
| 19 void computeMemberAstTypeMasks( | 18 void computeMemberAstTypeMasks( |
| 20 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap, | 19 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap, |
| 21 {bool verbose: false}) { | 20 {bool verbose: false}) { |
| 22 MemberElement member = _member; | 21 MemberElement member = _member; |
| 23 ResolvedAst resolvedAst = member.resolvedAst; | 22 ResolvedAst resolvedAst = member.resolvedAst; |
| 24 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; | 23 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; |
| 25 compiler.reporter.withCurrentElement(member.implementation, () { | 24 compiler.reporter.withCurrentElement(member.implementation, () { |
| 26 new TypeMaskComputer(compiler.reporter, actualMap, resolvedAst, | 25 new TypeMaskComputer(compiler.reporter, actualMap, resolvedAst, |
| 27 compiler.globalInference.results) | 26 compiler.globalInference.results) |
| 28 .run(); | 27 .run(); |
| 29 }); | 28 }); |
| 30 } | 29 } |
| 31 | 30 |
| 32 /// AST visitor for computing inference data for a member. | 31 /// AST visitor for computing inference data for a member. |
| 33 class TypeMaskComputer extends AbstractResolvedAstComputer { | 32 class TypeMaskComputer extends AstDataExtractor { |
| 34 final GlobalTypeInferenceResults results; | 33 final GlobalTypeInferenceResults results; |
| 35 final GlobalTypeInferenceElementResult result; | 34 final GlobalTypeInferenceElementResult result; |
| 36 | 35 |
| 37 TypeMaskComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap, | 36 TypeMaskComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap, |
| 38 ResolvedAst resolvedAst, this.results) | 37 ResolvedAst resolvedAst, this.results) |
| 39 : result = results.resultOfMember(resolvedAst.element as MemberElement), | 38 : result = results.resultOfMember(resolvedAst.element as MemberElement), |
| 40 super(reporter, actualMap, resolvedAst); | 39 super(reporter, actualMap, resolvedAst); |
| 41 | 40 |
| 42 @override | 41 @override |
| 43 String computeElementValue(AstElement element) { | 42 String computeElementValue(AstElement element) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 62 String computeNodeValue(Node node, [AstElement element]) { | 61 String computeNodeValue(Node node, [AstElement element]) { |
| 63 if (node is Send) { | 62 if (node is Send) { |
| 64 TypeMask value = result.typeOfSend(node); | 63 TypeMask value = result.typeOfSend(node); |
| 65 return value != null ? '$value' : null; | 64 return value != null ? '$value' : null; |
| 66 } else if (element != null && element.isLocal) { | 65 } else if (element != null && element.isLocal) { |
| 67 return computeElementValue(element); | 66 return computeElementValue(element); |
| 68 } | 67 } |
| 69 return null; | 68 return null; |
| 70 } | 69 } |
| 71 } | 70 } |
| OLD | NEW |