Version 2.17.0-24.0.dev
Merge commit '5261e6e6c2135162f481c6c247fcff3260dca15e' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index 8dba882..635fec7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -110,16 +110,13 @@
_synthesized.positionalParameters.length ==
_original.positionalParameters.length);
List<int>? positionalSuperParameters = _positionalSuperParameters;
- int superParameterIndex = 0;
for (int i = 0; i < _original.positionalParameters.length; i++) {
if (positionalSuperParameters == null) {
cloneInitializer(_original.positionalParameters[i],
_synthesized.positionalParameters[i]);
- } else if (superParameterIndex < positionalSuperParameters.length &&
- positionalSuperParameters[superParameterIndex] == i) {
+ } else if (i < positionalSuperParameters.length) {
cloneInitializer(_original.positionalParameters[i],
- _synthesized.positionalParameters[superParameterIndex]);
- superParameterIndex++;
+ _synthesized.positionalParameters[positionalSuperParameters[i]]);
}
}
@@ -127,18 +124,30 @@
_synthesized.namedParameters.length ==
_original.namedParameters.length);
List<String>? namedSuperParameters = _namedSuperParameters;
- superParameterIndex = 0;
+ int superParameterNameIndex = 0;
+ Map<String, int> originalNamedParameterIndices = {};
for (int i = 0; i < _original.namedParameters.length; i++) {
+ originalNamedParameterIndices[_original.namedParameters[i].name!] = i;
+ }
+ for (int i = 0; i < _synthesized.namedParameters.length; i++) {
if (namedSuperParameters == null) {
cloneInitializer(
_original.namedParameters[i], _synthesized.namedParameters[i]);
- } else if (superParameterIndex < namedSuperParameters.length &&
- namedSuperParameters[superParameterIndex] ==
- _original.namedParameters[i].name) {
- // TODO(cstefantsova): Handle the erroneous case of missing names.
- cloneInitializer(_original.namedParameters[i],
- _synthesized.namedParameters[superParameterIndex]);
- superParameterIndex++;
+ } else if (superParameterNameIndex < namedSuperParameters.length &&
+ namedSuperParameters[superParameterNameIndex] ==
+ _synthesized.namedParameters[i].name) {
+ String superParameterName =
+ namedSuperParameters[superParameterNameIndex];
+ int? originalNamedParameterIndex =
+ originalNamedParameterIndices[superParameterName];
+ if (originalNamedParameterIndex != null) {
+ cloneInitializer(
+ _original.namedParameters[originalNamedParameterIndex],
+ _synthesized.namedParameters[i]);
+ } else {
+ // TODO(cstefantsova): Handle the erroneous case of missing names.
+ }
+ superParameterNameIndex++;
}
}
} else {
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 99fa6f1..143fcb8 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -188,6 +188,12 @@
}
@override
+ void handleNamedArgument(Token colon) {
+ debugEvent("NamedArgument");
+ pop(); // Named argument name.
+ }
+
+ @override
void handleClassWithClause(Token withKeyword) {
debugEvent("ClassWithClause");
}
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 1a7d41b..8510a02 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1899,6 +1899,13 @@
}
@override
+ void handleNamedArgument(Token colon) {
+ debugEvent("NamedArgument");
+ pop(); // Named argument offset.
+ pop(); // Named argument name.
+ }
+
+ @override
void endNamedMixinApplication(Token beginToken, Token classKeyword,
Token equals, Token? implementsKeyword, Token endToken) {
debugEvent("endNamedMixinApplication");
@@ -2300,6 +2307,7 @@
} else {
declarationName = '#enum';
}
+ libraryBuilder.setCurrentClassName(declarationName);
pushDeclarationContext(DeclarationContext.Enum);
libraryBuilder.beginNestedDeclaration(
TypeParameterScopeKind.enumDeclaration, declarationName);
@@ -2404,6 +2412,7 @@
.resolveNamedTypes(typeVariables, libraryBuilder);
}
+ libraryBuilder.setCurrentClassName(null);
checkEmpty(enumKeyword.charOffset);
popDeclarationContext(DeclarationContext.Enum);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index d79e266..cf5835e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -315,26 +315,28 @@
});
}
- ProcedureBuilder toStringBuilder = new SourceProcedureBuilder(
- /* metadata = */ null,
- 0,
- stringType,
- "toString",
- /* typeVariables = */ null,
- /* formals = */ null,
- ProcedureKind.Method,
- parent,
- charOffset,
- charOffset,
- charOffset,
- charEndOffset,
- toStringReference,
- /* tearOffReference = */ null,
- AsyncMarker.Sync,
- procedureNameScheme,
- isExtensionMember: false,
- isInstanceMember: true);
- members["toString"] = toStringBuilder;
+ if (scope.lookupLocalMember("toString", setter: false) == null) {
+ ProcedureBuilder toStringBuilder = new SourceProcedureBuilder(
+ /* metadata = */ null,
+ 0,
+ stringType,
+ "toString",
+ /* typeVariables = */ null,
+ /* formals = */ null,
+ ProcedureKind.Method,
+ parent,
+ charOffset,
+ charOffset,
+ charOffset,
+ charEndOffset,
+ toStringReference,
+ /* tearOffReference = */ null,
+ AsyncMarker.Sync,
+ procedureNameScheme,
+ isExtensionMember: false,
+ isInstanceMember: true);
+ members["toString"] = toStringBuilder;
+ }
String className = name;
if (enumConstantInfos != null) {
for (int i = 0; i < enumConstantInfos.length; i++) {
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart
new file mode 100644
index 0000000..b73e541
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2022, 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.
+
+enum E0 {
+ one(1, bar: 1),
+ two(2, bar: 2);
+
+ final int foo;
+ final int bar;
+
+ const E0(this.foo, {required this.bar});
+}
+
+enum E1<X> {
+ one(foo: "1"),
+ two(foo: 2);
+
+ final X foo;
+
+ const E1({required this.foo});
+}
+
+enum E2<X, Y, Z> {
+ one(1, bar: "1", baz: 3.14),
+ two("2", baz: 3.14, bar: 2),
+ three(3.0, bar: false);
+
+ final X foo;
+ final Y bar;
+ final Z? baz;
+
+ const E2(this.foo, {required this.bar, this.baz = null});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
new file mode 100644
index 0000000..9056dd8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = #C8;
+ static const field self::E0 one = #C4;
+ static const field self::E0 two = #C7;
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = #C13;
+ static const field self::E1<core::String> one = #C11;
+ static const field self::E1<core::int> two = #C12;
+ final field self::E1::X% foo;
+ const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
+ static const field self::E2<core::int, core::String, core::double> one = #C15;
+ static const field self::E2<core::String, core::int, core::double> two = #C17;
+ static const field self::E2<core::double, core::bool, dynamic> three = #C21;
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
+ #C5 = 2
+ #C6 = "two"
+ #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
+ #C8 = <self::E0>[#C4, #C7]
+ #C9 = null
+ #C10 = "1"
+ #C11 = self::E1<core::String> {foo:#C10, index:#C2, _name:#C3}
+ #C12 = self::E1<core::int> {foo:#C5, index:#C1, _name:#C6}
+ #C13 = <self::E1<dynamic>>[#C11, #C12]
+ #C14 = 3.14
+ #C15 = self::E2<core::int, core::String, core::double> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
+ #C16 = "2"
+ #C17 = self::E2<core::String, core::int, core::double> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
+ #C18 = 3.0
+ #C19 = false
+ #C20 = "three"
+ #C21 = self::E2<core::double, core::bool, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
+ #C22 = <self::E2<dynamic, dynamic, dynamic>>[#C15, #C17, #C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///named_arguments.dart:
+- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
+- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
new file mode 100644
index 0000000..9056dd8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = #C8;
+ static const field self::E0 one = #C4;
+ static const field self::E0 two = #C7;
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = #C13;
+ static const field self::E1<core::String> one = #C11;
+ static const field self::E1<core::int> two = #C12;
+ final field self::E1::X% foo;
+ const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
+ static const field self::E2<core::int, core::String, core::double> one = #C15;
+ static const field self::E2<core::String, core::int, core::double> two = #C17;
+ static const field self::E2<core::double, core::bool, dynamic> three = #C21;
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
+ #C5 = 2
+ #C6 = "two"
+ #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
+ #C8 = <self::E0>[#C4, #C7]
+ #C9 = null
+ #C10 = "1"
+ #C11 = self::E1<core::String> {foo:#C10, index:#C2, _name:#C3}
+ #C12 = self::E1<core::int> {foo:#C5, index:#C1, _name:#C6}
+ #C13 = <self::E1<dynamic>>[#C11, #C12]
+ #C14 = 3.14
+ #C15 = self::E2<core::int, core::String, core::double> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
+ #C16 = "2"
+ #C17 = self::E2<core::String, core::int, core::double> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
+ #C18 = 3.0
+ #C19 = false
+ #C20 = "three"
+ #C21 = self::E2<core::double, core::bool, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
+ #C22 = <self::E2<dynamic, dynamic, dynamic>>[#C15, #C17, #C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///named_arguments.dart:
+- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
+- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
new file mode 100644
index 0000000..c2dd324
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+enum E0 { one(1, bar: 1), two(2, bar: 2); final int foo; final int bar; const E0(this.foo, {required this.bar}); }
+enum E1<X> { one(foo: "1"), two(foo: 2); final X foo; const E1({required this.foo}); }
+enum E2<X, Y, Z> { one(1, bar: "1", baz: 3.14), two("2", baz: 3.14, bar: 2), three(3.0, bar: false); final X foo; final Y bar; final Z? baz; const E2(this.foo, {required this.bar, this.baz = null}); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
new file mode 100644
index 0000000..5c96c28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = #C8;
+ static const field self::E0 one = #C4;
+ static const field self::E0 two = #C7;
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = #C13;
+ static const field self::E1<core::String> one = #C11;
+ static const field self::E1<core::int> two = #C12;
+ final field self::E1::X% foo;
+ const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
+ static const field self::E2<core::int, core::String, core::double> one = #C15;
+ static const field self::E2<core::String, core::int, core::double> two = #C17;
+ static const field self::E2<core::double, core::bool, dynamic> three = #C21;
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
+ #C5 = 2
+ #C6 = "two"
+ #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
+ #C8 = <self::E0*>[#C4, #C7]
+ #C9 = null
+ #C10 = "1"
+ #C11 = self::E1<core::String*> {foo:#C10, index:#C2, _name:#C3}
+ #C12 = self::E1<core::int*> {foo:#C5, index:#C1, _name:#C6}
+ #C13 = <self::E1<dynamic>*>[#C11, #C12]
+ #C14 = 3.14
+ #C15 = self::E2<core::int*, core::String*, core::double*> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
+ #C16 = "2"
+ #C17 = self::E2<core::String*, core::int*, core::double*> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
+ #C18 = 3.0
+ #C19 = false
+ #C20 = "three"
+ #C21 = self::E2<core::double*, core::bool*, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
+ #C22 = <self::E2<dynamic, dynamic, dynamic>*>[#C15, #C17, #C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///named_arguments.dart:
+- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
+- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..5c96c28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = #C8;
+ static const field self::E0 one = #C4;
+ static const field self::E0 two = #C7;
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = #C13;
+ static const field self::E1<core::String> one = #C11;
+ static const field self::E1<core::int> two = #C12;
+ final field self::E1::X% foo;
+ const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
+ static const field self::E2<core::int, core::String, core::double> one = #C15;
+ static const field self::E2<core::String, core::int, core::double> two = #C17;
+ static const field self::E2<core::double, core::bool, dynamic> three = #C21;
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
+ #C5 = 2
+ #C6 = "two"
+ #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
+ #C8 = <self::E0*>[#C4, #C7]
+ #C9 = null
+ #C10 = "1"
+ #C11 = self::E1<core::String*> {foo:#C10, index:#C2, _name:#C3}
+ #C12 = self::E1<core::int*> {foo:#C5, index:#C1, _name:#C6}
+ #C13 = <self::E1<dynamic>*>[#C11, #C12]
+ #C14 = 3.14
+ #C15 = self::E2<core::int*, core::String*, core::double*> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
+ #C16 = "2"
+ #C17 = self::E2<core::String*, core::int*, core::double*> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
+ #C18 = 3.0
+ #C19 = false
+ #C20 = "three"
+ #C21 = self::E2<core::double*, core::bool*, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
+ #C22 = <self::E2<dynamic, dynamic, dynamic>*>[#C15, #C17, #C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///named_arguments.dart:
+- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
+- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
new file mode 100644
index 0000000..c98ffa3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = const <self::E0>[self::E0::one, self::E0::two];
+ static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
+ static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name, core::int foo, {required core::int bar}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = const <self::E1<dynamic>>[self::E1::one, self::E1::two];
+ static const field self::E1<core::String> one = const self::E1::•<core::String>(0, "one", foo: "1");
+ static const field self::E1<core::int> two = const self::E1::•<core::int>(1, "two", foo: 2);
+ final field self::E1::X% foo;
+ const constructor •(core::int index, core::String name, {required self::E1::X% foo}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = const <self::E2<dynamic, dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
+ static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
+ static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
+ static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar, self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///named_arguments.dart:5:6 -> ListConstant(const <E0*>[const E0{E0.foo: 1, E0.bar: 1, _Enum.index: 0, _Enum._name: "one"}, const E0{E0.foo: 2, E0.bar: 2, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:6:3 -> InstanceConstant(const E0{E0.foo: 1, E0.bar: 1, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:7:3 -> InstanceConstant(const E0{E0.foo: 2, E0.bar: 2, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///named_arguments.dart:15:6 -> ListConstant(const <E1<dynamic>*>[const E1<String*>{E1.foo: "1", _Enum.index: 0, _Enum._name: "one"}, const E1<int*>{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:16:3 -> InstanceConstant(const E1<String*>{E1.foo: "1", _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:17:3 -> InstanceConstant(const E1<int*>{E1.foo: 2, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///named_arguments.dart:24:6 -> ListConstant(const <E2<dynamic, dynamic, dynamic>*>[const E2<int*, String*, double*>{E2.foo: 1, E2.bar: "1", E2.baz: 3.14, _Enum.index: 0, _Enum._name: "one"}, const E2<String*, int*, double*>{E2.foo: "2", E2.bar: 2, E2.baz: 3.14, _Enum.index: 1, _Enum._name: "two"}, const E2<double*, bool*, dynamic>{E2.foo: 3.0, E2.bar: false, E2.baz: null, _Enum.index: 2, _Enum._name: "three"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:25:3 -> InstanceConstant(const E2<int*, String*, double*>{E2.foo: 1, E2.bar: "1", E2.baz: 3.14, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:26:3 -> InstanceConstant(const E2<String*, int*, double*>{E2.foo: "2", E2.bar: 2, E2.baz: 3.14, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///named_arguments.dart:27:3 -> InstanceConstant(const E2<double*, bool*, dynamic>{E2.foo: 3.0, E2.bar: false, E2.baz: null, _Enum.index: 2, _Enum._name: "three"})
+Extra constant evaluation: evaluated: 31, effectively constant: 10
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
new file mode 100644
index 0000000..5c96c28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E0 extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E0> values = #C8;
+ static const field self::E0 one = #C4;
+ static const field self::E0 two = #C7;
+ final field core::int foo;
+ final field core::int bar;
+ const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
+ : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E0.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E1<dynamic>> values = #C13;
+ static const field self::E1<core::String> one = #C11;
+ static const field self::E1<core::int> two = #C12;
+ final field self::E1::X% foo;
+ const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
+ : self::E1::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
+ static const field self::E2<core::int, core::String, core::double> one = #C15;
+ static const field self::E2<core::String, core::int, core::double> two = #C17;
+ static const field self::E2<core::double, core::bool, dynamic> three = #C21;
+ final field self::E2::X% foo;
+ final field self::E2::Y% bar;
+ final field self::E2::Z? baz;
+ const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+ : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E0 {foo:#C1, bar:#C1, index:#C2, _name:#C3}
+ #C5 = 2
+ #C6 = "two"
+ #C7 = self::E0 {foo:#C5, bar:#C5, index:#C1, _name:#C6}
+ #C8 = <self::E0*>[#C4, #C7]
+ #C9 = null
+ #C10 = "1"
+ #C11 = self::E1<core::String*> {foo:#C10, index:#C2, _name:#C3}
+ #C12 = self::E1<core::int*> {foo:#C5, index:#C1, _name:#C6}
+ #C13 = <self::E1<dynamic>*>[#C11, #C12]
+ #C14 = 3.14
+ #C15 = self::E2<core::int*, core::String*, core::double*> {foo:#C1, bar:#C10, baz:#C14, index:#C2, _name:#C3}
+ #C16 = "2"
+ #C17 = self::E2<core::String*, core::int*, core::double*> {foo:#C16, bar:#C5, baz:#C14, index:#C1, _name:#C6}
+ #C18 = 3.0
+ #C19 = false
+ #C20 = "three"
+ #C21 = self::E2<core::double*, core::bool*, dynamic> {foo:#C18, bar:#C19, baz:#C9, index:#C5, _name:#C20}
+ #C22 = <self::E2<dynamic, dynamic, dynamic>*>[#C15, #C17, #C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///named_arguments.dart:
+- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
+- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart b/pkg/front_end/testcases/super_parameters/issue48142.dart
new file mode 100644
index 0000000..d700eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2022, 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 S1 {
+ int s1;
+ int s2;
+ S1(this.s1, [this.s2 = 42]);
+}
+
+class C1 extends S1 {
+ int i1;
+ int i2;
+ C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
+}
+
+class S2 {
+ S2({String one = "1", bool two = false, int three = 3, double four = 4,
+ num five = 3.14, List<String> six = const ["six"]});
+}
+
+class C21 extends S2 {
+ C21({dynamic foo, super.one, dynamic bar, dynamic baz, super.three,
+ super.five});
+}
+
+class C22 extends S2 {
+ C22({dynamic foo, super.six, dynamic bar, dynamic baz, super.four,
+ super.two});
+}
+
+class C23 extends S2 {
+ C23({super.three, dynamic foo, super.one, super.four, dynamic bar, super.two,
+ dynamic baz});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.expect
new file mode 100644
index 0000000..c7cebd9
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = #C1]) → self::S1
+ : self::S1::s1 = s1, self::S1::s2 = s2, super core::Object::•()
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = #C1]) → self::C1
+ : self::C1::i1 = i1, self::C1::i2 = x, super self::S1::•(s1, s2)
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = #C2, core::bool two = #C3, core::int three = #C4, core::double four = #C5, core::num five = #C6, core::List<core::String> six = #C8}) → self::S2
+ : super core::Object::•()
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::String one = #C2, dynamic bar = #C9, dynamic baz = #C9, core::int three = #C4, core::num five = #C6}) → self::C21
+ : super self::S2::•(one: one, three: three, five: five)
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::List<core::String> six = #C8, dynamic bar = #C9, dynamic baz = #C9, core::double four = #C5, core::bool two = #C3}) → self::C22
+ : super self::S2::•(six: six, four: four, two: two)
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = #C4, dynamic foo = #C9, core::String one = #C2, core::double four = #C5, dynamic bar = #C9, core::bool two = #C3, dynamic baz = #C9}) → self::C23
+ : super self::S2::•(three: three, one: one, four: four, two: two)
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 42
+ #C2 = "1"
+ #C3 = false
+ #C4 = 3
+ #C5 = 4.0
+ #C6 = 3.14
+ #C7 = "six"
+ #C8 = <core::String>[#C7]
+ #C9 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.transformed.expect
new file mode 100644
index 0000000..c7cebd9
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.strong.transformed.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = #C1]) → self::S1
+ : self::S1::s1 = s1, self::S1::s2 = s2, super core::Object::•()
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = #C1]) → self::C1
+ : self::C1::i1 = i1, self::C1::i2 = x, super self::S1::•(s1, s2)
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = #C2, core::bool two = #C3, core::int three = #C4, core::double four = #C5, core::num five = #C6, core::List<core::String> six = #C8}) → self::S2
+ : super core::Object::•()
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::String one = #C2, dynamic bar = #C9, dynamic baz = #C9, core::int three = #C4, core::num five = #C6}) → self::C21
+ : super self::S2::•(one: one, three: three, five: five)
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::List<core::String> six = #C8, dynamic bar = #C9, dynamic baz = #C9, core::double four = #C5, core::bool two = #C3}) → self::C22
+ : super self::S2::•(six: six, four: four, two: two)
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = #C4, dynamic foo = #C9, core::String one = #C2, core::double four = #C5, dynamic bar = #C9, core::bool two = #C3, dynamic baz = #C9}) → self::C23
+ : super self::S2::•(three: three, one: one, four: four, two: two)
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 42
+ #C2 = "1"
+ #C3 = false
+ #C4 = 3
+ #C5 = 4.0
+ #C6 = 3.14
+ #C7 = "six"
+ #C8 = <core::String>[#C7]
+ #C9 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
new file mode 100644
index 0000000..d25be67
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+class S1 {
+ int s1;
+ int s2;
+ S1(this.s1, [this.s2 = 42]);
+}
+class C1 extends S1 {
+ int i1;
+ int i2;
+ C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
+}
+class S2 {
+ S2({String one = "1", bool two = false, int three = 3, double four = 4, num five = 3.14, List<String> six = const ["six"]});
+}
+class C21 extends S2 {
+ C21({dynamic foo, super.one, dynamic bar, dynamic baz, super.three, super.five});
+}
+class C22 extends S2 {
+ C22({dynamic foo, super.six, dynamic bar, dynamic baz, super.four, super.two});
+}
+class C23 extends S2 {
+ C23({super.three, dynamic foo, super.one, super.four, dynamic bar, super.two, dynamic baz});
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.expect
new file mode 100644
index 0000000..e86004a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = #C1]) → self::S1
+ : self::S1::s1 = s1, self::S1::s2 = s2, super core::Object::•()
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = #C1]) → self::C1
+ : self::C1::i1 = i1, self::C1::i2 = x, super self::S1::•(s1, s2)
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = #C2, core::bool two = #C3, core::int three = #C4, core::double four = #C5, core::num five = #C6, core::List<core::String> six = #C8}) → self::S2
+ : super core::Object::•()
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::String one = #C2, dynamic bar = #C9, dynamic baz = #C9, core::int three = #C4, core::num five = #C6}) → self::C21
+ : super self::S2::•(one: one, three: three, five: five)
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::List<core::String> six = #C8, dynamic bar = #C9, dynamic baz = #C9, core::double four = #C5, core::bool two = #C3}) → self::C22
+ : super self::S2::•(six: six, four: four, two: two)
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = #C4, dynamic foo = #C9, core::String one = #C2, core::double four = #C5, dynamic bar = #C9, core::bool two = #C3, dynamic baz = #C9}) → self::C23
+ : super self::S2::•(three: three, one: one, four: four, two: two)
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 42
+ #C2 = "1"
+ #C3 = false
+ #C4 = 3
+ #C5 = 4.0
+ #C6 = 3.14
+ #C7 = "six"
+ #C8 = <core::String*>[#C7]
+ #C9 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.modular.expect
new file mode 100644
index 0000000..e86004a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = #C1]) → self::S1
+ : self::S1::s1 = s1, self::S1::s2 = s2, super core::Object::•()
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = #C1]) → self::C1
+ : self::C1::i1 = i1, self::C1::i2 = x, super self::S1::•(s1, s2)
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = #C2, core::bool two = #C3, core::int three = #C4, core::double four = #C5, core::num five = #C6, core::List<core::String> six = #C8}) → self::S2
+ : super core::Object::•()
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::String one = #C2, dynamic bar = #C9, dynamic baz = #C9, core::int three = #C4, core::num five = #C6}) → self::C21
+ : super self::S2::•(one: one, three: three, five: five)
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::List<core::String> six = #C8, dynamic bar = #C9, dynamic baz = #C9, core::double four = #C5, core::bool two = #C3}) → self::C22
+ : super self::S2::•(six: six, four: four, two: two)
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = #C4, dynamic foo = #C9, core::String one = #C2, core::double four = #C5, dynamic bar = #C9, core::bool two = #C3, dynamic baz = #C9}) → self::C23
+ : super self::S2::•(three: three, one: one, four: four, two: two)
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 42
+ #C2 = "1"
+ #C3 = false
+ #C4 = 3
+ #C5 = 4.0
+ #C6 = 3.14
+ #C7 = "six"
+ #C8 = <core::String*>[#C7]
+ #C9 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
new file mode 100644
index 0000000..00d1860
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = 42]) → self::S1
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = 42]) → self::C1
+ : self::C1::i1 = i1
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = "1", core::bool two = false, core::int three = 3, core::double four = 4.0, core::num five = 3.14, core::List<core::String> six = const <core::String>["six"]}) → self::S2
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo, core::String one = "1", dynamic bar, dynamic baz, core::int three = 3, core::num five = 3.14}) → self::C21
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo, core::List<core::String> six = const <core::String>["six"], dynamic bar, dynamic baz, core::double four = 4.0, core::bool two = false}) → self::C22
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = 3, dynamic foo, core::String one = "1", core::double four = 4.0, dynamic bar, core::bool two = false, dynamic baz}) → self::C23
+ ;
+}
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48142.dart:19:43 -> ListConstant(const <String*>["six"])
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48142.dart:28:27 -> ListConstant(const <String*>["six"])
+Extra constant evaluation: evaluated: 3, effectively constant: 2
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.transformed.expect
new file mode 100644
index 0000000..e86004a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.transformed.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+ field core::int s1;
+ field core::int s2;
+ constructor •(core::int s1, [core::int s2 = #C1]) → self::S1
+ : self::S1::s1 = s1, self::S1::s2 = s2, super core::Object::•()
+ ;
+}
+class C1 extends self::S1 {
+ field core::int i1;
+ field core::int i2;
+ constructor •(core::int i1, core::int s1, core::int x, [core::int s2 = #C1]) → self::C1
+ : self::C1::i1 = i1, self::C1::i2 = x, super self::S1::•(s1, s2)
+ ;
+}
+class S2 extends core::Object {
+ constructor •({core::String one = #C2, core::bool two = #C3, core::int three = #C4, core::double four = #C5, core::num five = #C6, core::List<core::String> six = #C8}) → self::S2
+ : super core::Object::•()
+ ;
+}
+class C21 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::String one = #C2, dynamic bar = #C9, dynamic baz = #C9, core::int three = #C4, core::num five = #C6}) → self::C21
+ : super self::S2::•(one: one, three: three, five: five)
+ ;
+}
+class C22 extends self::S2 {
+ constructor •({dynamic foo = #C9, core::List<core::String> six = #C8, dynamic bar = #C9, dynamic baz = #C9, core::double four = #C5, core::bool two = #C3}) → self::C22
+ : super self::S2::•(six: six, four: four, two: two)
+ ;
+}
+class C23 extends self::S2 {
+ constructor •({core::int three = #C4, dynamic foo = #C9, core::String one = #C2, core::double four = #C5, dynamic bar = #C9, core::bool two = #C3, dynamic baz = #C9}) → self::C23
+ : super self::S2::•(three: three, one: one, four: four, two: two)
+ ;
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 42
+ #C2 = "1"
+ #C3 = false
+ #C4 = 3
+ #C5 = 4.0
+ #C6 = 3.14
+ #C7 = "six"
+ #C8 = <core::String*>[#C7]
+ #C9 = null
+}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 6afc196..0895121 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -33,6 +33,7 @@
enhanced_enums/instantiated_generic_enum_types: FormatterCrash
enhanced_enums/issue48084: FormatterCrash
enhanced_enums/members: FormatterCrash
+enhanced_enums/named_arguments: FormatterCrash
enhanced_enums/qualified_names_with_no_type_arguments: FormatterCrash
enhanced_enums/redirecting_initializers: FormatterCrash
enhanced_enums/simple_fields: FormatterCrash
@@ -211,6 +212,7 @@
regress/issue_41265.crash: FormatterCrash
super_parameters/circular_dependency_inference: FormatterCrash
super_parameters/default_values: FormatterCrash
+super_parameters/issue48142: FormatterCrash
super_parameters/simple: FormatterCrash
super_parameters/simple_inference: FormatterCrash
super_parameters/simple_named_super_parameters: FormatterCrash
diff --git a/tools/VERSION b/tools/VERSION
index 9973e4e..f958102 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 23
+PRERELEASE 24
PRERELEASE_PATCH 0
\ No newline at end of file