Skip to content

Commit d89c03a

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe][InternalNodes] Add InternalRedirectingInitializer
The adds InternalRedirectingInitializer as the node created from the body builder. This prepare for detaching the internal ArgumentsImpl node from the public Arguments node. Change-Id: I4f2f8bd267f13bdd4a96feea2c91584c5cb9279f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465900 Reviewed-by: Chloe Stefantsova <[email protected]>
1 parent 65ce2c2 commit d89c03a

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

pkg/front_end/lib/src/kernel/body_builder_context.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ class _SourceClassBodyBuilderDeclarationContext
577577
ArgumentsImpl arguments, {
578578
required int fileOffset,
579579
}) {
580-
return new RedirectingInitializer(
580+
return new InternalRedirectingInitializer(
581581
constructorBuilder.invokeTarget as Constructor,
582582
arguments,
583583
)..fileOffset = fileOffset;

pkg/front_end/lib/src/kernel/internal_ast.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4967,3 +4967,33 @@ class InternalSuperMethodInvocation extends InternalExpression {
49674967
return "InternalSuperMethodInvocation(${toStringInternal()})";
49684968
}
49694969
}
4970+
4971+
class InternalRedirectingInitializer extends InternalInitializer {
4972+
final Constructor target;
4973+
ArgumentsImpl arguments;
4974+
4975+
InternalRedirectingInitializer(this.target, this.arguments) {
4976+
arguments.parent = this;
4977+
}
4978+
4979+
@override
4980+
InitializerInferenceResult acceptInference(InferenceVisitorImpl visitor) {
4981+
return visitor.visitInternalRedirectingInitializer(this);
4982+
}
4983+
4984+
@override
4985+
// Coverage-ignore(suite): Not run.
4986+
void toTextInternal(AstPrinter printer) {
4987+
printer.write('this');
4988+
if (target.name.text.isNotEmpty) {
4989+
printer.write('.');
4990+
printer.write(target.name.text);
4991+
}
4992+
printer.writeArguments(arguments, includeTypeArguments: false);
4993+
}
4994+
4995+
@override
4996+
String toString() {
4997+
return "InternalRedirectingInitializer(${toStringInternal()})";
4998+
}
4999+
}

pkg/front_end/lib/src/kernel/resolver.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,10 +1234,10 @@ class Resolver {
12341234
);
12351235
}
12361236
}
1237-
} else if (last is RedirectingInitializer) {
1237+
} else if (last is InternalRedirectingInitializer) {
12381238
if (bodyBuilderContext.isEnumClass &&
12391239
libraryFeatures.enhancedEnums.isEnabled) {
1240-
ArgumentsImpl arguments = last.arguments as ArgumentsImpl;
1240+
ArgumentsImpl arguments = last.arguments;
12411241
List<Expression> enumSyntheticArguments = [
12421242
new VariableGet(function.positionalParameters[0])
12431243
..parent = last.arguments,

pkg/front_end/lib/src/type_inference/inference_visitor.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12228,8 +12228,15 @@ class InferenceVisitorImpl extends InferenceVisitorBase
1222812228
}
1222912229

1223012230
@override
12231+
// Coverage-ignore(suite): Not run.
1223112232
InitializerInferenceResult visitRedirectingInitializer(
1223212233
RedirectingInitializer node,
12234+
) {
12235+
_unhandledInitializer(node);
12236+
}
12237+
12238+
InitializerInferenceResult visitInternalRedirectingInitializer(
12239+
InternalRedirectingInitializer node,
1223312240
) {
1223412241
ensureMemberType(node.target);
1223512242
List<TypeParameter> classTypeParameters =
@@ -12240,7 +12247,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
1224012247
new TypeParameterType.withDefaultNullability(classTypeParameters[i]),
1224112248
growable: false,
1224212249
);
12243-
ArgumentsImpl arguments = node.arguments as ArgumentsImpl;
12250+
ArgumentsImpl arguments = node.arguments;
1224412251
// TODO(johnniwinther): Avoid this workaround.
1224512252
// The redirecting initializer syntax doesn't include type arguments passed
1224612253
// to the target constructor but we need to add them to the arguments before
@@ -12264,7 +12271,8 @@ class InferenceVisitorImpl extends InferenceVisitorBase
1226412271
);
1226512272
arguments.resetExplicitTypeArguments();
1226612273
return new InitializerInferenceResult.fromInvocationInferenceResult(
12267-
node,
12274+
new RedirectingInitializer(node.target, arguments)
12275+
..fileOffset = node.fileOffset,
1226812276
inferenceResult,
1226912277
);
1227012278
}

0 commit comments

Comments
 (0)