| 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 504c88a5fe7c9888d1ebba88a6ee0359188f5766..6dc71000f3f7d2941f39f2b3e79146ce5b414e70 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
|
| @@ -23,6 +23,23 @@ import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
|
| import 'package:front_end/src/fasta/type_inference/type_promotion.dart';
|
| import 'package:kernel/ast.dart';
|
|
|
| +/// Concrete shadow object representing a set of invocation arguments.
|
| +class KernelArguments extends Arguments {
|
| + bool _hasExplicitTypeArguments;
|
| +
|
| + KernelArguments(List<Expression> positional,
|
| + {List<DartType> types, List<NamedExpression> named})
|
| + : _hasExplicitTypeArguments = types != null && types.isNotEmpty,
|
| + super(positional, types: types, named: named);
|
| +
|
| + static void setExplicitArgumentTypes(
|
| + KernelArguments arguments, List<DartType> types) {
|
| + arguments.types.clear();
|
| + arguments.types.addAll(types);
|
| + arguments._hasExplicitTypeArguments = true;
|
| + }
|
| +}
|
| +
|
| /// Shadow object for [AsExpression].
|
| class KernelAsExpression extends AsExpression implements KernelExpression {
|
| KernelAsExpression(Expression operand, DartType type) : super(operand, type);
|
| @@ -109,15 +126,16 @@ class KernelConstructorInvocation extends ConstructorInvocation
|
| @override
|
| DartType _inferExpression(
|
| KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
|
| + KernelArguments arguments = this.arguments;
|
| return inferrer.inferConstructorInvocation(
|
| typeContext,
|
| typeNeeded,
|
| fileOffset,
|
| target,
|
| - arguments.types.isEmpty ? null : arguments.types,
|
| + arguments._hasExplicitTypeArguments ? arguments.types : null,
|
| _forEachArgument, (type) {
|
| - arguments = new Arguments(arguments.positional,
|
| - named: arguments.named, types: type.typeArguments);
|
| + arguments.types.clear();
|
| + arguments.types.addAll(type.typeArguments);
|
| });
|
| }
|
| }
|
|
|