[cfe] Support generating new invocation nodes in the enum builder.
Change-Id: I555517d78e46509ec5ee2c74390e97b2e68a5797
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/199428
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index cf7f639..f05be5b 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -16,6 +16,8 @@
Expression,
Field,
FieldInitializer,
+ InstanceAccessKind,
+ InstanceGet,
IntLiteral,
InterfaceType,
ListLiteral,
@@ -436,8 +438,15 @@
nameFieldBuilder.build(libraryBuilder);
Field nameField = nameFieldBuilder.field;
ProcedureBuilder toStringBuilder = firstMemberNamed("toString");
- toStringBuilder.body = new ReturnStatement(
- new PropertyGet(new ThisExpression(), nameField.name, nameField));
+ if (libraryBuilder
+ .loader.target.backendTarget.supportsNewMethodInvocationEncoding) {
+ toStringBuilder.body = new ReturnStatement(new InstanceGet(
+ InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
+ interfaceTarget: nameField, resultType: nameField.type));
+ } else {
+ toStringBuilder.body = new ReturnStatement(
+ new PropertyGet(new ThisExpression(), nameField.name, nameField));
+ }
List<Expression> values = <Expression>[];
if (enumConstantInfos != null) {
for (EnumConstantInfo enumConstantInfo in enumConstantInfos) {