Skip to content

Commit 48503c8

Browse files
Don't export unnamed mixins.
Fixes #30553 [email protected] Review-Url: https://codereview.chromium.org/3004703002 .
1 parent 05ca90a commit 48503c8

27 files changed

+208
-139
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ class KernelLibraryBuilder
242242
if (index != -1) {
243243
name = name.substring(0, index);
244244
}
245-
name = "$name&${mixin.name}$signature";
245+
name = "_$name&${mixin.name}$signature";
246246
builder = mixinApplicationClasses[name];
247247
}
248248
if (builder == null) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:async_helper/async_helper.dart' show asyncTest;
6+
7+
import 'package:front_end/src/testing/compiler_common.dart';
8+
import 'package:front_end/front_end.dart';
9+
10+
main() {
11+
asyncTest(() async {
12+
var sources = <String, dynamic>{
13+
'a.dart': 'class A extends Object with M {} class M {}',
14+
'b.dart': 'import "a.dart"; class B extends Object with M {}',
15+
'c.dart': 'export "a.dart"; export "b.dart";',
16+
};
17+
await compileUnit(sources.keys.toList(), sources,
18+
options: new CompilerOptions()
19+
..onError = (e) => throw '${e.severity}: ${e.message}');
20+
});
21+
}

pkg/front_end/testcases/compile.status

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ rasta/class_member: Fail
5252
rasta/constant_get_and_invoke: Fail
5353
rasta/deferred_lib: Fail
5454
rasta/deferred_load: Fail
55-
rasta/duplicated_mixin: Fail
5655
rasta/for_loop: Fail
5756
rasta/generic_factory: Fail
5857
rasta/issue_000001: Fail
@@ -107,5 +106,6 @@ regress/issue_29985: Crash # Issue 29985.
107106
regress/issue_29987: Crash # Issue 29987.
108107

109108
ambiguous_exports: RuntimeError # Expected, this file exports two main methods.
109+
rasta/duplicated_mixin: RuntimeError # Expected, this file has no main method.
110110
rasta/export: RuntimeError # Expected, this file has no main method.
111111
rasta/foo: RuntimeError # Expected, this file has no main method.

pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ class F extends core::Object implements self::B {
3939
: super core::Object::•()
4040
;
4141
}
42-
abstract class Object&B = core::Object with self::B {
42+
abstract class _Object&B = core::Object with self::B {
4343
}
44-
class G extends self::Object&B {
44+
class G extends self::_Object&B {
4545
field dynamic x = null;
4646
default constructor •() → void
4747
: super core::Object::•()

pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class F extends core::Object implements self::B {
3333
default constructor •() → void
3434
;
3535
}
36-
abstract class Object&B = core::Object with self::B {
36+
abstract class _Object&B = core::Object with self::B {
3737
}
38-
class G extends self::Object&B {
38+
class G extends self::_Object&B {
3939
field dynamic x;
4040
default constructor •() → void
4141
;

pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ class F extends core::Object implements self::B {
3939
: super core::Object::•()
4040
;
4141
}
42-
abstract class Object&B = core::Object with self::B {
42+
abstract class _Object&B = core::Object with self::B {
4343
}
44-
class G extends self::Object&B {
44+
class G extends self::_Object&B {
4545
field core::int x = null;
4646
default constructor •() → void
4747
: super core::Object::•()

pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class F extends core::Object implements self::B {
3838
: super core::Object::•()
3939
;
4040
}
41-
abstract class Object&B = core::Object with self::B {
41+
abstract class _Object&B = core::Object with self::B {
4242
}
43-
class G extends self::Object&B {
43+
class G extends self::_Object&B {
4444
field dynamic x = null;
4545
default constructor •() → void
4646
: super core::Object::•()

pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class F extends core::Object implements self::B {
3333
default constructor •() → void
3434
;
3535
}
36-
abstract class Object&B = core::Object with self::B {
36+
abstract class _Object&B = core::Object with self::B {
3737
}
38-
class G extends self::Object&B {
38+
class G extends self::_Object&B {
3939
field dynamic x;
4040
default constructor •() → void
4141
;

pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class F extends core::Object implements self::B {
3838
: super core::Object::•()
3939
;
4040
}
41-
abstract class Object&B = core::Object with self::B {
41+
abstract class _Object&B = core::Object with self::B {
4242
}
43-
class G extends self::Object&B {
43+
class G extends self::_Object&B {
4444
field core::int x = null;
4545
default constructor •() → void
4646
: super core::Object::•()

pkg/front_end/testcases/mixin.dart.direct.expect

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ library;
22
import self as self;
33
import "dart:core" as core;
44

5-
abstract class Object&M1 = core::Object with self::M1 {
5+
abstract class _Object&M1 = core::Object with self::M1 {
66
}
7-
abstract class Object&M1&M2 = self::Object&M1 with self::M2 {
7+
abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
88
}
9-
class B extends self::Object&M1&M2 {
9+
class B extends self::__Object&M1&M2 {
1010
constructor •(dynamic value) → void
1111
: super core::Object::•()
1212
;
@@ -25,7 +25,7 @@ abstract class M2 extends core::Object {
2525
method m() → dynamic
2626
return core::print("M2");
2727
}
28-
class C extends self::Object&M1&M2 {
28+
class C extends self::__Object&M1&M2 {
2929
constructor •(dynamic value) → void
3030
: super core::Object::•()
3131
;
@@ -37,9 +37,9 @@ abstract class G1<T extends core::Object> extends core::Object {
3737
method m() → dynamic
3838
return core::print(self::G1::T);
3939
}
40-
abstract class Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::Object&G1^^#T0::#T0> {
40+
abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
4141
}
42-
class D<S extends core::Object> extends self::Object&G1^^#T0<self::D::S> {
42+
class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
4343
default constructor •() → void
4444
: super core::Object::•()
4545
;

pkg/front_end/testcases/mixin.dart.outline.expect

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ library;
22
import self as self;
33
import "dart:core" as core;
44

5-
abstract class Object&M1 = core::Object with self::M1 {
5+
abstract class _Object&M1 = core::Object with self::M1 {
66
}
7-
abstract class Object&M1&M2 = self::Object&M1 with self::M2 {
7+
abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
88
}
9-
class B extends self::Object&M1&M2 {
9+
class B extends self::__Object&M1&M2 {
1010
constructor •(dynamic value) → void
1111
;
1212
}
@@ -22,7 +22,7 @@ abstract class M2 extends core::Object {
2222
method m() → dynamic
2323
;
2424
}
25-
class C extends self::Object&M1&M2 {
25+
class C extends self::__Object&M1&M2 {
2626
constructor •(dynamic value) → void
2727
;
2828
}
@@ -32,9 +32,9 @@ abstract class G1<T extends core::Object> extends core::Object {
3232
method m() → dynamic
3333
;
3434
}
35-
abstract class Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::Object&G1^^#T0::#T0> {
35+
abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
3636
}
37-
class D<S extends core::Object> extends self::Object&G1^^#T0<self::D::S> {
37+
class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
3838
default constructor •() → void
3939
;
4040
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
abstract class _Object&M1 = core::Object with self::M1 {
6+
}
7+
abstract class __Object&M1&M2 = self::_Object&M1 with self::M2 {
8+
}
9+
class B extends self::__Object&M1&M2 {
10+
constructor •(dynamic value) → void
11+
: super core::Object::•()
12+
;
13+
}
14+
abstract class M1 extends core::Object {
15+
default constructor •() → void
16+
: super core::Object::•()
17+
;
18+
method m() → dynamic
19+
return core::print("M1");
20+
}
21+
abstract class M2 extends core::Object {
22+
default constructor •() → void
23+
: super core::Object::•()
24+
;
25+
method m() → dynamic
26+
return core::print("M2");
27+
}
28+
class C extends self::__Object&M1&M2 {
29+
constructor •(dynamic value) → void
30+
: super core::Object::•()
31+
;
32+
}
33+
abstract class G1<T extends core::Object> extends core::Object {
34+
default constructor •() → void
35+
: super core::Object::•()
36+
;
37+
method m() → dynamic
38+
return core::print(self::G1::T);
39+
}
40+
abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
41+
}
42+
class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
43+
default constructor •() → void
44+
: super core::Object::•()
45+
;
46+
}
47+
static method main() → dynamic {
48+
new self::B::•(null).{self::M2::m}();
49+
new self::C::•(null).{self::M2::m}();
50+
new self::D::•<dynamic>().{self::G1::m}();
51+
new self::D::•<core::int>().{self::G1::m}();
52+
new self::D::•<core::List<core::int>>().{self::G1::m}();
53+
}

pkg/front_end/testcases/outline.status

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ rasta/issue_000045: Fail
272272
rasta/issue_000046: Fail
273273
rasta/issue_000047: Fail
274274
rasta/native_is_illegal: Pass # Issue 29763
275-
rasta/super_mixin: Fail
276275
rasta/type_with_parse_error: Fail
277276

278277
regress/issue_29977: Crash # Issue 29977.

pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ class Mixin extends core::Object {
88
: super core::Object::•()
99
;
1010
}
11-
abstract class Object&Mixin = core::Object with self::Mixin {
11+
abstract class _Object&Mixin = core::Object with self::Mixin {
1212
}
13-
abstract class Object&Mixin&Mixin = self::Object&Mixin with self::Mixin {
13+
abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
1414
}
15-
class A extends self::Object&Mixin&Mixin {
15+
class A extends self::__Object&Mixin&Mixin {
1616
default constructor •() → void
1717
: super core::Object::•()
1818
;

pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ class Mixin extends core::Object {
77
default constructor •() → void
88
;
99
}
10-
abstract class Object&Mixin = core::Object with self::Mixin {
10+
abstract class _Object&Mixin = core::Object with self::Mixin {
1111
}
12-
abstract class Object&Mixin&Mixin = self::Object&Mixin with self::Mixin {
12+
abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
1313
}
14-
class A extends self::Object&Mixin&Mixin {
14+
class A extends self::__Object&Mixin&Mixin {
1515
default constructor •() → void
1616
;
1717
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class Mixin extends core::Object {
6+
field dynamic field = null;
7+
default constructor •() → void
8+
: super core::Object::•()
9+
;
10+
}
11+
abstract class _Object&Mixin = core::Object with self::Mixin {
12+
}
13+
abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
14+
}
15+
class A extends self::__Object&Mixin&Mixin {
16+
default constructor •() → void
17+
: super core::Object::•()
18+
;
19+
}

pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ class Mixin extends core::Object {
1414
method foo() → dynamic
1515
return core::print("foo");
1616
}
17-
abstract class Base&Mixin = self::Base with self::Mixin {
17+
abstract class _Base&Mixin = self::Base with self::Mixin {
1818
}
19-
class Sub extends self::Base&Mixin {
19+
class Sub extends self::_Base&Mixin {
2020
default constructor •() → void
2121
: super self::Base::•()
2222
;

pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ class Mixin extends core::Object {
1212
method foo() → dynamic
1313
;
1414
}
15-
abstract class Base&Mixin = self::Base with self::Mixin {
15+
abstract class _Base&Mixin = self::Base with self::Mixin {
1616
}
17-
class Sub extends self::Base&Mixin {
17+
class Sub extends self::_Base&Mixin {
1818
default constructor •() → void
1919
;
2020
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class Base extends core::Object {
6+
default constructor •() → void
7+
: super core::Object::•()
8+
;
9+
}
10+
class Mixin extends core::Object {
11+
default constructor •() → void
12+
: super core::Object::•()
13+
;
14+
method foo() → dynamic
15+
return core::print("foo");
16+
}
17+
abstract class _Base&Mixin = self::Base with self::Mixin {
18+
}
19+
class Sub extends self::_Base&Mixin {
20+
default constructor •() → void
21+
: super self::Base::•()
22+
;
23+
}
24+
static method main() → dynamic {
25+
new self::Sub::•().{self::Mixin::foo}();
26+
}

pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ class Mixin extends core::Object {
1010
method foo() → dynamic
1111
return 87;
1212
}
13-
abstract class Object&Mixin = core::Object with self::Mixin {
13+
abstract class _Object&Mixin = core::Object with self::Mixin {
1414
}
15-
class Foo extends self::Object&Mixin {
15+
class Foo extends self::_Object&Mixin {
1616
default constructor •() → void
1717
: super core::Object::•()
1818
;

pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ class Mixin extends core::Object {
99
method foo() → dynamic
1010
;
1111
}
12-
abstract class Object&Mixin = core::Object with self::Mixin {
12+
abstract class _Object&Mixin = core::Object with self::Mixin {
1313
}
14-
class Foo extends self::Object&Mixin {
14+
class Foo extends self::_Object&Mixin {
1515
default constructor •() → void
1616
;
1717
method foo() → dynamic

0 commit comments

Comments
 (0)