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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
4 | 4 |
5 import 'package:front_end/src/base/instrumentation.dart'; | 5 import 'package:front_end/src/base/instrumentation.dart'; |
6 import 'package:front_end/src/dependency_walker.dart' as dependencyWalker; | 6 import 'package:front_end/src/dependency_walker.dart' as dependencyWalker; |
7 import 'package:front_end/src/fasta/errors.dart'; | 7 import 'package:front_end/src/fasta/errors.dart'; |
8 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'; | 8 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'; |
9 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart'
; | 9 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart'
; |
10 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart'; | 10 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart'; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 } | 259 } |
260 for (var formal in initializingFormals) { | 260 for (var formal in initializingFormals) { |
261 formal.type = _inferInitializingFormalType(formal); | 261 formal.type = _inferInitializingFormalType(formal); |
262 } | 262 } |
263 } | 263 } |
264 | 264 |
265 /// Retrieve the [TypeInferrer] for the given [member], which was created by | 265 /// Retrieve the [TypeInferrer] for the given [member], which was created by |
266 /// a previous call to [createTopLevelTypeInferrer]. | 266 /// a previous call to [createTopLevelTypeInferrer]. |
267 TypeInferrerImpl getMemberTypeInferrer(KernelMember member); | 267 TypeInferrerImpl getMemberTypeInferrer(KernelMember member); |
268 | 268 |
269 DartType getNamedParameterType(FunctionType functionType, String name) { | |
270 return functionType.getNamedParameter(name) ?? const DynamicType(); | |
271 } | |
272 | |
273 DartType getPositionalParameterType(FunctionType functionType, int i) { | |
274 if (i < functionType.positionalParameters.length) { | |
275 return functionType.positionalParameters[i]; | |
276 } else { | |
277 return const DynamicType(); | |
278 } | |
279 } | |
280 | |
281 /// Performs type inference on the given [accessorNode]. | 269 /// Performs type inference on the given [accessorNode]. |
282 void inferAccessor(AccessorNode accessorNode) { | 270 void inferAccessor(AccessorNode accessorNode) { |
283 assert(accessorNode.state == InferenceState.NotInferredYet); | 271 assert(accessorNode.state == InferenceState.NotInferredYet); |
284 accessorNode.state = InferenceState.Inferring; | 272 accessorNode.state = InferenceState.Inferring; |
285 var member = accessorNode.member; | 273 var member = accessorNode.member; |
286 if (strongMode) { | 274 if (strongMode) { |
287 var inferredType = tryInferAccessorByInheritance(accessorNode); | 275 var inferredType = tryInferAccessorByInheritance(accessorNode); |
288 var typeInferrer = getMemberTypeInferrer(member); | 276 var typeInferrer = getMemberTypeInferrer(member); |
289 if (inferredType == null) { | 277 if (inferredType == null) { |
290 if (member is KernelField) { | 278 if (member is KernelField) { |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 } | 589 } |
602 | 590 |
603 @override | 591 @override |
604 void evaluateScc(List<AccessorNode> scc) { | 592 void evaluateScc(List<AccessorNode> scc) { |
605 // Mark every accessor as part of a circularity. | 593 // Mark every accessor as part of a circularity. |
606 for (var f in scc) { | 594 for (var f in scc) { |
607 f._typeInferenceEngine.inferAccessorCircular(f); | 595 f._typeInferenceEngine.inferAccessorCircular(f); |
608 } | 596 } |
609 } | 597 } |
610 } | 598 } |
OLD | NEW |