Skip to content

Commit 0438856

Browse files
jensjohacommit-bot@chromium.org
authored andcommitted
[CFE] Mark initializer as inferred and don't redo work
No reason to do the same work twice. Change-Id: I8cea469f91dc7087b31bb80352723f0158dcaa6a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125402 Commit-Queue: Jens Johansen <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 06e6554 commit 0438856

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ class FormalParameterBuilder extends ModifierBuilderImpl
6767
/// [buildOutlineExpressions].
6868
Token initializerToken;
6969

70+
bool initializerWasInferred = false;
71+
7072
FormalParameterBuilder(this.metadata, this.modifiers, this.type, this.name,
7173
LibraryBuilder compilationUnit, int charOffset,
7274
[Uri fileUri])
@@ -174,6 +176,7 @@ class FormalParameterBuilder extends ModifierBuilderImpl
174176
.createBodyBuilderForOutlineExpression(
175177
library, classBuilder, this, scope, fileUri);
176178
bodyBuilder.constantContext = ConstantContext.required;
179+
assert(!initializerWasInferred);
177180
Expression initializer =
178181
bodyBuilder.parseFieldInitializer(initializerToken);
179182
initializer = bodyBuilder.typeInferrer
@@ -184,6 +187,7 @@ class FormalParameterBuilder extends ModifierBuilderImpl
184187
loader.transformPostInference(variable,
185188
bodyBuilder.transformSetLiterals, bodyBuilder.transformCollections);
186189
}
190+
initializerWasInferred = true;
187191
bodyBuilder.resolveRedirectingFactoryTargets();
188192
}
189193
initializerToken = null;

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -856,18 +856,21 @@ class BodyBuilder extends ScopeListener<JumpTarget>
856856
FormalParameterBuilder parameter = formals.parameters[i];
857857
Expression initializer = parameter.variable.initializer;
858858
if (parameter.isOptional || initializer != null) {
859-
if (parameter.isOptional) {
860-
initializer ??= forest.createNullLiteral(
861-
// TODO(ahe): Should store: originParameter.fileOffset
862-
// https://github.com/dart-lang/sdk/issues/32289
863-
noLocation);
859+
if (!parameter.initializerWasInferred) {
860+
parameter.initializerWasInferred = true;
861+
if (parameter.isOptional) {
862+
initializer ??= forest.createNullLiteral(
863+
// TODO(ahe): Should store: originParameter.fileOffset
864+
// https://github.com/dart-lang/sdk/issues/32289
865+
noLocation);
866+
}
867+
VariableDeclaration originParameter = builder.getFormalParameter(i);
868+
initializer = typeInferrer?.inferParameterInitializer(
869+
this, initializer, originParameter.type);
870+
originParameter.initializer = initializer..parent = originParameter;
871+
libraryBuilder.loader.transformPostInference(
872+
originParameter, transformSetLiterals, transformCollections);
864873
}
865-
VariableDeclaration originParameter = builder.getFormalParameter(i);
866-
initializer = typeInferrer?.inferParameterInitializer(
867-
this, initializer, originParameter.type);
868-
originParameter.initializer = initializer..parent = originParameter;
869-
libraryBuilder.loader.transformPostInference(
870-
originParameter, transformSetLiterals, transformCollections);
871874

872875
VariableDeclaration extensionTearOffParameter =
873876
builder.getExtensionTearOffParameter(i);
@@ -3185,7 +3188,9 @@ class BodyBuilder extends ScopeListener<JumpTarget>
31853188
initializer.fileOffset,
31863189
noLength);
31873190
} else {
3188-
variable.initializer = initializer..parent = variable;
3191+
if (!parameter.initializerWasInferred) {
3192+
variable.initializer = initializer..parent = variable;
3193+
}
31893194
}
31903195
} else if (kind != FormalParameterKind.mandatory) {
31913196
variable.initializer ??= forest.createNullLiteral(noLocation)

0 commit comments

Comments
 (0)