| 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 ffe3b5e2476fe564f8ab1cfb27b2222635cf9ed6..fd76bd70f3f49cfb08fe0cac6e6511787dcb62bb 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
|
| @@ -572,6 +572,16 @@ class KernelFunctionDeclaration extends FunctionDeclaration
|
| @override
|
| void _inferStatement(KernelTypeInferrer inferrer) {
|
| inferrer.listener.functionDeclarationEnter(this);
|
| + for (var parameter in function.positionalParameters) {
|
| + if (parameter.initializer != null) {
|
| + inferrer.inferExpression(parameter.initializer, parameter.type, false);
|
| + }
|
| + }
|
| + for (var parameter in function.namedParameters) {
|
| + if (parameter.initializer != null) {
|
| + inferrer.inferExpression(parameter.initializer, parameter.type, false);
|
| + }
|
| + }
|
| var oldClosureContext = inferrer.closureContext;
|
| inferrer.closureContext =
|
| new ClosureContext(inferrer, function.asyncMarker, function.returnType);
|
| @@ -613,7 +623,21 @@ class KernelFunctionExpression extends FunctionExpression
|
| KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
|
| typeNeeded = inferrer.listener.functionExpressionEnter(this, typeContext) ||
|
| typeNeeded;
|
| - // TODO(paulberry): do we also need to visit default parameter values?
|
| +
|
| + if (!inferrer.isTopLevel) {
|
| + for (var parameter in function.positionalParameters) {
|
| + if (parameter.initializer != null) {
|
| + inferrer.inferExpression(
|
| + parameter.initializer, parameter.type, false);
|
| + }
|
| + }
|
| + for (var parameter in function.namedParameters) {
|
| + if (parameter.initializer != null) {
|
| + inferrer.inferExpression(
|
| + parameter.initializer, parameter.type, false);
|
| + }
|
| + }
|
| + }
|
|
|
| // Let `<T0, ..., Tn>` be the set of type parameters of the closure (with
|
| // `n`=0 if there are no type parameters).
|
|
|