Skip to content

Commit 10953e2

Browse files
johnniwintherCommit Queue
authored and
Commit Queue
committed
[cfe] Add test for parenthesized variable names
Change-Id: I2d3964edde49c22d9916fe266ec32e1516dd4f6f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280721 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Chloe Stefantsova <[email protected]>
1 parent 0aff070 commit 10953e2

9 files changed

+73
-52
lines changed

pkg/front_end/testcases/patterns/variable_names.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ abstract class A {
99
num get boz;
1010
bool get qux;
1111
String get quux;
12+
int get foobar;
1213
}
1314

1415
test(x, y, z) {
1516
var qux;
1617
var quux;
17-
if (x case A(:var foo!, :var bar, :var baz?, :var boz as double)) {
18+
if (x case A(:var foo!, :var bar, :var baz?, :var boz as double,
19+
:(var foobar))) {
1820
return 0;
19-
} else if (x case (:var foo!, :var bar, :var baz?, var boz as double)) {
21+
} else if (x case (:var foo!, :var bar, :var baz?, var boz as double,
22+
:(var foobar))) {
2023
return 1;
2124
} else if (x case A(: [1, 2])) { // Error
2225
return 2;

pkg/front_end/testcases/patterns/variable_names.dart.strong.expect

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ library /*isNonNullableByDefault*/;
22
//
33
// Problems in library:
44
//
5-
// pkg/front_end/testcases/patterns/variable_names.dart:21:23: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
5+
// pkg/front_end/testcases/patterns/variable_names.dart:24:23: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
66
// } else if (x case A(: [1, 2])) { // Error
77
// ^
88
//
9-
// pkg/front_end/testcases/patterns/variable_names.dart:23:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
9+
// pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
1010
// } else if (x case (: [1, 2])) { // Error
1111
// ^
1212
//
@@ -24,6 +24,7 @@ abstract class A extends core::Object {
2424
abstract get boz() → core::num;
2525
abstract get qux() → core::bool;
2626
abstract get quux() → core::String;
27+
abstract get foobar() → core::int;
2728
}
2829
static method test(dynamic x, dynamic y, dynamic z) → dynamic {
2930
dynamic qux;
@@ -33,23 +34,25 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
3334
core::int bar;
3435
core::int baz;
3536
core::double boz;
37+
core::int foobar;
3638
final dynamic #3#0 = x;
3739
late final core::int? #3#2 = #3#0{self::A}.{self::A::foo}{core::int?};
3840
late final core::int? #3#5 = #3#0{self::A}.{self::A::baz}{core::int?};
3941
late final core::num #3#7 = #3#0{self::A}.{self::A::boz}{core::num};
40-
if(#3#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t1 = #3#2! in let final dynamic #t2 = foo = #3#2! in true) && (let final dynamic #t3 = bar = #3#0{self::A}.{self::A::bar}{core::int} in true) && (!(#3#5 == null) ?{core::bool} let final dynamic #t4 = baz = #3#5 in true : false) && (let final dynamic #t5 = #3#7 as{ForNonNullableByDefault} core::double in let final dynamic #t6 = boz = #3#7 as{ForNonNullableByDefault} core::double in true)) {
42+
if(#3#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t1 = #3#2! in let final dynamic #t2 = foo = #3#2! in true) && (let final dynamic #t3 = bar = #3#0{self::A}.{self::A::bar}{core::int} in true) && (!(#3#5 == null) ?{core::bool} let final dynamic #t4 = baz = #3#5 in true : false) && (let final dynamic #t5 = #3#7 as{ForNonNullableByDefault} core::double in let final dynamic #t6 = boz = #3#7 as{ForNonNullableByDefault} core::double in true) && (let final dynamic #t7 = foobar = #3#0{self::A}.{self::A::foobar}{core::int} in true)) {
4143
return 0;
4244
}
4345
else {
4446
dynamic foo;
4547
dynamic bar;
4648
dynamic baz;
4749
core::double boz;
50+
dynamic foobar;
4851
final dynamic #2#0 = x;
49-
late final core::Object? #2#2 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.foo{core::Object?};
50-
late final core::Object? #2#5 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.baz{core::Object?};
51-
late final core::Object? #2#7 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.$1{core::Object?};
52-
if(#2#0 is{ForNonNullableByDefault} (core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?}) && (let final dynamic #t7 = #2#2! in let final dynamic #t8 = foo = #2#2! in true) && (let final dynamic #t9 = bar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.bar{core::Object?} in true) && (!(#2#5 == null) ?{core::bool} let final dynamic #t10 = baz = #2#5 in true : false) && (let final dynamic #t11 = #2#7 as{ForNonNullableByDefault} core::double in let final dynamic #t12 = boz = #2#7 as{ForNonNullableByDefault} core::double in true)) {
52+
late final core::Object? #2#2 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foo{core::Object?};
53+
late final core::Object? #2#5 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.baz{core::Object?};
54+
late final core::Object? #2#7 = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.$1{core::Object?};
55+
if(#2#0 is{ForNonNullableByDefault} (core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?}) && (let final dynamic #t8 = #2#2! in let final dynamic #t9 = foo = #2#2! in true) && (let final dynamic #t10 = bar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.bar{core::Object?} in true) && (!(#2#5 == null) ?{core::bool} let final dynamic #t11 = baz = #2#5 in true : false) && (let final dynamic #t12 = #2#7 as{ForNonNullableByDefault} core::double in let final dynamic #t13 = boz = #2#7 as{ForNonNullableByDefault} core::double in true) && (let final dynamic #t14 = foobar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foobar{core::Object?} in true)) {
5356
return 1;
5457
}
5558
else {
@@ -59,7 +62,7 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
5962
}
6063
else {
6164
final dynamic #0#0 = x;
62-
if(#0#0 is{ForNonNullableByDefault} (core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/variable_names.dart:23:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
65+
if(#0#0 is{ForNonNullableByDefault} (core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
6366
} else if (x case (: [1, 2])) { // Error
6467
^") {
6568
return 3;
@@ -70,12 +73,12 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
7073
}
7174
block {
7275
final dynamic #4#0 = y;
73-
if(!(#4#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t13 = qux = #4#0{self::A}.{self::A::qux}{core::bool} in true) && (let final dynamic #t14 = quux = #4#0{self::A}.{self::A::quux}{core::String} in true)))
76+
if(!(#4#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t15 = qux = #4#0{self::A}.{self::A::qux}{core::bool} in true) && (let final dynamic #t16 = quux = #4#0{self::A}.{self::A::quux}{core::String} in true)))
7477
throw new _in::ReachabilityError::•();
7578
} =>#4#0;
7679
block {
7780
final dynamic #5#0 = z;
78-
if(!(#5#0 is{ForNonNullableByDefault} (core::Object?, {quux: core::Object?}) && (let final dynamic #t15 = qux = #5#0{(core::Object?, {quux: core::Object?})}.$1{core::Object?} in true) && (let final dynamic #t16 = quux = #5#0{(core::Object?, {quux: core::Object?})}.quux{core::Object?} in true)))
81+
if(!(#5#0 is{ForNonNullableByDefault} (core::Object?, {quux: core::Object?}) && (let final dynamic #t17 = qux = #5#0{(core::Object?, {quux: core::Object?})}.$1{core::Object?} in true) && (let final dynamic #t18 = quux = #5#0{(core::Object?, {quux: core::Object?})}.quux{core::Object?} in true)))
7982
throw new _in::ReachabilityError::•();
8083
} =>#5#0;
8184
}

pkg/front_end/testcases/patterns/variable_names.dart.strong.transformed.expect

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ library /*isNonNullableByDefault*/;
22
//
33
// Problems in library:
44
//
5-
// pkg/front_end/testcases/patterns/variable_names.dart:21:23: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
5+
// pkg/front_end/testcases/patterns/variable_names.dart:24:23: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
66
// } else if (x case A(: [1, 2])) { // Error
77
// ^
88
//
9-
// pkg/front_end/testcases/patterns/variable_names.dart:23:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
9+
// pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
1010
// } else if (x case (: [1, 2])) { // Error
1111
// ^
1212
//
@@ -24,6 +24,7 @@ abstract class A extends core::Object {
2424
abstract get boz() → core::num;
2525
abstract get qux() → core::bool;
2626
abstract get quux() → core::String;
27+
abstract get foobar() → core::int;
2728
}
2829
static method test(dynamic x, dynamic y, dynamic z) → dynamic {
2930
dynamic qux;
@@ -33,6 +34,7 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
3334
core::int bar;
3435
core::int baz;
3536
core::double boz;
37+
core::int foobar;
3638
final dynamic #3#0 = x;
3739
function ##3#2#initializer() → core::int?
3840
return #3#0{self::A}.{self::A::foo}{core::int?};
@@ -43,25 +45,26 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
4345
function ##3#7#initializer() → core::num
4446
return #3#0{self::A}.{self::A::boz}{core::num};
4547
late final core::num #3#7 = ##3#7#initializer(){() → core::num};
46-
if(#3#0 is{ForNonNullableByDefault} self::A && (let final core::int? #t1 = #3#2! in let final core::int? #t2 = foo = #3#2! in true) && (let final core::int #t3 = bar = #3#0{self::A}.{self::A::bar}{core::int} in true) && (!(#3#5 == null) ?{core::bool} let final core::int? #t4 = baz = #3#5 in true : false) && (let final core::double #t5 = #3#7 as{ForNonNullableByDefault} core::double in let final core::double #t6 = boz = #3#7 as{ForNonNullableByDefault} core::double in true)) {
48+
if(#3#0 is{ForNonNullableByDefault} self::A && (let final core::int? #t1 = #3#2! in let final core::int? #t2 = foo = #3#2! in true) && (let final core::int #t3 = bar = #3#0{self::A}.{self::A::bar}{core::int} in true) && (!(#3#5 == null) ?{core::bool} let final core::int? #t4 = baz = #3#5 in true : false) && (let final core::double #t5 = #3#7 as{ForNonNullableByDefault} core::double in let final core::double #t6 = boz = #3#7 as{ForNonNullableByDefault} core::double in true) && (let final core::int #t7 = foobar = #3#0{self::A}.{self::A::foobar}{core::int} in true)) {
4749
return 0;
4850
}
4951
else {
5052
dynamic foo;
5153
dynamic bar;
5254
dynamic baz;
5355
core::double boz;
56+
dynamic foobar;
5457
final dynamic #2#0 = x;
5558
function ##2#2#initializer() → core::Object?
56-
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.foo{core::Object?};
59+
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foo{core::Object?};
5760
late final core::Object? #2#2 = ##2#2#initializer(){() → core::Object?};
5861
function ##2#5#initializer() → core::Object?
59-
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.baz{core::Object?};
62+
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.baz{core::Object?};
6063
late final core::Object? #2#5 = ##2#5#initializer(){() → core::Object?};
6164
function ##2#7#initializer() → core::Object?
62-
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.$1{core::Object?};
65+
return #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.$1{core::Object?};
6366
late final core::Object? #2#7 = ##2#7#initializer(){() → core::Object?};
64-
if(#2#0 is{ForNonNullableByDefault} (core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?}) && (let final core::Object? #t7 = #2#2! in let final core::Object? #t8 = foo = #2#2! in true) && (let final core::Object? #t9 = bar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?})}.bar{core::Object?} in true) && (!(#2#5 == null) ?{core::bool} let final core::Object? #t10 = baz = #2#5 in true : false) && (let final core::double #t11 = #2#7 as{ForNonNullableByDefault} core::double in let final core::double #t12 = boz = #2#7 as{ForNonNullableByDefault} core::double in true)) {
67+
if(#2#0 is{ForNonNullableByDefault} (core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?}) && (let final core::Object? #t8 = #2#2! in let final core::Object? #t9 = foo = #2#2! in true) && (let final core::Object? #t10 = bar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.bar{core::Object?} in true) && (!(#2#5 == null) ?{core::bool} let final core::Object? #t11 = baz = #2#5 in true : false) && (let final core::double #t12 = #2#7 as{ForNonNullableByDefault} core::double in let final core::double #t13 = boz = #2#7 as{ForNonNullableByDefault} core::double in true) && (let final core::Object? #t14 = foobar = #2#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foobar{core::Object?} in true)) {
6568
return 1;
6669
}
6770
else {
@@ -71,7 +74,7 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
7174
}
7275
else {
7376
final dynamic #0#0 = x;
74-
if(#0#0 is{ForNonNullableByDefault} (core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/variable_names.dart:23:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
77+
if(#0#0 is{ForNonNullableByDefault} (core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
7578
} else if (x case (: [1, 2])) { // Error
7679
^") {
7780
return 3;
@@ -82,12 +85,12 @@ static method test(dynamic x, dynamic y, dynamic z) → dynamic {
8285
}
8386
block {
8487
final dynamic #4#0 = y;
85-
if(!(#4#0 is{ForNonNullableByDefault} self::A && (let final core::bool #t13 = qux = #4#0{self::A}.{self::A::qux}{core::bool} in true) && (let final core::String #t14 = quux = #4#0{self::A}.{self::A::quux}{core::String} in true)))
88+
if(!(#4#0 is{ForNonNullableByDefault} self::A && (let final core::bool #t15 = qux = #4#0{self::A}.{self::A::qux}{core::bool} in true) && (let final core::String #t16 = quux = #4#0{self::A}.{self::A::quux}{core::String} in true)))
8689
throw new _in::ReachabilityError::•();
8790
} =>#4#0;
8891
block {
8992
final dynamic #5#0 = z;
90-
if(!(#5#0 is{ForNonNullableByDefault} (core::Object?, {quux: core::Object?}) && (let final core::Object? #t15 = qux = #5#0{(core::Object?, {quux: core::Object?})}.$1{core::Object?} in true) && (let final core::Object? #t16 = quux = #5#0{(core::Object?, {quux: core::Object?})}.quux{core::Object?} in true)))
93+
if(!(#5#0 is{ForNonNullableByDefault} (core::Object?, {quux: core::Object?}) && (let final core::Object? #t17 = qux = #5#0{(core::Object?, {quux: core::Object?})}.$1{core::Object?} in true) && (let final core::Object? #t18 = quux = #5#0{(core::Object?, {quux: core::Object?})}.quux{core::Object?} in true)))
9194
throw new _in::ReachabilityError::•();
9295
} =>#5#0;
9396
}

pkg/front_end/testcases/patterns/variable_names.dart.textual_outline.expect

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ abstract class A {
55
num get boz;
66
bool get qux;
77
String get quux;
8+
int get foobar;
89
}
910

1011
test(x, y, z) {}

pkg/front_end/testcases/patterns/variable_names.dart.textual_outline_modelled.expect

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ abstract class A {
44
int? get baz;
55
int? get foo;
66
int get bar;
7+
int get foobar;
78
num get boz;
89
}
910

0 commit comments

Comments
 (0)