[cfe][PrimaryConstructors] Report error on primary and non-redirecting generative constructors

This moves the analyzer diagnostics for classes with a primary constructor and a non-redirecting generative constructor to the shared messages, and adds support for reporting it in the CFE.

Enum constructors, which are part of the test added, are now also always marked as constant.

Part of #61700

Change-Id: I29e5354ac2c4089a395b3e5a1d7bcccce0edccec
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/478381
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther
2026-02-05 01:09:23 -08:00
committed by Commit Queue
parent 1ff2dafd8d
commit e68f866b10
18 changed files with 1418 additions and 121 deletions
@@ -2663,6 +2663,17 @@ const MessageCode nonPartOfDirectiveInPart = const MessageCode(
"""Try removing the other directives, or moving them to the library for which this is a part.""",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode
nonRedirectingGenerativeConstructorWithPrimary = const MessageCode(
"NonRedirectingGenerativeConstructorWithPrimary",
sharedCode: SharedCode.nonRedirectingGenerativeConstructorWithPrimary,
problemMessage:
"""Classes with primary constructors can't have non-redirecting generative constructors.""",
correctionMessage:
"""Try making the constructor redirect to the primary constructor, or remove the primary constructor.""",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode nullAwareCascadeOutOfOrder = const MessageCode(
"NullAwareCascadeOutOfOrder",
@@ -3527,6 +3538,7 @@ enum SharedCode {
nativeClauseShouldBeAnnotation,
newConstructorNewName,
newConstructorQualifiedName,
nonRedirectingGenerativeConstructorWithPrimary,
nullAwareCascadeOutOfOrder,
outOfOrderClauses,
patternAssignmentDeclaresVariable,
+13
View File
@@ -2490,3 +2490,16 @@ factoryConstructorNewName:
class C {
factory new() => throw '';
}
nonRedirectingGenerativeConstructorWithPrimary:
type: compileTimeError
parameters: none
problemMessage: "Classes with primary constructors can't have non-redirecting generative constructors."
correctionMessage: "Try making the constructor redirect to the primary constructor, or remove the primary constructor."
analyzerCode: nonRedirectingGenerativeConstructorWithPrimary
hasPublishedDocs: false
experiments: primary-constructors
script: |
class C() {
C.named();
}
@@ -1263,6 +1263,7 @@ final sharedAnalyzerCodes = <DiagnosticCode>[
diag.nativeClauseShouldBeAnnotation,
diag.newConstructorNewName,
diag.newConstructorQualifiedName,
diag.nonRedirectingGenerativeConstructorWithPrimary,
diag.nullAwareCascadeOutOfOrder,
diag.outOfOrderClauses,
diag.patternAssignmentDeclaresVariable,
-6
View File
@@ -13122,12 +13122,6 @@ CompileTimeErrorCode:
class B implements A {}
```
nonRedirectingGenerativeConstructorWithPrimary:
type: compileTimeError
parameters: none
problemMessage: "Classes with primary constructors can't have non-redirecting generative constructors."
correctionMessage: "Try making the constructor redirect to the primary constructor, or remove the primary constructor."
hasPublishedDocs: false
nonSyncFactory:
type: compileTimeError
parameters: none
@@ -1617,6 +1617,25 @@ class KernelTarget {
field.takePrimaryConstructorFieldInitializer(),
);
}
if (classDeclaration is SourceClassBuilder) {
Iterator<SourceConstructorBuilder> otherConstructorIterator =
classDeclaration.filteredConstructorsIterator(
includeDuplicates: false,
);
while (otherConstructorIterator.moveNext()) {
SourceConstructorBuilder otherConstructor =
otherConstructorIterator.current;
if (constructor != otherConstructor &&
!otherConstructor.isEffectivelyRedirecting) {
classDeclaration.libraryBuilder.addProblem(
diag.nonRedirectingGenerativeConstructorWithPrimary,
otherConstructor.fileOffset,
noLength,
otherConstructor.fileUri,
);
}
}
}
}
}
@@ -1454,6 +1454,11 @@ class FragmentFactoryImpl implements FragmentFactory {
NominalParameterNameSpace typeParameterNameSpace =
_nominalParameterNameSpaces.pop();
if (enclosingDeclaration.kind == DeclarationFragmentKind.enumDeclaration) {
// Primary constructors in enums are always constant.
isConst = true;
}
PrimaryConstructorFragment fragment = new PrimaryConstructorFragment(
constructorName: constructorName,
fileUri: _compilationUnit.fileUri,
@@ -2,7 +2,7 @@
// 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.
enum E1() { // Error
enum E1() {
a
}
@@ -2,15 +2,6 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
// enum E1() { // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// a
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
// final int? b; // Error
@@ -27,23 +18,17 @@ import self as self;
import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
constructor •(core::int #index, core::String #name) → self::E1
enum-element static const field self::E1 a = #C3;
static const field core::List<self::E1> values = #C4;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C3;
static const field core::List<self::E2> values = #C4;
enum-element static const field self::E2 a = #C5;
static const field core::List<self::E2> values = #C6;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
@@ -51,9 +36,9 @@ class E2 extends core::_Enum /*isEnum*/ {
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C6;
enum-element static const field self::E3 a = #C8;
final field core::int? b = null;
static const field core::List<self::E3> values = #C7;
static const field core::List<self::E3> values = #C9;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
@@ -61,9 +46,9 @@ class E3 extends core::_Enum /*isEnum*/ {
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C8;
enum-element static const field self::E4 a = #C10;
field core::int? b = null;
static const field core::List<self::E4> values = #C9;
static const field core::List<self::E4> values = #C11;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
@@ -74,20 +59,23 @@ class E4 extends core::_Enum /*isEnum*/ {
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E2 {index:#C1, _name:#C2}
#C4 = <self::E2>[#C3]
#C5 = null
#C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
#C7 = <self::E3>[#C6]
#C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
#C9 = <self::E4>[#C8]
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = <self::E1>[#C3]
#C5 = self::E2 {index:#C1, _name:#C2}
#C6 = <self::E2>[#C5]
#C7 = null
#C8 = self::E3 {b:#C7, index:#C1, _name:#C2}
#C9 = <self::E3>[#C8]
#C10 = self::E4 {b:#C7, index:#C1, _name:#C2}
#C11 = <self::E4>[#C10]
}
Constructor coverage from constants:
org-dartlang-testcase:///enum_primary_constructor.dart:
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E1. (from org-dartlang-testcase:///enum_primary_constructor.dart:5:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
@@ -2,15 +2,6 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
// enum E1() { // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// a
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
// final int? b; // Error
@@ -27,23 +18,17 @@ import self as self;
import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
constructor •(core::int #index, core::String #name) → self::E1
enum-element static const field self::E1 a = #C3;
static const field core::List<self::E1> values = #C4;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C3;
static const field core::List<self::E2> values = #C4;
enum-element static const field self::E2 a = #C5;
static const field core::List<self::E2> values = #C6;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
@@ -51,9 +36,9 @@ class E2 extends core::_Enum /*isEnum*/ {
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C6;
enum-element static const field self::E3 a = #C8;
final field core::int? b = null;
static const field core::List<self::E3> values = #C7;
static const field core::List<self::E3> values = #C9;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
@@ -61,9 +46,9 @@ class E3 extends core::_Enum /*isEnum*/ {
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C8;
enum-element static const field self::E4 a = #C10;
field core::int? b = null;
static const field core::List<self::E4> values = #C9;
static const field core::List<self::E4> values = #C11;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
@@ -74,20 +59,23 @@ class E4 extends core::_Enum /*isEnum*/ {
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E2 {index:#C1, _name:#C2}
#C4 = <self::E2>[#C3]
#C5 = null
#C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
#C7 = <self::E3>[#C6]
#C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
#C9 = <self::E4>[#C8]
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = <self::E1>[#C3]
#C5 = self::E2 {index:#C1, _name:#C2}
#C6 = <self::E2>[#C5]
#C7 = null
#C8 = self::E3 {b:#C7, index:#C1, _name:#C2}
#C9 = <self::E3>[#C8]
#C10 = self::E4 {b:#C7, index:#C1, _name:#C2}
#C11 = <self::E4>[#C10]
}
Constructor coverage from constants:
org-dartlang-testcase:///enum_primary_constructor.dart:
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E1. (from org-dartlang-testcase:///enum_primary_constructor.dart:5:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
@@ -1,26 +1,12 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
// enum E1() { // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// a
// ^
//
import self as self;
import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
enum-element static const field self::E1 a = const self::E1::•(0, "a");
static const field core::List<self::E1> values = const <self::E1>[self::E1::a];
constructor •(core::int #index, core::String #name) → self::E1
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
@@ -57,10 +43,12 @@ class E4 extends core::_Enum /*isEnum*/ {
Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:5:6 -> ListConstant(const <E1>[const E1{_Enum.index: 0, _Enum._name: "a"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:10:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:9:12 -> ListConstant(const <E2>[const E2{_Enum.index: 0, _Enum._name: "a"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:14:3 -> InstanceConstant(const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"})
Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:13:12 -> ListConstant(const <E3>[const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:19:3 -> InstanceConstant(const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"})
Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:18:12 -> ListConstant(const <E4>[const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"}])
Extra constant evaluation: evaluated: 26, effectively constant: 6
Extra constant evaluation: evaluated: 28, effectively constant: 8
@@ -2,15 +2,6 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
// enum E1() { // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// a
// ^
//
// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
// final int? b; // Error
@@ -27,23 +18,17 @@ import self as self;
import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
a
^";
constructor •(core::int #index, core::String #name) → self::E1
enum-element static const field self::E1 a = #C3;
static const field core::List<self::E1> values = #C4;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C3;
static const field core::List<self::E2> values = #C4;
enum-element static const field self::E2 a = #C5;
static const field core::List<self::E2> values = #C6;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
@@ -51,9 +36,9 @@ class E2 extends core::_Enum /*isEnum*/ {
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C6;
enum-element static const field self::E3 a = #C8;
final field core::int? b = null;
static const field core::List<self::E3> values = #C7;
static const field core::List<self::E3> values = #C9;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
@@ -61,9 +46,9 @@ class E3 extends core::_Enum /*isEnum*/ {
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C8;
enum-element static const field self::E4 a = #C10;
field core::int? b = null;
static const field core::List<self::E4> values = #C9;
static const field core::List<self::E4> values = #C11;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
@@ -74,20 +59,23 @@ class E4 extends core::_Enum /*isEnum*/ {
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E2 {index:#C1, _name:#C2}
#C4 = <self::E2>[#C3]
#C5 = null
#C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
#C7 = <self::E3>[#C6]
#C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
#C9 = <self::E4>[#C8]
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = <self::E1>[#C3]
#C5 = self::E2 {index:#C1, _name:#C2}
#C6 = <self::E2>[#C5]
#C7 = null
#C8 = self::E3 {b:#C7, index:#C1, _name:#C2}
#C9 = <self::E3>[#C8]
#C10 = self::E4 {b:#C7, index:#C1, _name:#C2}
#C11 = <self::E4>[#C10]
}
Constructor coverage from constants:
org-dartlang-testcase:///enum_primary_constructor.dart:
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E1. (from org-dartlang-testcase:///enum_primary_constructor.dart:5:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
@@ -0,0 +1,75 @@
// Copyright (c) 2026, 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.
class C1() {
C1.other(); // Error
}
class C2() {
new other1(); // Error
new other2(); // Error
}
class C3() {
new other() : this(); // Ok
}
class C4() {
new other() : this(); // Ok
}
class C5.primary() {
new(); // Error
}
class C6.primary() {
new() : this.primary(); // Ok
}
enum E1() {
a(), b.other();
const E1.other(); // Error
}
enum E2() {
a(), b.other1(), c.other2();
const new other1(); // Error
const new other2(); // Error
}
enum E3() {
a(), b.other();
const new other() : this(); // Ok
}
enum E4() {
a(), b.other();
const new other() : this(); // Ok
}
enum E5.primary() {
a(), b.primary();
const new(); // Error
}
enum E6.primary() {
a(), b.primary();
const new() : this.primary(); // Ok
}
extension type ET1(int i) {
ET1.other(this.i); // Ok
}
extension type E2T(int i) {
new other(int i) : this(i); // Ok
}
extension type ET3.primary(int i) {
new(this.i); // Ok
}
extension type ET4.primary(int i) {
new(int i) : this.primary(i); // Ok
}
@@ -0,0 +1,305 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:6:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// C1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:10:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:11:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:23:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:32:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const E1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:37:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:38:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:53:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new(); // Error
// ^
//
import self as self;
import "dart:core" as core;
class C1 extends core::Object {
constructor •() → self::C1
: super core::Object::•()
;
constructor other() → self::C1
: super core::Object::•()
;
}
class C2 extends core::Object {
constructor •() → self::C2
: super core::Object::•()
;
constructor other1() → self::C2
: super core::Object::•()
;
constructor other2() → self::C2
: super core::Object::•()
;
}
class C3 extends core::Object {
constructor •() → self::C3
: super core::Object::•()
;
constructor other() → self::C3
: this self::C3::•()
;
}
class C4 extends core::Object {
constructor •() → self::C4
: super core::Object::•()
;
constructor other() → self::C4
: this self::C4::•()
;
}
class C5 extends core::Object {
constructor primary() → self::C5
: super core::Object::•()
;
constructor •() → self::C5
: super core::Object::•()
;
}
class C6 extends core::Object {
constructor primary() → self::C6
: super core::Object::•()
;
constructor •() → self::C6
: this self::C6::primary()
;
}
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E1 a = #C3;
enum-element static const field self::E1 b = #C6;
static const field core::List<self::E1> values = #C7;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C8;
enum-element static const field self::E2 b = #C9;
enum-element static const field self::E2 c = #C12;
static const field core::List<self::E2> values = #C13;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other1(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other2(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C14;
enum-element static const field self::E3 b = #C15;
static const field core::List<self::E3> values = #C16;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E3
: this self::E3::•(#index, #name)
;
method core::_enumToString() → core::String
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C17;
enum-element static const field self::E4 b = #C18;
static const field core::List<self::E4> values = #C19;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E4
: this self::E4::•(#index, #name)
;
method core::_enumToString() → core::String
return "E4.${this.{core::_Enum::_name}{core::String}}";
}
class E5 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E5 a = #C20;
enum-element static const field self::E5 b = #C21;
static const field core::List<self::E5> values = #C22;
const constructor primary(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E5.${this.{core::_Enum::_name}{core::String}}";
}
class E6 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E6 a = #C23;
enum-element static const field self::E6 b = #C24;
static const field core::List<self::E6> values = #C25;
const constructor primary(core::int #index, core::String #name) → self::E6
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E6
: this self::E6::primary(#index, #name)
;
method core::_enumToString() → core::String
return "E6.${this.{core::_Enum::_name}{core::String}}";
}
extension type ET1(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::ET1|constructor#;
constructor tearoff • = self::ET1|constructor#_#new#tearOff;
constructor other = self::ET1|constructor#other;
constructor tearoff other = self::ET1|constructor#_#other#tearOff;
}
extension type E2T(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::E2T|constructor#;
constructor tearoff • = self::E2T|constructor#_#new#tearOff;
constructor other = self::E2T|constructor#other;
constructor tearoff other = self::E2T|constructor#_#other#tearOff;
}
extension type ET3(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET3|constructor#primary;
constructor tearoff primary = self::ET3|constructor#_#primary#tearOff;
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
}
extension type ET4(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET4|constructor#primary;
constructor tearoff primary = self::ET4|constructor#_#primary#tearOff;
constructor • = self::ET4|constructor#;
constructor tearoff • = self::ET4|constructor#_#new#tearOff;
}
static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#(i);
static extension-type-member method ET1|constructor#other(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#other#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#other(i);
static extension-type-member method E2T|constructor#(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#new#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#(i);
static extension-type-member method E2T|constructor#other(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this;
#this = self::E2T|constructor#(i);
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#other#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#other(i);
static extension-type-member method ET3|constructor#primary(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#primary#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#primary(i);
static extension-type-member method ET3|constructor#(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#(i);
static extension-type-member method ET4|constructor#primary(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#primary#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#primary(i);
static extension-type-member method ET4|constructor#(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this;
#this = self::ET4|constructor#primary(i);
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#new#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#(i);
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = 1
#C5 = "b"
#C6 = self::E1 {index:#C4, _name:#C5}
#C7 = <self::E1>[#C3, #C6]
#C8 = self::E2 {index:#C1, _name:#C2}
#C9 = self::E2 {index:#C4, _name:#C5}
#C10 = 2
#C11 = "c"
#C12 = self::E2 {index:#C10, _name:#C11}
#C13 = <self::E2>[#C8, #C9, #C12]
#C14 = self::E3 {index:#C1, _name:#C2}
#C15 = self::E3 {index:#C4, _name:#C5}
#C16 = <self::E3>[#C14, #C15]
#C17 = self::E4 {index:#C1, _name:#C2}
#C18 = self::E4 {index:#C4, _name:#C5}
#C19 = <self::E4>[#C17, #C18]
#C20 = self::E5 {index:#C1, _name:#C2}
#C21 = self::E5 {index:#C4, _name:#C5}
#C22 = <self::E5>[#C20, #C21]
#C23 = self::E6 {index:#C1, _name:#C2}
#C24 = self::E6 {index:#C4, _name:#C5}
#C25 = <self::E6>[#C23, #C24]
}
Constructor coverage from constants:
org-dartlang-testcase:///primary_and_generative.dart:
- E1. (from org-dartlang-testcase:///primary_and_generative.dart:30:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E1.other (from org-dartlang-testcase:///primary_and_generative.dart:32:9)
- E2. (from org-dartlang-testcase:///primary_and_generative.dart:35:8)
- E2.other1 (from org-dartlang-testcase:///primary_and_generative.dart:37:13)
- E2.other2 (from org-dartlang-testcase:///primary_and_generative.dart:38:13)
- E3. (from org-dartlang-testcase:///primary_and_generative.dart:41:8)
- E3.other (from org-dartlang-testcase:///primary_and_generative.dart:43:13)
- E4. (from org-dartlang-testcase:///primary_and_generative.dart:46:8)
- E4.other (from org-dartlang-testcase:///primary_and_generative.dart:48:13)
- E5. (from org-dartlang-testcase:///primary_and_generative.dart:53:9)
- E5.primary (from org-dartlang-testcase:///primary_and_generative.dart:51:9)
- E6. (from org-dartlang-testcase:///primary_and_generative.dart:58:9)
- E6.primary (from org-dartlang-testcase:///primary_and_generative.dart:56:9)
@@ -0,0 +1,305 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:6:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// C1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:10:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:11:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:23:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:32:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const E1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:37:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:38:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:53:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new(); // Error
// ^
//
import self as self;
import "dart:core" as core;
class C1 extends core::Object {
constructor •() → self::C1
: super core::Object::•()
;
constructor other() → self::C1
: super core::Object::•()
;
}
class C2 extends core::Object {
constructor •() → self::C2
: super core::Object::•()
;
constructor other1() → self::C2
: super core::Object::•()
;
constructor other2() → self::C2
: super core::Object::•()
;
}
class C3 extends core::Object {
constructor •() → self::C3
: super core::Object::•()
;
constructor other() → self::C3
: this self::C3::•()
;
}
class C4 extends core::Object {
constructor •() → self::C4
: super core::Object::•()
;
constructor other() → self::C4
: this self::C4::•()
;
}
class C5 extends core::Object {
constructor primary() → self::C5
: super core::Object::•()
;
constructor •() → self::C5
: super core::Object::•()
;
}
class C6 extends core::Object {
constructor primary() → self::C6
: super core::Object::•()
;
constructor •() → self::C6
: this self::C6::primary()
;
}
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E1 a = #C3;
enum-element static const field self::E1 b = #C6;
static const field core::List<self::E1> values = #C7;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C8;
enum-element static const field self::E2 b = #C9;
enum-element static const field self::E2 c = #C12;
static const field core::List<self::E2> values = #C13;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other1(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other2(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C14;
enum-element static const field self::E3 b = #C15;
static const field core::List<self::E3> values = #C16;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E3
: this self::E3::•(#index, #name)
;
method core::_enumToString() → core::String
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C17;
enum-element static const field self::E4 b = #C18;
static const field core::List<self::E4> values = #C19;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E4
: this self::E4::•(#index, #name)
;
method core::_enumToString() → core::String
return "E4.${this.{core::_Enum::_name}{core::String}}";
}
class E5 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E5 a = #C20;
enum-element static const field self::E5 b = #C21;
static const field core::List<self::E5> values = #C22;
const constructor primary(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E5.${this.{core::_Enum::_name}{core::String}}";
}
class E6 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E6 a = #C23;
enum-element static const field self::E6 b = #C24;
static const field core::List<self::E6> values = #C25;
const constructor primary(core::int #index, core::String #name) → self::E6
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E6
: this self::E6::primary(#index, #name)
;
method core::_enumToString() → core::String
return "E6.${this.{core::_Enum::_name}{core::String}}";
}
extension type ET1(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::ET1|constructor#;
constructor tearoff • = self::ET1|constructor#_#new#tearOff;
constructor other = self::ET1|constructor#other;
constructor tearoff other = self::ET1|constructor#_#other#tearOff;
}
extension type E2T(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::E2T|constructor#;
constructor tearoff • = self::E2T|constructor#_#new#tearOff;
constructor other = self::E2T|constructor#other;
constructor tearoff other = self::E2T|constructor#_#other#tearOff;
}
extension type ET3(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET3|constructor#primary;
constructor tearoff primary = self::ET3|constructor#_#primary#tearOff;
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
}
extension type ET4(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET4|constructor#primary;
constructor tearoff primary = self::ET4|constructor#_#primary#tearOff;
constructor • = self::ET4|constructor#;
constructor tearoff • = self::ET4|constructor#_#new#tearOff;
}
static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#(i);
static extension-type-member method ET1|constructor#other(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#other#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#other(i);
static extension-type-member method E2T|constructor#(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#new#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#(i);
static extension-type-member method E2T|constructor#other(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this;
#this = self::E2T|constructor#(i);
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#other#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#other(i);
static extension-type-member method ET3|constructor#primary(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#primary#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#primary(i);
static extension-type-member method ET3|constructor#(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#(i);
static extension-type-member method ET4|constructor#primary(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#primary#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#primary(i);
static extension-type-member method ET4|constructor#(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this;
#this = self::ET4|constructor#primary(i);
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#new#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#(i);
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = 1
#C5 = "b"
#C6 = self::E1 {index:#C4, _name:#C5}
#C7 = <self::E1>[#C3, #C6]
#C8 = self::E2 {index:#C1, _name:#C2}
#C9 = self::E2 {index:#C4, _name:#C5}
#C10 = 2
#C11 = "c"
#C12 = self::E2 {index:#C10, _name:#C11}
#C13 = <self::E2>[#C8, #C9, #C12]
#C14 = self::E3 {index:#C1, _name:#C2}
#C15 = self::E3 {index:#C4, _name:#C5}
#C16 = <self::E3>[#C14, #C15]
#C17 = self::E4 {index:#C1, _name:#C2}
#C18 = self::E4 {index:#C4, _name:#C5}
#C19 = <self::E4>[#C17, #C18]
#C20 = self::E5 {index:#C1, _name:#C2}
#C21 = self::E5 {index:#C4, _name:#C5}
#C22 = <self::E5>[#C20, #C21]
#C23 = self::E6 {index:#C1, _name:#C2}
#C24 = self::E6 {index:#C4, _name:#C5}
#C25 = <self::E6>[#C23, #C24]
}
Constructor coverage from constants:
org-dartlang-testcase:///primary_and_generative.dart:
- E1. (from org-dartlang-testcase:///primary_and_generative.dart:30:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E1.other (from org-dartlang-testcase:///primary_and_generative.dart:32:9)
- E2. (from org-dartlang-testcase:///primary_and_generative.dart:35:8)
- E2.other1 (from org-dartlang-testcase:///primary_and_generative.dart:37:13)
- E2.other2 (from org-dartlang-testcase:///primary_and_generative.dart:38:13)
- E3. (from org-dartlang-testcase:///primary_and_generative.dart:41:8)
- E3.other (from org-dartlang-testcase:///primary_and_generative.dart:43:13)
- E4. (from org-dartlang-testcase:///primary_and_generative.dart:46:8)
- E4.other (from org-dartlang-testcase:///primary_and_generative.dart:48:13)
- E5. (from org-dartlang-testcase:///primary_and_generative.dart:53:9)
- E5.primary (from org-dartlang-testcase:///primary_and_generative.dart:51:9)
- E6. (from org-dartlang-testcase:///primary_and_generative.dart:58:9)
- E6.primary (from org-dartlang-testcase:///primary_and_generative.dart:56:9)
@@ -0,0 +1,207 @@
library;
import self as self;
import "dart:core" as core;
class C1 extends core::Object {
constructor •() → self::C1
;
constructor other() → self::C1
;
}
class C2 extends core::Object {
constructor •() → self::C2
;
constructor other1() → self::C2
;
constructor other2() → self::C2
;
}
class C3 extends core::Object {
constructor •() → self::C3
;
constructor other() → self::C3
;
}
class C4 extends core::Object {
constructor •() → self::C4
;
constructor other() → self::C4
;
}
class C5 extends core::Object {
constructor primary() → self::C5
;
constructor •() → self::C5
;
}
class C6 extends core::Object {
constructor primary() → self::C6
;
constructor •() → self::C6
;
}
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E1 a = const self::E1::•(0, "a");
enum-element static const field self::E1 b = const self::E1::other(1, "b");
static const field core::List<self::E1> values = const <self::E1>[self::E1::a, self::E1::b];
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = const self::E2::•(0, "a");
enum-element static const field self::E2 b = const self::E2::other1(1, "b");
enum-element static const field self::E2 c = const self::E2::other2(2, "c");
static const field core::List<self::E2> values = const <self::E2>[self::E2::a, self::E2::b, self::E2::c];
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other1(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other2(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = const self::E3::•(0, "a");
enum-element static const field self::E3 b = const self::E3::other(1, "b");
static const field core::List<self::E3> values = const <self::E3>[self::E3::a, self::E3::b];
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E3
: this self::E3::•(#index, #name)
;
method core::_enumToString() → core::String
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = const self::E4::•(0, "a");
enum-element static const field self::E4 b = const self::E4::other(1, "b");
static const field core::List<self::E4> values = const <self::E4>[self::E4::a, self::E4::b];
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E4
: this self::E4::•(#index, #name)
;
method core::_enumToString() → core::String
return "E4.${this.{core::_Enum::_name}{core::String}}";
}
class E5 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E5 a = const self::E5::•(0, "a");
enum-element static const field self::E5 b = const self::E5::primary(1, "b");
static const field core::List<self::E5> values = const <self::E5>[self::E5::a, self::E5::b];
const constructor primary(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E5.${this.{core::_Enum::_name}{core::String}}";
}
class E6 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E6 a = const self::E6::•(0, "a");
enum-element static const field self::E6 b = const self::E6::primary(1, "b");
static const field core::List<self::E6> values = const <self::E6>[self::E6::a, self::E6::b];
const constructor primary(core::int #index, core::String #name) → self::E6
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E6
: this self::E6::primary(#index, #name)
;
method core::_enumToString() → core::String
return "E6.${this.{core::_Enum::_name}{core::String}}";
}
extension type ET1(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::ET1|constructor#;
constructor tearoff • = self::ET1|constructor#_#new#tearOff;
constructor other = self::ET1|constructor#other;
constructor tearoff other = self::ET1|constructor#_#other#tearOff;
}
extension type E2T(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::E2T|constructor#;
constructor tearoff • = self::E2T|constructor#_#new#tearOff;
constructor other = self::E2T|constructor#other;
constructor tearoff other = self::E2T|constructor#_#other#tearOff;
}
extension type ET3(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET3|constructor#primary;
constructor tearoff primary = self::ET3|constructor#_#primary#tearOff;
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
}
extension type ET4(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET4|constructor#primary;
constructor tearoff primary = self::ET4|constructor#_#primary#tearOff;
constructor • = self::ET4|constructor#;
constructor tearoff • = self::ET4|constructor#_#new#tearOff;
}
static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#(i);
static extension-type-member method ET1|constructor#other(core::int i) → self::ET1% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET1|constructor#_#other#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#other(i);
static extension-type-member method E2T|constructor#(core::int i) → self::E2T% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method E2T|constructor#_#new#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#(i);
static extension-type-member method E2T|constructor#other(core::int i) → self::E2T% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method E2T|constructor#_#other#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#other(i);
static extension-type-member method ET3|constructor#primary(core::int i) → self::ET3% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET3|constructor#_#primary#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#primary(i);
static extension-type-member method ET3|constructor#(core::int i) → self::ET3% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#(i);
static extension-type-member method ET4|constructor#primary(core::int i) → self::ET4% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET4|constructor#_#primary#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#primary(i);
static extension-type-member method ET4|constructor#(core::int i) → self::ET4% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ET4|constructor#_#new#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#(i);
Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:31:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:31:10 -> InstanceConstant(const E1{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:30:6 -> ListConstant(const <E1>[const E1{_Enum.index: 0, _Enum._name: "a"}, const E1{_Enum.index: 1, _Enum._name: "b"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:36:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:36:10 -> InstanceConstant(const E2{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:36:22 -> InstanceConstant(const E2{_Enum.index: 2, _Enum._name: "c"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:35:6 -> ListConstant(const <E2>[const E2{_Enum.index: 0, _Enum._name: "a"}, const E2{_Enum.index: 1, _Enum._name: "b"}, const E2{_Enum.index: 2, _Enum._name: "c"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:42:3 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:42:10 -> InstanceConstant(const E3{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:41:6 -> ListConstant(const <E3>[const E3{_Enum.index: 0, _Enum._name: "a"}, const E3{_Enum.index: 1, _Enum._name: "b"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:47:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:47:10 -> InstanceConstant(const E4{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:46:6 -> ListConstant(const <E4>[const E4{_Enum.index: 0, _Enum._name: "a"}, const E4{_Enum.index: 1, _Enum._name: "b"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:52:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:52:10 -> InstanceConstant(const E5{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:51:6 -> ListConstant(const <E5>[const E5{_Enum.index: 0, _Enum._name: "a"}, const E5{_Enum.index: 1, _Enum._name: "b"}])
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:57:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///primary_and_generative.dart:57:10 -> InstanceConstant(const E6{_Enum.index: 1, _Enum._name: "b"})
Evaluated: ListLiteral @ org-dartlang-testcase:///primary_and_generative.dart:56:6 -> ListConstant(const <E6>[const E6{_Enum.index: 0, _Enum._name: "a"}, const E6{_Enum.index: 1, _Enum._name: "b"}])
Extra constant evaluation: evaluated: 79, effectively constant: 19
@@ -0,0 +1,305 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:6:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// C1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:10:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:11:7: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:23:3: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// new(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:32:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const E1.other(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:37:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other1(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:38:13: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new other2(); // Error
// ^
//
// pkg/front_end/testcases/primary_constructors/primary_and_generative.dart:53:9: Error: Classes with primary constructors can't have non-redirecting generative constructors.
// Try making the constructor redirect to the primary constructor, or remove the primary constructor.
// const new(); // Error
// ^
//
import self as self;
import "dart:core" as core;
class C1 extends core::Object {
constructor •() → self::C1
: super core::Object::•()
;
constructor other() → self::C1
: super core::Object::•()
;
}
class C2 extends core::Object {
constructor •() → self::C2
: super core::Object::•()
;
constructor other1() → self::C2
: super core::Object::•()
;
constructor other2() → self::C2
: super core::Object::•()
;
}
class C3 extends core::Object {
constructor •() → self::C3
: super core::Object::•()
;
constructor other() → self::C3
: this self::C3::•()
;
}
class C4 extends core::Object {
constructor •() → self::C4
: super core::Object::•()
;
constructor other() → self::C4
: this self::C4::•()
;
}
class C5 extends core::Object {
constructor primary() → self::C5
: super core::Object::•()
;
constructor •() → self::C5
: super core::Object::•()
;
}
class C6 extends core::Object {
constructor primary() → self::C6
: super core::Object::•()
;
constructor •() → self::C6
: this self::C6::primary()
;
}
class E1 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E1 a = #C3;
enum-element static const field self::E1 b = #C6;
static const field core::List<self::E1> values = #C7;
const constructor •(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E1
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E1.${this.{core::_Enum::_name}{core::String}}";
}
class E2 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E2 a = #C8;
enum-element static const field self::E2 b = #C9;
enum-element static const field self::E2 c = #C12;
static const field core::List<self::E2> values = #C13;
const constructor •(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other1(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
const constructor other2(core::int #index, core::String #name) → self::E2
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E2.${this.{core::_Enum::_name}{core::String}}";
}
class E3 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E3 a = #C14;
enum-element static const field self::E3 b = #C15;
static const field core::List<self::E3> values = #C16;
const constructor •(core::int #index, core::String #name) → self::E3
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E3
: this self::E3::•(#index, #name)
;
method core::_enumToString() → core::String
return "E3.${this.{core::_Enum::_name}{core::String}}";
}
class E4 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E4 a = #C17;
enum-element static const field self::E4 b = #C18;
static const field core::List<self::E4> values = #C19;
const constructor •(core::int #index, core::String #name) → self::E4
: super core::_Enum::•(#index, #name)
;
const constructor other(core::int #index, core::String #name) → self::E4
: this self::E4::•(#index, #name)
;
method core::_enumToString() → core::String
return "E4.${this.{core::_Enum::_name}{core::String}}";
}
class E5 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E5 a = #C20;
enum-element static const field self::E5 b = #C21;
static const field core::List<self::E5> values = #C22;
const constructor primary(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E5
: super core::_Enum::•(#index, #name)
;
method core::_enumToString() → core::String
return "E5.${this.{core::_Enum::_name}{core::String}}";
}
class E6 extends core::_Enum /*isEnum*/ {
enum-element static const field self::E6 a = #C23;
enum-element static const field self::E6 b = #C24;
static const field core::List<self::E6> values = #C25;
const constructor primary(core::int #index, core::String #name) → self::E6
: super core::_Enum::•(#index, #name)
;
const constructor •(core::int #index, core::String #name) → self::E6
: this self::E6::primary(#index, #name)
;
method core::_enumToString() → core::String
return "E6.${this.{core::_Enum::_name}{core::String}}";
}
extension type ET1(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::ET1|constructor#;
constructor tearoff • = self::ET1|constructor#_#new#tearOff;
constructor other = self::ET1|constructor#other;
constructor tearoff other = self::ET1|constructor#_#other#tearOff;
}
extension type E2T(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor • = self::E2T|constructor#;
constructor tearoff • = self::E2T|constructor#_#new#tearOff;
constructor other = self::E2T|constructor#other;
constructor tearoff other = self::E2T|constructor#_#other#tearOff;
}
extension type ET3(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET3|constructor#primary;
constructor tearoff primary = self::ET3|constructor#_#primary#tearOff;
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
}
extension type ET4(core::int i) {
abstract extension-type-member representation-field get i() → core::int;
constructor primary = self::ET4|constructor#primary;
constructor tearoff primary = self::ET4|constructor#_#primary#tearOff;
constructor • = self::ET4|constructor#;
constructor tearoff • = self::ET4|constructor#_#new#tearOff;
}
static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#(i);
static extension-type-member method ET1|constructor#other(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET1|constructor#_#other#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
return self::ET1|constructor#other(i);
static extension-type-member method E2T|constructor#(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#new#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#(i);
static extension-type-member method E2T|constructor#other(core::int i) → self::E2T% /* erasure=core::int, declared=! */ {
lowered final self::E2T% /* erasure=core::int, declared=! */ #this;
#this = self::E2T|constructor#(i);
return #this;
}
static extension-type-member synthetic method E2T|constructor#_#other#tearOff(core::int i) → self::E2T% /* erasure=core::int, declared=! */
return self::E2T|constructor#other(i);
static extension-type-member method ET3|constructor#primary(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#primary#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#primary(i);
static extension-type-member method ET3|constructor#(core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
return self::ET3|constructor#(i);
static extension-type-member method ET4|constructor#primary(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#primary#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#primary(i);
static extension-type-member method ET4|constructor#(core::int i) → self::ET4% /* erasure=core::int, declared=! */ {
lowered final self::ET4% /* erasure=core::int, declared=! */ #this;
#this = self::ET4|constructor#primary(i);
return #this;
}
static extension-type-member synthetic method ET4|constructor#_#new#tearOff(core::int i) → self::ET4% /* erasure=core::int, declared=! */
return self::ET4|constructor#(i);
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E1 {index:#C1, _name:#C2}
#C4 = 1
#C5 = "b"
#C6 = self::E1 {index:#C4, _name:#C5}
#C7 = <self::E1>[#C3, #C6]
#C8 = self::E2 {index:#C1, _name:#C2}
#C9 = self::E2 {index:#C4, _name:#C5}
#C10 = 2
#C11 = "c"
#C12 = self::E2 {index:#C10, _name:#C11}
#C13 = <self::E2>[#C8, #C9, #C12]
#C14 = self::E3 {index:#C1, _name:#C2}
#C15 = self::E3 {index:#C4, _name:#C5}
#C16 = <self::E3>[#C14, #C15]
#C17 = self::E4 {index:#C1, _name:#C2}
#C18 = self::E4 {index:#C4, _name:#C5}
#C19 = <self::E4>[#C17, #C18]
#C20 = self::E5 {index:#C1, _name:#C2}
#C21 = self::E5 {index:#C4, _name:#C5}
#C22 = <self::E5>[#C20, #C21]
#C23 = self::E6 {index:#C1, _name:#C2}
#C24 = self::E6 {index:#C4, _name:#C5}
#C25 = <self::E6>[#C23, #C24]
}
Constructor coverage from constants:
org-dartlang-testcase:///primary_and_generative.dart:
- E1. (from org-dartlang-testcase:///primary_and_generative.dart:30:8)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- E1.other (from org-dartlang-testcase:///primary_and_generative.dart:32:9)
- E2. (from org-dartlang-testcase:///primary_and_generative.dart:35:8)
- E2.other1 (from org-dartlang-testcase:///primary_and_generative.dart:37:13)
- E2.other2 (from org-dartlang-testcase:///primary_and_generative.dart:38:13)
- E3. (from org-dartlang-testcase:///primary_and_generative.dart:41:8)
- E3.other (from org-dartlang-testcase:///primary_and_generative.dart:43:13)
- E4. (from org-dartlang-testcase:///primary_and_generative.dart:46:8)
- E4.other (from org-dartlang-testcase:///primary_and_generative.dart:48:13)
- E5. (from org-dartlang-testcase:///primary_and_generative.dart:53:9)
- E5.primary (from org-dartlang-testcase:///primary_and_generative.dart:51:9)
- E6. (from org-dartlang-testcase:///primary_and_generative.dart:58:9)
- E6.primary (from org-dartlang-testcase:///primary_and_generative.dart:56:9)
@@ -0,0 +1,52 @@
class C1() {
C1.other();
}
class C2() {
new other1();
new other2();
}
class C3() {
new other() : this();
}
class C4() {
new other() : this();
}
class C5.primary() {
new();
}
class C6.primary() {
new() : this.primary();
}
enum E1() { a(), b.other(); const E1.other(); }
enum E2() { a(), b.other1(), c.other2(); const new other1(); const new other2(); }
enum E3() { a(), b.other(); const new other() : this(); }
enum E4() { a(), b.other(); const new other() : this(); }
enum E5.primary() { a(), b.primary(); const new(); }
enum E6.primary() { a(), b.primary(); const new() : this.primary(); }
extension type ET1(int i) {
ET1.other(this.i);
}
extension type E2T(int i) {
new other(int i) : this(i);
}
extension type ET3.primary(int i) {
new(this.i);
}
extension type ET4.primary(int i) {
new(int i) : this.primary(i);
}
@@ -0,0 +1,52 @@
class C1() {
C1.other();
}
class C2() {
new other1();
new other2();
}
class C3() {
new other() : this();
}
class C4() {
new other() : this();
}
class C5.primary() {
new();
}
class C6.primary() {
new() : this.primary();
}
enum E1() { a(), b.other(); const E1.other(); }
enum E2() { a(), b.other1(), c.other2(); const new other1(); const new other2(); }
enum E3() { a(), b.other(); const new other() : this(); }
enum E4() { a(), b.other(); const new other() : this(); }
enum E5.primary() { a(), b.primary(); const new(); }
enum E6.primary() { a(), b.primary(); const new() : this.primary(); }
extension type E2T(int i) {
new other(int i) : this(i);
}
extension type ET1(int i) {
ET1.other(this.i);
}
extension type ET3.primary(int i) {
new(this.i);
}
extension type ET4.primary(int i) {
new(int i) : this.primary(i);
}