Skip to content

Commit c3cecaa

Browse files
johnniwintherCommit Queue
authored and
Commit Queue
committed
[cfe] Add test for issue 53720
Closes #53720 Change-Id: I8c704ca47d089a2352414defd1e7fc6f96b52d03 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335463 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 6830caf commit c3cecaa

9 files changed

+302
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by b
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
extension type E1(int i) {
6+
set m(_) {}
7+
}
8+
9+
extension type E2(int i) implements E1 {
10+
void m() {}
11+
}
12+
13+
void main() {
14+
E2(1).m = 10;
15+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */ {
29+
lowered final self::E1 /* = core::int */ #this = i;
30+
return #this;
31+
}
32+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
33+
return self::E1|constructor#(i);
34+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void {}
35+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */ {
36+
lowered final self::E2 /* = core::int */ #this = i;
37+
return #this;
38+
}
39+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
40+
return self::E2|constructor#(i);
41+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void {}
42+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
43+
return () → void => self::E2|m(#this);
44+
static method main() → void {
45+
self::E1|set#m(self::E2|constructor#(1), 10);
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */ {
29+
lowered final self::E1 /* = core::int */ #this = i;
30+
return #this;
31+
}
32+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
33+
return self::E1|constructor#(i);
34+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void {}
35+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */ {
36+
lowered final self::E2 /* = core::int */ #this = i;
37+
return #this;
38+
}
39+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
40+
return self::E2|constructor#(i);
41+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void {}
42+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
43+
return () → void => self::E2|m(#this);
44+
static method main() → void {
45+
self::E1|set#m(self::E2|constructor#(1), 10);
46+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extension type E1(int i) {
2+
set m(_) {}
3+
}
4+
extension type E2(int i) implements E1 {
5+
void m() {}
6+
}
7+
void main() {}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extension type E1(int i) {
2+
set m(_) {}
3+
}
4+
extension type E2(int i) implements E1 {
5+
void m() {}
6+
}
7+
void main() {}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */ {
29+
lowered final self::E1 /* = core::int */ #this = i;
30+
return #this;
31+
}
32+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
33+
return self::E1|constructor#(i);
34+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void {}
35+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */ {
36+
lowered final self::E2 /* = core::int */ #this = i;
37+
return #this;
38+
}
39+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
40+
return self::E2|constructor#(i);
41+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void {}
42+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
43+
return () → void => self::E2|m(#this);
44+
static method main() → void {
45+
self::E1|set#m(self::E2|constructor#(1), 10);
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */ {
29+
lowered final self::E1 /* = core::int */ #this = i;
30+
return #this;
31+
}
32+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
33+
return self::E1|constructor#(i);
34+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void {}
35+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */ {
36+
lowered final self::E2 /* = core::int */ #this = i;
37+
return #this;
38+
}
39+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
40+
return self::E2|constructor#(i);
41+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void {}
42+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
43+
return () → void => self::E2|m(#this);
44+
static method main() → void {
45+
self::E1|set#m(self::E2|constructor#(1), 10);
46+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */
29+
;
30+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
31+
return self::E1|constructor#(i);
32+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void
33+
;
34+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */
35+
;
36+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
37+
return self::E2|constructor#(i);
38+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void
39+
;
40+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
41+
return () → void => self::E2|m(#this);
42+
static method main() → void
43+
;
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
library;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/extension_types/issue53720.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
6+
// void m() {}
7+
// ^
8+
// pkg/front_end/testcases/extension_types/issue53720.dart:6:7: Context: This is the inherited member.
9+
// set m(_) {}
10+
// ^
11+
//
12+
import self as self;
13+
import "dart:core" as core;
14+
15+
extension type E1(core::int i) {
16+
abstract extension-type-member representation-field get i() → core::int;
17+
set m = self::E1|set#m;
18+
constructor • = self::E1|constructor#;
19+
constructor tearoff • = self::E1|constructor#_#new#tearOff;
20+
}
21+
extension type E2(core::int i) implements self::E1 /* = core::int */ {
22+
abstract extension-type-member representation-field get i() → core::int;
23+
method m = self::E2|m;
24+
method tearoff m = self::E2|get#m;
25+
constructor • = self::E2|constructor#;
26+
constructor tearoff • = self::E2|constructor#_#new#tearOff;
27+
}
28+
static extension-type-member method E1|constructor#(core::int i) → self::E1 /* = core::int */ {
29+
lowered final self::E1 /* = core::int */ #this = i;
30+
return #this;
31+
}
32+
static extension-type-member method E1|constructor#_#new#tearOff(core::int i) → self::E1 /* = core::int */
33+
return self::E1|constructor#(i);
34+
static extension-type-member method E1|set#m(lowered final self::E1 /* = core::int */ #this, dynamic _) → void {}
35+
static extension-type-member method E2|constructor#(core::int i) → self::E2 /* = core::int */ {
36+
lowered final self::E2 /* = core::int */ #this = i;
37+
return #this;
38+
}
39+
static extension-type-member method E2|constructor#_#new#tearOff(core::int i) → self::E2 /* = core::int */
40+
return self::E2|constructor#(i);
41+
static extension-type-member method E2|m(lowered final self::E2 /* = core::int */ #this) → void {}
42+
static extension-type-member method E2|get#m(lowered final self::E2 /* = core::int */ #this) → () → void
43+
return () → void => self::E2|m(#this);
44+
static method main() → void {
45+
self::E1|set#m(self::E2|constructor#(1), 10);
46+
}

0 commit comments

Comments
 (0)