| 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/fasta/kernel/kernel_shadow_ast.dart'; | 6 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'; |
| 7 import 'package:front_end/src/fasta/names.dart' show callName; |
| 7 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'; | 8 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'; |
| 8 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'
; |
| 9 import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; | 10 import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; |
| 10 import 'package:front_end/src/fasta/type_inference/type_schema.dart'; | 11 import 'package:front_end/src/fasta/type_inference/type_schema.dart'; |
| 11 import 'package:front_end/src/fasta/type_inference/type_schema_elimination.dart'
; | 12 import 'package:front_end/src/fasta/type_inference/type_schema_elimination.dart'
; |
| 12 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart'
; | 13 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart'
; |
| 13 import 'package:kernel/ast.dart' | 14 import 'package:kernel/ast.dart' |
| 14 show | 15 show |
| 15 Arguments, | 16 Arguments, |
| 16 AsyncMarker, | 17 AsyncMarker, |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 strongMode = engine.strongMode, | 230 strongMode = engine.strongMode, |
| 230 classHierarchy = engine.classHierarchy, | 231 classHierarchy = engine.classHierarchy, |
| 231 instrumentation = topLevel ? null : engine.instrumentation, | 232 instrumentation = topLevel ? null : engine.instrumentation, |
| 232 typeSchemaEnvironment = engine.typeSchemaEnvironment, | 233 typeSchemaEnvironment = engine.typeSchemaEnvironment, |
| 233 isTopLevel = topLevel; | 234 isTopLevel = topLevel; |
| 234 | 235 |
| 235 /// Gets the type promoter that should be used to promote types during | 236 /// Gets the type promoter that should be used to promote types during |
| 236 /// inference. | 237 /// inference. |
| 237 TypePromoter get typePromoter; | 238 TypePromoter get typePromoter; |
| 238 | 239 |
| 239 FunctionType getCalleeFunctionType( | 240 FunctionType getCalleeFunctionType(Member interfaceMember, |
| 240 Member interfaceMember, DartType receiverType, Name methodName) { | 241 DartType receiverType, Name methodName, bool followCall) { |
| 241 var type = getCalleeType(interfaceMember, receiverType, methodName); | 242 var type = getCalleeType(interfaceMember, receiverType, methodName); |
| 242 if (type is FunctionType) { | 243 if (type is FunctionType) { |
| 243 return type; | 244 return type; |
| 244 } else { | 245 } else if (followCall && type is InterfaceType) { |
| 245 return _functionReturningDynamic; | 246 var member = classHierarchy.getInterfaceMember(type.classNode, callName); |
| 247 var callType = member?.getterType; |
| 248 if (callType is FunctionType) { |
| 249 return callType; |
| 250 } |
| 246 } | 251 } |
| 252 return _functionReturningDynamic; |
| 247 } | 253 } |
| 248 | 254 |
| 249 DartType getCalleeType( | 255 DartType getCalleeType( |
| 250 Member interfaceMember, DartType receiverType, Name methodName) { | 256 Member interfaceMember, DartType receiverType, Name methodName) { |
| 251 if (receiverType is InterfaceType) { | 257 if (receiverType is InterfaceType) { |
| 252 if (interfaceMember == null) return const DynamicType(); | 258 if (interfaceMember == null) return const DynamicType(); |
| 253 var memberClass = interfaceMember.enclosingClass; | 259 var memberClass = interfaceMember.enclosingClass; |
| 254 DartType calleeType; | 260 DartType calleeType; |
| 255 if (interfaceMember is Procedure) { | 261 if (interfaceMember is Procedure) { |
| 256 if (interfaceMember.kind == ProcedureKind.Getter) { | 262 if (interfaceMember.kind == ProcedureKind.Getter) { |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 void _forEachArgument( | 558 void _forEachArgument( |
| 553 Arguments arguments, void callback(String name, Expression expression)) { | 559 Arguments arguments, void callback(String name, Expression expression)) { |
| 554 for (var expression in arguments.positional) { | 560 for (var expression in arguments.positional) { |
| 555 callback(null, expression); | 561 callback(null, expression); |
| 556 } | 562 } |
| 557 for (var namedExpression in arguments.named) { | 563 for (var namedExpression in arguments.named) { |
| 558 callback(namedExpression.name, namedExpression.value); | 564 callback(namedExpression.name, namedExpression.value); |
| 559 } | 565 } |
| 560 } | 566 } |
| 561 } | 567 } |
| OLD | NEW |