| Index: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| index 4f41a27a090b1db64901c5d9fa560185412c9ab3..504c88a5fe7c9888d1ebba88a6ee0359188f5766 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| @@ -97,11 +97,28 @@ class KernelConstructorInvocation extends ConstructorInvocation
|
| Reference targetReference, Arguments arguments)
|
| : super.byReference(targetReference, arguments);
|
|
|
| + void _forEachArgument(void callback(String name, Expression expression)) {
|
| + for (var expression in arguments.positional) {
|
| + callback(null, expression);
|
| + }
|
| + for (var namedExpression in arguments.named) {
|
| + callback(namedExpression.name, namedExpression.value);
|
| + }
|
| + }
|
| +
|
| @override
|
| DartType _inferExpression(
|
| KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
|
| - // TODO(scheglov): implement.
|
| - return typeNeeded ? const DynamicType() : null;
|
| + return inferrer.inferConstructorInvocation(
|
| + typeContext,
|
| + typeNeeded,
|
| + fileOffset,
|
| + target,
|
| + arguments.types.isEmpty ? null : arguments.types,
|
| + _forEachArgument, (type) {
|
| + arguments = new Arguments(arguments.positional,
|
| + named: arguments.named, types: type.typeArguments);
|
| + });
|
| }
|
| }
|
|
|
|
|