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