Generate optional parameter initializers in BodyBuilder

Change-Id: I3f33c660e25564dbdf907d6331cf391537113549
Reviewed-on: https://dart-review.googlesource.com/c/86341
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
This commit is contained in:
Peter von der Ahé 2018-12-17 14:33:49 +00:00 committed by commit-bot@chromium.org
parent b46077332b
commit f504d61c96
2 changed files with 2 additions and 7 deletions

View file

@ -2716,6 +2716,8 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
} else {
variable.initializer = initializer..parent = variable;
}
} else if (kind != FormalParameterKind.mandatory) {
variable.initializer ??= forest.literalNull(null)..parent = variable;
}
if (annotations != null) {
if (functionNestingLevel == 0) {

View file

@ -1381,19 +1381,12 @@ abstract class TypeInferrerImpl extends TypeInferrer {
for (var i = 0; i < positionalParameters.length; i++) {
var parameter = positionalParameters[i];
inferMetadataKeepingHelper(parameter.annotations);
if (i >= function.requiredParameterCount &&
parameter.initializer == null) {
parameter.initializer = new NullLiteral()..parent = parameter;
}
if (parameter.initializer != null) {
inferExpression(parameter.initializer, parameter.type, !isTopLevel);
}
}
for (var parameter in function.namedParameters) {
inferMetadataKeepingHelper(parameter.annotations);
if (parameter.initializer == null) {
parameter.initializer = new NullLiteral()..parent = parameter;
}
inferExpression(parameter.initializer, parameter.type, !isTopLevel);
}
}