[cfe] Anonymous mixins -- propagate class modifiers and fix with base on clause
Implements the proposed spec for dart-lang/language#2830 and along the way, fixes another change with anonymous mixins erroring in on-clauses.
Change-Id: I15ed7370f9099d9de89d80f5844db76f58fbd216
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/284481
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index bc4b42c..f08ad33 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -293,6 +293,29 @@
cls.isBase = isBase;
cls.isInterface = isInterface;
cls.isFinal = isFinal;
+
+ // Anonymous mixins have to propagate certain class modifiers.
+ if (cls.isAnonymousMixin) {
+ Class? superclass = cls.superclass;
+ Class? mixedInClass = cls.mixedInClass;
+ // If either [superclass] or [mixedInClass] is sealed, the current
+ // anonymous mixin is sealed.
+ if (superclass != null && superclass.isSealed ||
+ mixedInClass != null && mixedInClass.isSealed) {
+ cls.isSealed = true;
+ } else {
+ // Otherwise, if either [superclass] or [mixedInClass] is base or final,
+ // then the current anonymous mixin is final.
+ bool superclassIsBaseOrFinal =
+ superclass != null && (superclass.isBase || superclass.isFinal);
+ bool mixedInClassIsBaseOrFinal = mixedInClass != null &&
+ (mixedInClass.isBase || mixedInClass.isFinal);
+ if (superclassIsBaseOrFinal || mixedInClassIsBaseOrFinal) {
+ cls.isFinal = true;
+ }
+ }
+ }
+
if (interfaceBuilders != null) {
for (int i = 0; i < interfaceBuilders!.length; ++i) {
interfaceBuilders![i] = _checkSupertype(interfaceBuilders![i]);
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index c99837d..2aa2507 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -2187,10 +2187,8 @@
.withArguments(supertypeDeclaration.fullNameForErrors),
supertypeBuilder.charOffset ?? TreeNode.noOffset,
noLength);
- } else if (supertypeDeclaration.isFinal &&
- // TODO(kallentu): Error case where the class has a singular on
- // clause. Change with the new spec changes.
- !cls.isMixinDeclaration) {
+ } else if (supertypeDeclaration.isFinal && !cls.isMixinDeclaration) {
+ // Error case where the class has a singular on-clause.
cls.addProblem(
templateFinalClassExtendedOutsideOfLibrary
.withArguments(supertypeDeclaration.fullNameForErrors),
@@ -2202,8 +2200,7 @@
// Report error for extending a sealed class outside of its library.
if (isSealedClassEnabled(supertypeDeclaration) &&
supertypeDeclaration.isSealed &&
- // TODO(kallentu): Error case where the class has a singular on
- // clause. Remove with the new spec changes.
+ // Error case where the class has a singular on-clause.
!cls.isMixinDeclaration) {
cls.addProblem(
templateSealedClassSubtypeOutsideOfLibrary
@@ -2276,7 +2273,7 @@
if (isClassModifiersEnabled(interfaceDeclaration)) {
// Report an error for a class implementing a base class outside of
// its library.
- if (interfaceDeclaration.isBase) {
+ if (interfaceDeclaration.isBase && !cls.cls.isAnonymousMixin) {
if (interfaceDeclaration.isMixinDeclaration) {
cls.addProblem(
templateBaseMixinImplementedOutsideOfLibrary
@@ -2291,8 +2288,6 @@
noLength);
}
} else if (interfaceDeclaration.isFinal &&
- // TODO(kallentu): Error case where the class has multiple on
- // clauses. Change with the new spec changes.
!cls.cls.isAnonymousMixin) {
if (interfaceDeclaration.isMixinDeclaration) {
cls.addProblem(
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart
new file mode 100644
index 0000000..58a3ab0
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+final mixin M1 {}
+sealed mixin M2 {}
+base class S {}
+
+final class C extends S with M1, M2 {}
+final class D = S with M1, M2;
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.expect
new file mode 100644
index 0000000..ea0aaef
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ : super core::Object::•()
+ ;
+}
+abstract final class _C&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 = self::_C&S&M1 with self::M2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ : super self::_C&S&M1&M2::•()
+ ;
+}
+abstract final class _D&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D = self::_D&S&M1 with self::M2 {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.transformed.expect
new file mode 100644
index 0000000..1051437
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.strong.transformed.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ : super core::Object::•()
+ ;
+}
+abstract final class _C&S&M1 extends self::S implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 extends self::_C&S&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ : super self::_C&S&M1&M2::•()
+ ;
+}
+abstract final class _D&S&M1 extends self::S implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D extends self::_D&S&M1 implements self::M2 /*isEliminatedMixin*/ {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.textual_outline.expect
new file mode 100644
index 0000000..e2c8423
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+final
+mixin M1 {}
+sealed
+mixin M2 {}
+base class S {}
+final class C extends S with M1, M2 {}
+final class D = S with M1, M2;
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.expect
new file mode 100644
index 0000000..ea0aaef
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ : super core::Object::•()
+ ;
+}
+abstract final class _C&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 = self::_C&S&M1 with self::M2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ : super self::_C&S&M1&M2::•()
+ ;
+}
+abstract final class _D&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D = self::_D&S&M1 with self::M2 {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..ea0aaef
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ : super core::Object::•()
+ ;
+}
+abstract final class _C&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 = self::_C&S&M1 with self::M2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ : super self::_C&S&M1&M2::•()
+ ;
+}
+abstract final class _D&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D = self::_D&S&M1 with self::M2 {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.outline.expect
new file mode 100644
index 0000000..b398883
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ ;
+}
+abstract final class _C&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 = self::_C&S&M1 with self::M2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ ;
+}
+abstract final class _D&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D = self::_D&S&M1 with self::M2 {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.transformed.expect
new file mode 100644
index 0000000..1051437
--- /dev/null
+++ b/pkg/front_end/testcases/class_modifiers/anonymous_mixin.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract final class M1 extends core::Object /*isMixinDeclaration*/ {
+}
+abstract sealed class M2 extends core::Object /*isMixinDeclaration*/ {
+}
+base class S extends core::Object {
+ synthetic constructor •() → self::S
+ : super core::Object::•()
+ ;
+}
+abstract final class _C&S&M1 extends self::S implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C&S&M1
+ : super self::S::•()
+ ;
+}
+abstract sealed class _C&S&M1&M2 extends self::_C&S&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_C&S&M1&M2
+ : super self::_C&S&M1::•()
+ ;
+}
+final class C extends self::_C&S&M1&M2 {
+ synthetic constructor •() → self::C
+ : super self::_C&S&M1&M2::•()
+ ;
+}
+abstract final class _D&S&M1 extends self::S implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_D&S&M1
+ : super self::S::•()
+ ;
+}
+final class D extends self::_D&S&M1 implements self::M2 /*isEliminatedMixin*/ {
+ synthetic constructor •() → self::D
+ : super self::_D&S&M1::•()
+ ;
+}
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart
index 8e002e8..dcadef6 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart
@@ -4,6 +4,14 @@
import 'main_lib.dart';
-class ImplementsBaseClass implements A {}
+class ImplementsBaseClass implements A {} /* Error */
-class ImplementsBaseMixin implements M {}
+class ImplementsBaseMixin implements M {} /* Error */
+
+enum EnumImplementsBaseMixin implements M { x } /* Error */
+
+mixin MixinOnA on A {} /* Ok */
+
+mixin MixinOnM on M {} /* Ok */
+
+mixin MixinOnAM on A, M {} /* Ok */
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.expect
index 5299a30..f6d6674 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -26,6 +30,26 @@
: super core::Object::•()
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = #C4;
+ enum-element static const field self::EnumImplementsBaseMixin x = #C3;
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ : super core::Object::•()
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
library /*isNonNullableByDefault*/;
import self as mai;
@@ -38,3 +62,17 @@
}
abstract base class M extends core::Object /*isMixinDeclaration*/ {
}
+
+constants {
+ #C1 = 0
+ #C2 = "x"
+ #C3 = self::EnumImplementsBaseMixin {index:#C1, _name:#C2}
+ #C4 = <self::EnumImplementsBaseMixin>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- EnumImplementsBaseMixin. (from org-dartlang-testcase:///main.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.transformed.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.transformed.expect
index 5299a30..f6d6674 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.strong.transformed.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -26,6 +30,26 @@
: super core::Object::•()
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = #C4;
+ enum-element static const field self::EnumImplementsBaseMixin x = #C3;
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ : super core::Object::•()
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
library /*isNonNullableByDefault*/;
import self as mai;
@@ -38,3 +62,17 @@
}
abstract base class M extends core::Object /*isMixinDeclaration*/ {
}
+
+constants {
+ #C1 = 0
+ #C2 = "x"
+ #C3 = self::EnumImplementsBaseMixin {index:#C1, _name:#C2}
+ #C4 = <self::EnumImplementsBaseMixin>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- EnumImplementsBaseMixin. (from org-dartlang-testcase:///main.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline.expect
index bab98b9..322e35e 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline.expect
@@ -3,3 +3,9 @@
class ImplementsBaseClass implements A {}
class ImplementsBaseMixin implements M {}
+
+enum EnumImplementsBaseMixin implements M { x }
+
+mixin MixinOnA on A {}
+mixin MixinOnM on M {}
+mixin MixinOnAM on A, M {}
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline_modelled.expect
index bab98b9..cba6b4e 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.textual_outline_modelled.expect
@@ -3,3 +3,9 @@
class ImplementsBaseClass implements A {}
class ImplementsBaseMixin implements M {}
+
+enum EnumImplementsBaseMixin implements M { x }
+
+mixin MixinOnA on A {}
+mixin MixinOnAM on A, M {}
+mixin MixinOnM on M {}
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.expect
index 5299a30..3093c50 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -26,6 +30,26 @@
: super core::Object::•()
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = #C4;
+ enum-element static const field self::EnumImplementsBaseMixin x = #C3;
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ : super core::Object::•()
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
library /*isNonNullableByDefault*/;
import self as mai;
@@ -38,3 +62,17 @@
}
abstract base class M extends core::Object /*isMixinDeclaration*/ {
}
+
+constants {
+ #C1 = 0
+ #C2 = "x"
+ #C3 = self::EnumImplementsBaseMixin {index:#C1, _name:#C2}
+ #C4 = <self::EnumImplementsBaseMixin*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- EnumImplementsBaseMixin. (from org-dartlang-testcase:///main.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.modular.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.modular.expect
index 1016bbf..14fc88b 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.modular.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -26,3 +30,37 @@
: super core::Object::•()
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = #C4;
+ enum-element static const field self::EnumImplementsBaseMixin x = #C3;
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ : super core::Object::•()
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
+
+constants {
+ #C1 = 0
+ #C2 = "x"
+ #C3 = self::EnumImplementsBaseMixin {index:#C1, _name:#C2}
+ #C4 = <self::EnumImplementsBaseMixin*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- EnumImplementsBaseMixin. (from org-dartlang-testcase:///main.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.outline.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.outline.expect
index 3406058..f0460aa 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.outline.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -24,6 +28,25 @@
synthetic constructor •() → self::ImplementsBaseMixin
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = const <self::EnumImplementsBaseMixin>[self::EnumImplementsBaseMixin::x];
+ enum-element static const field self::EnumImplementsBaseMixin x = const self::EnumImplementsBaseMixin::•(0, "x");
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
library /*isNonNullableByDefault*/;
import self as mai;
@@ -35,3 +58,9 @@
}
abstract base class M extends core::Object /*isMixinDeclaration*/ {
}
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:11:6 -> ListConstant(const <EnumImplementsBaseMixin*>[const EnumImplementsBaseMixin{_Enum.index: 0, _Enum._name: "x"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:11:45 -> InstanceConstant(const EnumImplementsBaseMixin{_Enum.index: 0, _Enum._name: "x"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.transformed.expect b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.transformed.expect
index 5299a30..3093c50 100644
--- a/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart.weak.transformed.expect
@@ -3,13 +3,17 @@
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:7:38: Error: The class 'A' can't be implemented outside of its library because it's a base class.
-// class ImplementsBaseClass implements A {}
+// class ImplementsBaseClass implements A {} /* Error */
// ^
//
// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:9:38: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
-// class ImplementsBaseMixin implements M {}
+// class ImplementsBaseMixin implements M {} /* Error */
// ^
//
+// pkg/front_end/testcases/class_modifiers/base/outside_library/main.dart:11:41: Error: The mixin 'M' can't be implemented outside of its library because it's a base mixin.
+// enum EnumImplementsBaseMixin implements M { x } /* Error */
+// ^
+//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;
@@ -26,6 +30,26 @@
: super core::Object::•()
;
}
+class EnumImplementsBaseMixin extends core::_Enum implements mai::M /*isEnum*/ {
+ static const field core::List<self::EnumImplementsBaseMixin> values = #C4;
+ enum-element static const field self::EnumImplementsBaseMixin x = #C3;
+ const constructor •(core::int #index, core::String #name) → self::EnumImplementsBaseMixin
+ : super core::_Enum::•(#index, #name)
+ ;
+ method _enumToString() → core::String
+ return "EnumImplementsBaseMixin.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MixinOnA extends mai::A /*isMixinDeclaration*/ {
+}
+abstract class MixinOnM extends mai::M /*isMixinDeclaration*/ {
+}
+abstract class _MixinOnAM&A&M extends core::Object implements mai::A, mai::M /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_MixinOnAM&A&M
+ : super core::Object::•()
+ ;
+}
+abstract class MixinOnAM extends self::_MixinOnAM&A&M /*isMixinDeclaration*/ {
+}
library /*isNonNullableByDefault*/;
import self as mai;
@@ -38,3 +62,17 @@
}
abstract base class M extends core::Object /*isMixinDeclaration*/ {
}
+
+constants {
+ #C1 = 0
+ #C2 = "x"
+ #C3 = self::EnumImplementsBaseMixin {index:#C1, _name:#C2}
+ #C4 = <self::EnumImplementsBaseMixin*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- EnumImplementsBaseMixin. (from org-dartlang-testcase:///main.dart:11:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.expect
index 977d7aa..0eeec25 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.expect
@@ -47,7 +47,7 @@
: super core::Object::•()
;
}
-abstract class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -66,7 +66,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.transformed.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.transformed.expect
index bdcd274..66fce1d 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
: super core::Object::•()
;
}
-abstract class _MixInFinalMixin&Object&M extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -66,7 +66,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.expect
index b0a5a3d..74f5866 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.expect
@@ -47,7 +47,7 @@
: super core::Object::•()
;
}
-abstract class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -66,7 +66,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.modular.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.modular.expect
index bbb9362..a0a00aa 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.modular.expect
@@ -47,7 +47,7 @@
: super core::Object::•()
;
}
-abstract class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -66,7 +66,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.outline.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.outline.expect
index 89048c5..c83661d 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.outline.expect
@@ -44,7 +44,7 @@
synthetic constructor •() → self::ImplementsFinalMixin
;
}
-abstract class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -62,7 +62,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.transformed.expect b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.transformed.expect
index 18057ff..a68c5e8 100644
--- a/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/outside_library/main.dart.weak.transformed.expect
@@ -47,7 +47,7 @@
: super core::Object::•()
;
}
-abstract class _MixInFinalMixin&Object&M extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixin&Object&M extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixin&Object&M
: super core::Object::•()
;
@@ -66,7 +66,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixin.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixin&_Enum&M extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixin&_Enum&M extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixin&_Enum&M
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.expect
index 099eb7d..6af7956 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.expect
@@ -160,7 +160,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -170,7 +170,7 @@
: super self::_MixInFinalMixinTypeDef&Object&MTypeDef::•()
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -180,7 +180,7 @@
: super self::_MixInFinalMixinTypeDef2&Object&MTypeDef2::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -194,7 +194,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -241,7 +241,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -251,7 +251,7 @@
: super self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.transformed.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.transformed.expect
index 79a3fa4..0bed03c 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.strong.transformed.expect
@@ -160,7 +160,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -170,7 +170,7 @@
: super self::_MixInFinalMixinTypeDef&Object&MTypeDef::•()
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -180,7 +180,7 @@
: super self::_MixInFinalMixinTypeDef2&Object&MTypeDef2::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -194,7 +194,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -241,7 +241,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -251,7 +251,7 @@
: super self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.expect
index 10e52de..e49cc53 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.expect
@@ -160,7 +160,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -170,7 +170,7 @@
: super self::_MixInFinalMixinTypeDef&Object&MTypeDef::•()
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -180,7 +180,7 @@
: super self::_MixInFinalMixinTypeDef2&Object&MTypeDef2::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -194,7 +194,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -241,7 +241,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -251,7 +251,7 @@
: super self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.modular.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.modular.expect
index 2e7c78f..2361f95 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.modular.expect
@@ -160,7 +160,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -170,7 +170,7 @@
: super self::_MixInFinalMixinTypeDef&Object&MTypeDef::•()
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -180,7 +180,7 @@
: super self::_MixInFinalMixinTypeDef2&Object&MTypeDef2::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -194,7 +194,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -241,7 +241,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -251,7 +251,7 @@
: super self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.outline.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.outline.expect
index ea80aa9..c4ec191 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.outline.expect
@@ -154,7 +154,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -163,7 +163,7 @@
synthetic constructor •() → self::MixInFinalMixinTypeDef
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -172,7 +172,7 @@
synthetic constructor •() → self::MixInFinalMixinTypeDef2
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -185,7 +185,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -228,7 +228,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef = core::Object with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -237,7 +237,7 @@
synthetic constructor •() → self::MixInFinalMixinTypeDefOutside
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef = core::_Enum with mai::M /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.transformed.expect b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.transformed.expect
index 7bd5e60..4fb59ee 100644
--- a/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/final/typedef/main.dart.weak.transformed.expect
@@ -160,7 +160,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDef2.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDef&Object&MTypeDef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef&Object&MTypeDef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef&Object&MTypeDef
: super core::Object::•()
;
@@ -170,7 +170,7 @@
: super self::_MixInFinalMixinTypeDef&Object&MTypeDef::•()
;
}
-abstract class _MixInFinalMixinTypeDef2&Object&MTypeDef2 extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDef2&Object&MTypeDef2 extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDef2&Object&MTypeDef2
: super core::Object::•()
;
@@ -180,7 +180,7 @@
: super self::_MixInFinalMixinTypeDef2&Object&MTypeDef2::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef&_Enum&MTypeDef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef&_Enum&MTypeDef
: super core::_Enum::•(index, _name)
;
@@ -194,7 +194,7 @@
method _enumToString() → core::String
return "EnumMixInFinalMixinTypeDef.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2 extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDef2&_Enum&MTypeDef2
: super core::_Enum::•(index, _name)
;
@@ -241,7 +241,7 @@
method _enumToString() → core::String
return "EnumImplementsFinalMixinTypeDefOutside.${this.{core::_Enum::_name}{core::String}}";
}
-abstract class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef extends core::Object implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef
: super core::Object::•()
;
@@ -251,7 +251,7 @@
: super self::_MixInFinalMixinTypeDefOutside&Object&MOutsideTypedef::•()
;
}
-abstract class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract final class _EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef extends core::_Enum implements mai::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •(core::int index, core::String _name) → self::_EnumMixInFinalMixinTypeDefOutside&_Enum&MOutsideTypedef
: super core::_Enum::•(index, _name)
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.expect
index c43e40c..e24e68b 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.expect
@@ -34,7 +34,7 @@
: super core::Object::•()
;
}
-abstract class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.transformed.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.transformed.expect
index 5b322e2..80f0a3d 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.strong.transformed.expect
@@ -34,7 +34,7 @@
: super core::Object::•()
;
}
-abstract class _Class3&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.expect
index c43e40c..e24e68b 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.expect
@@ -34,7 +34,7 @@
: super core::Object::•()
;
}
-abstract class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.modular.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.modular.expect
index 714fd7d..aa1c279 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.modular.expect
@@ -34,7 +34,7 @@
: super core::Object::•()
;
}
-abstract class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.outline.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.outline.expect
index 0ae730f..00a0399 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.outline.expect
@@ -32,7 +32,7 @@
synthetic constructor •() → self::Class2
;
}
-abstract class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.transformed.expect b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.transformed.expect
index 5b322e2..80f0a3d 100644
--- a/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/sealed_class/extends_implements_with/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
: super core::Object::•()
;
}
-abstract class _Class3&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract sealed class _Class3&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class3&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.expect
index 2083929..90103ef 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.transformed.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.transformed.expect
index 571fd01..b7ef75a0 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.expect
index 2083929..90103ef 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.modular.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.modular.expect
index 07a1813..6b5c11f 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.modular.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.outline.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.outline.expect
index cb4589e..34829b4 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.outline.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed = core::Object with mai::Sealed /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.transformed.expect b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.transformed.expect
index 571fd01..b7ef75a0 100644
--- a/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/sealed_class/mixin_with/main.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
import "org-dartlang-testcase:///main_lib.dart";
-abstract class _Class1&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+abstract sealed class _Class1&Object&Sealed extends core::Object implements mai::Sealed /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_Class1&Object&Sealed
: super core::Object::•()
;
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 70e2929..1c17474 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -21,6 +21,7 @@
regress/issue_39091_2: EmptyOutput
regress/utf_16_le_content.crash: EmptyOutput
+class_modifiers/anonymous_mixin: FormatterCrash
class_modifiers/base/base_class_declaration: FormatterCrash
class_modifiers/final/final_class_declaration: FormatterCrash
class_modifiers/interface/interface_class_declaration: FormatterCrash