Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart

Issue 2915763008: Perform type inference on default values of optional/named parameters. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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).
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698