Skip to content

Commit 539cccd

Browse files
liamappelbeCommit Bot
authored andcommitted
[cfe] Prefix name in enhanced enum constructor
This can collide if the user defines a name field on the enum, so prefix it with a '#'. Similarly, also prefix index, though this hasn't caused any known issues yet. Fixes: flutter/flutter#103656 Change-Id: If95b997ed1d24fccaab630554a09030476191fbf TEST=Updated existing tests Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245082 Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> Commit-Queue: Liam Appelbe <liama@google.com>
1 parent 5e400bd commit 539cccd

275 files changed

Lines changed: 1940 additions & 1940 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,8 +1956,8 @@ class BodyBuilder extends StackListenerImpl
19561956
}
19571957
if (sourceClassBuilder is SourceEnumBuilder) {
19581958
assert(constructor.function.positionalParameters.length >= 2 &&
1959-
constructor.function.positionalParameters[0].name == "index" &&
1960-
constructor.function.positionalParameters[1].name == "name");
1959+
constructor.function.positionalParameters[0].name == "#index" &&
1960+
constructor.function.positionalParameters[1].name == "#name");
19611961
(positionalArguments ??= <Expression>[]).insertAll(0, [
19621962
new VariableGetImpl(constructor.function.positionalParameters[0],
19631963
forNullGuardedAccess: false),

pkg/front_end/lib/src/fasta/source/source_enum_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -318,15 +318,15 @@ class SourceEnumBuilder extends SourceClassBuilder {
318318
FormalParameterKind.requiredPositional,
319319
0,
320320
intType,
321-
"index",
321+
"#index",
322322
libraryBuilder,
323323
charOffset),
324324
new FormalParameterBuilder(
325325
null,
326326
FormalParameterKind.requiredPositional,
327327
0,
328328
stringType,
329-
"name",
329+
"#name",
330330
libraryBuilder,
331331
charOffset)
332332
],
@@ -352,7 +352,7 @@ class SourceEnumBuilder extends SourceClassBuilder {
352352
FormalParameterKind.requiredPositional,
353353
/* modifiers = */ 0,
354354
stringType,
355-
"name",
355+
"#name",
356356
libraryBuilder,
357357
charOffset));
358358
member.formals!.insert(
@@ -362,7 +362,7 @@ class SourceEnumBuilder extends SourceClassBuilder {
362362
FormalParameterKind.requiredPositional,
363363
/* modifiers = */ 0,
364364
intType,
365-
"index",
365+
"#index",
366366
libraryBuilder,
367367
charOffset));
368368
}

pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.expect

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ import "dart:core" as core;
6262
class E1 extends core::_Enum /*isEnum*/ {
6363
static const field core::List<self::E1> values = #C4;
6464
static const field self::E1 element = #C3;
65-
const constructor •(core::int index, core::String name) → self::E1
66-
: super core::_Enum::•(index, name)
65+
const constructor •(core::int #index, core::String #name) → self::E1
66+
: super core::_Enum::•(#index, #name)
6767
;
6868
method toString() → core::String
6969
return "E1.${this.{core::_Enum::_name}{core::String}}";
@@ -72,8 +72,8 @@ class E1 extends core::_Enum /*isEnum*/ {
7272
class E2 extends core::_Enum /*isEnum*/ {
7373
static const field core::List<self::E2> values = #C6;
7474
static const field self::E2 element = #C5;
75-
const constructor •(core::int index, core::String name) → self::E2
76-
: super core::_Enum::•(index, name)
75+
const constructor •(core::int #index, core::String #name) → self::E2
76+
: super core::_Enum::•(#index, #name)
7777
;
7878
method toString() → core::String
7979
return "E2.${this.{core::_Enum::_name}{core::String}}";
@@ -82,8 +82,8 @@ class E2 extends core::_Enum /*isEnum*/ {
8282
class E3 extends core::_Enum /*isEnum*/ {
8383
static const field core::List<self::E3> values = #C8;
8484
static const field self::E3 element = #C7;
85-
const constructor •(core::int index, core::String name) → self::E3
86-
: super core::_Enum::•(index, name)
85+
const constructor •(core::int #index, core::String #name) → self::E3
86+
: super core::_Enum::•(#index, #name)
8787
;
8888
method toString() → core::String
8989
return "E3.${this.{core::_Enum::_name}{core::String}}";
@@ -98,8 +98,8 @@ abstract class InterfaceMethod extends core::Object {
9898
class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/ {
9999
static const field core::List<self::E4> values = #C10;
100100
static const field self::E4 element = #C9;
101-
const constructor •(core::int index, core::String name) → self::E4
102-
: super core::_Enum::•(index, name)
101+
const constructor •(core::int #index, core::String #name) → self::E4
102+
: super core::_Enum::•(#index, #name)
103103
;
104104
method toString() → core::String
105105
return "E4.${this.{core::_Enum::_name}{core::String}}";
@@ -113,8 +113,8 @@ abstract class InterfaceGetter extends core::Object {
113113
class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/ {
114114
static const field core::List<self::E5> values = #C12;
115115
static const field self::E5 element = #C11;
116-
const constructor •(core::int index, core::String name) → self::E5
117-
: super core::_Enum::•(index, name)
116+
const constructor •(core::int #index, core::String #name) → self::E5
117+
: super core::_Enum::•(#index, #name)
118118
;
119119
method toString() → core::String
120120
return "E5.${this.{core::_Enum::_name}{core::String}}";
@@ -128,8 +128,8 @@ abstract class InterfaceSetter extends core::Object {
128128
class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/ {
129129
static const field core::List<self::E6> values = #C14;
130130
static const field self::E6 element = #C13;
131-
const constructor •(core::int index, core::String name) → self::E6
132-
: super core::_Enum::•(index, name)
131+
const constructor •(core::int #index, core::String #name) → self::E6
132+
: super core::_Enum::•(#index, #name)
133133
;
134134
method toString() → core::String
135135
return "E6.${this.{core::_Enum::_name}{core::String}}";
@@ -147,8 +147,8 @@ abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImp
147147
class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/ {
148148
static const field core::List<self::E7> values = #C16;
149149
static const field self::E7 element = #C15;
150-
const constructor •(core::int index, core::String name) → self::E7
151-
: super self::_E7&_Enum&MethodImplementation::•(index, name)
150+
const constructor •(core::int #index, core::String #name) → self::E7
151+
: super self::_E7&_Enum&MethodImplementation::•(#index, #name)
152152
;
153153
method toString() → core::String
154154
return "E7.${this.{core::_Enum::_name}{core::String}}";

pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.transformed.expect

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ import "dart:core" as core;
6262
class E1 extends core::_Enum /*isEnum*/ {
6363
static const field core::List<self::E1> values = #C4;
6464
static const field self::E1 element = #C3;
65-
const constructor •(core::int index, core::String name) → self::E1
66-
: super core::_Enum::•(index, name)
65+
const constructor •(core::int #index, core::String #name) → self::E1
66+
: super core::_Enum::•(#index, #name)
6767
;
6868
method toString() → core::String
6969
return "E1.${this.{core::_Enum::_name}{core::String}}";
@@ -72,8 +72,8 @@ class E1 extends core::_Enum /*isEnum*/ {
7272
class E2 extends core::_Enum /*isEnum*/ {
7373
static const field core::List<self::E2> values = #C6;
7474
static const field self::E2 element = #C5;
75-
const constructor •(core::int index, core::String name) → self::E2
76-
: super core::_Enum::•(index, name)
75+
const constructor •(core::int #index, core::String #name) → self::E2
76+
: super core::_Enum::•(#index, #name)
7777
;
7878
method toString() → core::String
7979
return "E2.${this.{core::_Enum::_name}{core::String}}";
@@ -82,8 +82,8 @@ class E2 extends core::_Enum /*isEnum*/ {
8282
class E3 extends core::_Enum /*isEnum*/ {
8383
static const field core::List<self::E3> values = #C8;
8484
static const field self::E3 element = #C7;
85-
const constructor •(core::int index, core::String name) → self::E3
86-
: super core::_Enum::•(index, name)
85+
const constructor •(core::int #index, core::String #name) → self::E3
86+
: super core::_Enum::•(#index, #name)
8787
;
8888
method toString() → core::String
8989
return "E3.${this.{core::_Enum::_name}{core::String}}";
@@ -98,8 +98,8 @@ abstract class InterfaceMethod extends core::Object {
9898
class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/ {
9999
static const field core::List<self::E4> values = #C10;
100100
static const field self::E4 element = #C9;
101-
const constructor •(core::int index, core::String name) → self::E4
102-
: super core::_Enum::•(index, name)
101+
const constructor •(core::int #index, core::String #name) → self::E4
102+
: super core::_Enum::•(#index, #name)
103103
;
104104
method toString() → core::String
105105
return "E4.${this.{core::_Enum::_name}{core::String}}";
@@ -113,8 +113,8 @@ abstract class InterfaceGetter extends core::Object {
113113
class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/ {
114114
static const field core::List<self::E5> values = #C12;
115115
static const field self::E5 element = #C11;
116-
const constructor •(core::int index, core::String name) → self::E5
117-
: super core::_Enum::•(index, name)
116+
const constructor •(core::int #index, core::String #name) → self::E5
117+
: super core::_Enum::•(#index, #name)
118118
;
119119
method toString() → core::String
120120
return "E5.${this.{core::_Enum::_name}{core::String}}";
@@ -128,8 +128,8 @@ abstract class InterfaceSetter extends core::Object {
128128
class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/ {
129129
static const field core::List<self::E6> values = #C14;
130130
static const field self::E6 element = #C13;
131-
const constructor •(core::int index, core::String name) → self::E6
132-
: super core::_Enum::•(index, name)
131+
const constructor •(core::int #index, core::String #name) → self::E6
132+
: super core::_Enum::•(#index, #name)
133133
;
134134
method toString() → core::String
135135
return "E6.${this.{core::_Enum::_name}{core::String}}";
@@ -146,8 +146,8 @@ abstract class _E7&_Enum&MethodImplementation extends core::_Enum implements sel
146146
class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/ {
147147
static const field core::List<self::E7> values = #C16;
148148
static const field self::E7 element = #C15;
149-
const constructor •(core::int index, core::String name) → self::E7
150-
: super self::_E7&_Enum&MethodImplementation::•(index, name)
149+
const constructor •(core::int #index, core::String #name) → self::E7
150+
: super self::_E7&_Enum&MethodImplementation::•(#index, #name)
151151
;
152152
method toString() → core::String
153153
return "E7.${this.{core::_Enum::_name}{core::String}}";

pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.expect

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ import "dart:core" as core;
6262
class E1 extends core::_Enum /*isEnum*/ {
6363
static const field core::List<self::E1> values = #C4;
6464
static const field self::E1 element = #C3;
65-
const constructor •(core::int index, core::String name) → self::E1
66-
: super core::_Enum::•(index, name)
65+
const constructor •(core::int #index, core::String #name) → self::E1
66+
: super core::_Enum::•(#index, #name)
6767
;
6868
method toString() → core::String
6969
return "E1.${this.{core::_Enum::_name}{core::String}}";
@@ -72,8 +72,8 @@ class E1 extends core::_Enum /*isEnum*/ {
7272
class E2 extends core::_Enum /*isEnum*/ {
7373
static const field core::List<self::E2> values = #C6;
7474
static const field self::E2 element = #C5;
75-
const constructor •(core::int index, core::String name) → self::E2
76-
: super core::_Enum::•(index, name)
75+
const constructor •(core::int #index, core::String #name) → self::E2
76+
: super core::_Enum::•(#index, #name)
7777
;
7878
method toString() → core::String
7979
return "E2.${this.{core::_Enum::_name}{core::String}}";
@@ -82,8 +82,8 @@ class E2 extends core::_Enum /*isEnum*/ {
8282
class E3 extends core::_Enum /*isEnum*/ {
8383
static const field core::List<self::E3> values = #C8;
8484
static const field self::E3 element = #C7;
85-
const constructor •(core::int index, core::String name) → self::E3
86-
: super core::_Enum::•(index, name)
85+
const constructor •(core::int #index, core::String #name) → self::E3
86+
: super core::_Enum::•(#index, #name)
8787
;
8888
method toString() → core::String
8989
return "E3.${this.{core::_Enum::_name}{core::String}}";
@@ -98,8 +98,8 @@ abstract class InterfaceMethod extends core::Object {
9898
class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/ {
9999
static const field core::List<self::E4> values = #C10;
100100
static const field self::E4 element = #C9;
101-
const constructor •(core::int index, core::String name) → self::E4
102-
: super core::_Enum::•(index, name)
101+
const constructor •(core::int #index, core::String #name) → self::E4
102+
: super core::_Enum::•(#index, #name)
103103
;
104104
method toString() → core::String
105105
return "E4.${this.{core::_Enum::_name}{core::String}}";
@@ -113,8 +113,8 @@ abstract class InterfaceGetter extends core::Object {
113113
class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/ {
114114
static const field core::List<self::E5> values = #C12;
115115
static const field self::E5 element = #C11;
116-
const constructor •(core::int index, core::String name) → self::E5
117-
: super core::_Enum::•(index, name)
116+
const constructor •(core::int #index, core::String #name) → self::E5
117+
: super core::_Enum::•(#index, #name)
118118
;
119119
method toString() → core::String
120120
return "E5.${this.{core::_Enum::_name}{core::String}}";
@@ -128,8 +128,8 @@ abstract class InterfaceSetter extends core::Object {
128128
class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/ {
129129
static const field core::List<self::E6> values = #C14;
130130
static const field self::E6 element = #C13;
131-
const constructor •(core::int index, core::String name) → self::E6
132-
: super core::_Enum::•(index, name)
131+
const constructor •(core::int #index, core::String #name) → self::E6
132+
: super core::_Enum::•(#index, #name)
133133
;
134134
method toString() → core::String
135135
return "E6.${this.{core::_Enum::_name}{core::String}}";
@@ -147,8 +147,8 @@ abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImp
147147
class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/ {
148148
static const field core::List<self::E7> values = #C16;
149149
static const field self::E7 element = #C15;
150-
const constructor •(core::int index, core::String name) → self::E7
151-
: super self::_E7&_Enum&MethodImplementation::•(index, name)
150+
const constructor •(core::int #index, core::String #name) → self::E7
151+
: super self::_E7&_Enum&MethodImplementation::•(#index, #name)
152152
;
153153
method toString() → core::String
154154
return "E7.${this.{core::_Enum::_name}{core::String}}";

pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.modular.expect

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ import "dart:core" as core;
6262
class E1 extends core::_Enum /*isEnum*/ {
6363
static const field core::List<self::E1> values = #C4;
6464
static const field self::E1 element = #C3;
65-
const constructor •(core::int index, core::String name) → self::E1
66-
: super core::_Enum::•(index, name)
65+
const constructor •(core::int #index, core::String #name) → self::E1
66+
: super core::_Enum::•(#index, #name)
6767
;
6868
method toString() → core::String
6969
return "E1.${this.{core::_Enum::_name}{core::String}}";
@@ -72,8 +72,8 @@ class E1 extends core::_Enum /*isEnum*/ {
7272
class E2 extends core::_Enum /*isEnum*/ {
7373
static const field core::List<self::E2> values = #C6;
7474
static const field self::E2 element = #C5;
75-
const constructor •(core::int index, core::String name) → self::E2
76-
: super core::_Enum::•(index, name)
75+
const constructor •(core::int #index, core::String #name) → self::E2
76+
: super core::_Enum::•(#index, #name)
7777
;
7878
method toString() → core::String
7979
return "E2.${this.{core::_Enum::_name}{core::String}}";
@@ -82,8 +82,8 @@ class E2 extends core::_Enum /*isEnum*/ {
8282
class E3 extends core::_Enum /*isEnum*/ {
8383
static const field core::List<self::E3> values = #C8;
8484
static const field self::E3 element = #C7;
85-
const constructor •(core::int index, core::String name) → self::E3
86-
: super core::_Enum::•(index, name)
85+
const constructor •(core::int #index, core::String #name) → self::E3
86+
: super core::_Enum::•(#index, #name)
8787
;
8888
method toString() → core::String
8989
return "E3.${this.{core::_Enum::_name}{core::String}}";
@@ -98,8 +98,8 @@ abstract class InterfaceMethod extends core::Object {
9898
class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/ {
9999
static const field core::List<self::E4> values = #C10;
100100
static const field self::E4 element = #C9;
101-
const constructor •(core::int index, core::String name) → self::E4
102-
: super core::_Enum::•(index, name)
101+
const constructor •(core::int #index, core::String #name) → self::E4
102+
: super core::_Enum::•(#index, #name)
103103
;
104104
method toString() → core::String
105105
return "E4.${this.{core::_Enum::_name}{core::String}}";
@@ -113,8 +113,8 @@ abstract class InterfaceGetter extends core::Object {
113113
class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/ {
114114
static const field core::List<self::E5> values = #C12;
115115
static const field self::E5 element = #C11;
116-
const constructor •(core::int index, core::String name) → self::E5
117-
: super core::_Enum::•(index, name)
116+
const constructor •(core::int #index, core::String #name) → self::E5
117+
: super core::_Enum::•(#index, #name)
118118
;
119119
method toString() → core::String
120120
return "E5.${this.{core::_Enum::_name}{core::String}}";
@@ -128,8 +128,8 @@ abstract class InterfaceSetter extends core::Object {
128128
class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/ {
129129
static const field core::List<self::E6> values = #C14;
130130
static const field self::E6 element = #C13;
131-
const constructor •(core::int index, core::String name) → self::E6
132-
: super core::_Enum::•(index, name)
131+
const constructor •(core::int #index, core::String #name) → self::E6
132+
: super core::_Enum::•(#index, #name)
133133
;
134134
method toString() → core::String
135135
return "E6.${this.{core::_Enum::_name}{core::String}}";
@@ -147,8 +147,8 @@ abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImp
147147
class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/ {
148148
static const field core::List<self::E7> values = #C16;
149149
static const field self::E7 element = #C15;
150-
const constructor •(core::int index, core::String name) → self::E7
151-
: super self::_E7&_Enum&MethodImplementation::•(index, name)
150+
const constructor •(core::int #index, core::String #name) → self::E7
151+
: super self::_E7&_Enum&MethodImplementation::•(#index, #name)
152152
;
153153
method toString() → core::String
154154
return "E7.${this.{core::_Enum::_name}{core::String}}";

0 commit comments

Comments
 (0)