Version 3.11.0-68.0.dev

Merge 6d70657fad57d868cde3e8943c71fcc31cbe3c60 into dev
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index c8b3585..0d4d18f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -2209,10 +2209,20 @@
         Token closer = typeParam.skip(token);
         if (closer.next!.isA(TokenType.OPEN_PAREN)) {
           if (varFinalOrConst != null) {
-            reportRecoverableError(
-              varFinalOrConst,
-              codes.codeFunctionTypedParameterVar,
-            );
+            if (memberKind != MemberKind.PrimaryConstructor) {
+              reportRecoverableError(
+                varFinalOrConst,
+                codes.codeFunctionTypedParameterVar,
+              );
+            } else {
+              if (!_isDeclaringConstructorsFeatureEnabled) {
+                reportExperimentNotEnabled(
+                  ExperimentalFlag.declaringConstructors,
+                  varFinalOrConst,
+                  varFinalOrConst,
+                );
+              }
+            }
           }
           beforeInlineFunctionType = token;
           token = closer.next!.endGroup!;
@@ -2221,10 +2231,20 @@
       }
     } else if (next.isA(TokenType.OPEN_PAREN)) {
       if (varFinalOrConst != null) {
-        reportRecoverableError(
-          varFinalOrConst,
-          codes.codeFunctionTypedParameterVar,
-        );
+        if (memberKind != MemberKind.PrimaryConstructor) {
+          reportRecoverableError(
+            varFinalOrConst,
+            codes.codeFunctionTypedParameterVar,
+          );
+        } else {
+          if (!_isDeclaringConstructorsFeatureEnabled) {
+            reportExperimentNotEnabled(
+              ExperimentalFlag.declaringConstructors,
+              varFinalOrConst,
+              varFinalOrConst,
+            );
+          }
+        }
       }
       beforeInlineFunctionType = token;
       token = next.endGroup!;
diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart
index 118a713..da53fc5 100644
--- a/pkg/dart2wasm/lib/code_generator.dart
+++ b/pkg/dart2wasm/lib/code_generator.dart
@@ -54,13 +54,9 @@
     extends ExpressionVisitor1<w.ValueType, w.ValueType>
     with
         ExpressionVisitor1DefaultMixin<w.ValueType, w.ValueType>,
-        ExpressionVisitor1ExperimentExclusionMixin<w.ValueType,
-            w.ValueType>,
+        ExpressionVisitor1ExperimentExclusionMixin<w.ValueType, w.ValueType>,
         StatementVisitorExperimentExclusionMixin<void>
-    implements
-        InitializerVisitor<void>,
-        StatementVisitor<void>,
-        CodeGenerator {
+    implements InitializerVisitor<void>, StatementVisitor<void>, CodeGenerator {
   final Translator translator;
   final w.FunctionType functionType;
   final Member enclosingMember;
diff --git a/pkg/dart2wasm/lib/compile.dart b/pkg/dart2wasm/lib/compile.dart
index 34b5955..a936063 100644
--- a/pkg/dart2wasm/lib/compile.dart
+++ b/pkg/dart2wasm/lib/compile.dart
@@ -584,7 +584,7 @@
     return DynamicSubmoduleStrategy(
         component, options, target, coreTypes, dynamicMainModuleUri!);
   }
-  return DefaultModuleStrategy(component, options);
+  return DefaultModuleStrategy(coreTypes, component, options);
 }
 
 // Patches `dart:_internal`s `mainTearOff{0,1,2}` getters.
diff --git a/pkg/dart2wasm/lib/deferred_loading.dart b/pkg/dart2wasm/lib/deferred_loading.dart
index 3e68215..35256af 100644
--- a/pkg/dart2wasm/lib/deferred_loading.dart
+++ b/pkg/dart2wasm/lib/deferred_loading.dart
@@ -18,6 +18,7 @@
 import 'generate_wasm.dart';
 import 'modules.dart';
 import 'target.dart';
+import 'util.dart' show addPragma;
 
 /// The root of a deferred import subgraph.
 ///
@@ -91,15 +92,21 @@
   DeferredLoadingModuleStrategy(
       this.component, this.options, this.kernelTarget, this.coreTypes);
 
+  late final deferredLoweringTransformer = options.loadsIdsUri != null
+      ? _DeferredLoadingLoweringLoadIds(component, coreTypes)
+      : DeferredLoadingLoweringUris(coreTypes);
+
   @override
   void prepareComponent() {
-    if (options.loadsIdsUri != null) {
-      component.accept(_DeferredLoadingLoadIdTransformer(component, coreTypes));
-    }
+    // Since we've deferred module loading enabled, we mark the necessary
+    // runtime methods as entrypoints for TFA.
+    deferredLoweringTransformer.markRuntimeFunctionsAsEntrypoints();
   }
 
   @override
   Future<void> processComponentAfterTfa() async {
+    component.accept(deferredLoweringTransformer);
+
     final (libraryToRootSet, importTargetMap) = _buildLibraryToImports();
 
     final builder = ModuleMetadataBuilder(options);
@@ -229,6 +236,10 @@
   final WasmCompilerOptions options;
   late final ModuleOutputData moduleOutputData;
 
+  late final deferredLoweringTransformer = options.loadsIdsUri != null
+      ? _DeferredLoadingLoweringLoadIds(component, coreTypes)
+      : DeferredLoadingLoweringUris(coreTypes);
+
   /// We load all 'dart:*' libraries since just doing the deferred load of modules
   /// requires a significant portion of the SDK libraries.
   late final Set<Library> _testModeMainLibraries = {
@@ -283,13 +294,15 @@
     await_transformer.transformLibraries(
         [invokeMain.enclosingLibrary], classHierarchy, coreTypes);
 
-    if (options.loadsIdsUri != null) {
-      component.accept(_DeferredLoadingLoadIdTransformer(component, coreTypes));
-    }
+    // Since we've deferred module loading enabled, we mark the necessary
+    // runtime methods as entrypoints for TFA.
+    deferredLoweringTransformer.markRuntimeFunctionsAsEntrypoints();
   }
 
   @override
   Future<void> processComponentAfterTfa() async {
+    component.accept(deferredLoweringTransformer);
+
     final moduleBuilder = ModuleMetadataBuilder(options);
     final mainModule = moduleBuilder.buildModuleMetadata();
     final initLibraries = _testModeMainLibraries;
@@ -409,21 +422,78 @@
   return const JsonEncoder.withIndent('  ').convert(output);
 }
 
-class _DeferredLoadingLoadIdTransformer extends Transformer {
-  final Procedure? _loadLibrary;
-  final Procedure? _checkLibraryIsLoaded;
+abstract class DeferredLoadingLoweringBase extends Transformer {
+  final CoreTypes coreTypes;
+
+  DeferredLoadingLoweringBase(this.coreTypes);
+
+  void markRuntimeFunctionsAsEntrypoints();
+
+  void addEntryPointPragma(Procedure node) {
+    addPragma(node, 'wasm:entry-point', coreTypes, value: BoolConstant(true));
+  }
+}
+
+class DeferredLoadingLoweringUris extends DeferredLoadingLoweringBase {
+  final Procedure _loadLibrary;
+  final Procedure _checkLibraryIsLoaded;
+
+  DeferredLoadingLoweringUris(super.coreTypes)
+      : _loadLibrary = coreTypes.index
+            .getTopLevelProcedure('dart:_internal', 'loadLibrary'),
+        _checkLibraryIsLoaded = coreTypes.index
+            .getTopLevelProcedure('dart:_internal', 'checkLibraryIsLoaded');
+
+  @override
+  void markRuntimeFunctionsAsEntrypoints() {
+    addEntryPointPragma(_loadLibrary);
+    addEntryPointPragma(_checkLibraryIsLoaded);
+  }
+
+  @override
+  TreeNode visitLibrary(Library node) {
+    for (final dep in node.dependencies) {
+      if (dep.isDeferred) {
+        return super.visitLibrary(node);
+      }
+    }
+    // No need to transform libraries without deferred imports.
+    return node;
+  }
+
+  @override
+  TreeNode visitLoadLibrary(LoadLibrary node) {
+    final import = node.import;
+    return StaticInvocation(
+        _loadLibrary,
+        Arguments([
+          StringLiteral('${import.enclosingLibrary.importUri}'),
+          StringLiteral(import.name!)
+        ]));
+  }
+
+  @override
+  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    final import = node.import;
+    return StaticInvocation(
+        _checkLibraryIsLoaded,
+        Arguments([
+          StringLiteral('${import.enclosingLibrary.importUri}'),
+          StringLiteral(import.name!)
+        ]));
+  }
+}
+
+class _DeferredLoadingLoweringLoadIds extends DeferredLoadingLoweringBase {
   final Procedure _loadLibraryFromLoadId;
   final Procedure _checkLibraryIsLoadedFromLoadId;
+
   final LoadIdRepository _loadIdRepository = LoadIdRepository();
   Map<String, int> _libraryLoadIds = {};
   int _loadIdCounter = 1;
 
-  _DeferredLoadingLoadIdTransformer(Component component, CoreTypes coreTypes)
-      : _loadLibrary = coreTypes.index.tryGetProcedure(
-            'dart:_internal', LibraryIndex.topLevel, 'loadLibrary'),
-        _checkLibraryIsLoaded = coreTypes.index.tryGetProcedure(
-            'dart:_internal', LibraryIndex.topLevel, 'checkLibraryIsLoaded'),
-        _loadLibraryFromLoadId = coreTypes.index
+  _DeferredLoadingLoweringLoadIds(Component component, super.coreTypes)
+      : _loadLibraryFromLoadId = coreTypes.index
             .getTopLevelProcedure('dart:_internal', 'loadLibraryFromLoadId'),
         _checkLibraryIsLoadedFromLoadId = coreTypes.index.getTopLevelProcedure(
             'dart:_internal', 'checkLibraryIsLoadedFromLoadId') {
@@ -431,6 +501,12 @@
   }
 
   @override
+  void markRuntimeFunctionsAsEntrypoints() {
+    addEntryPointPragma(_loadLibraryFromLoadId);
+    addEntryPointPragma(_checkLibraryIsLoadedFromLoadId);
+  }
+
+  @override
   TreeNode visitLibrary(Library node) {
     // Assign a load ID to each deferred import.
     _libraryLoadIds = {};
@@ -446,17 +522,19 @@
   }
 
   @override
-  TreeNode visitStaticInvocation(StaticInvocation node) {
-    if (node.target != _loadLibrary && node.target != _checkLibraryIsLoaded) {
-      return super.visitStaticInvocation(node);
-    }
-    final [_, importPrefix as StringLiteral] = node.arguments.positional;
-    final loadId = '${_libraryLoadIds[importPrefix.value]!}';
+  TreeNode visitLoadLibrary(LoadLibrary node) {
+    final import = node.import;
+    final loadId = '${_libraryLoadIds[import.name!]!}';
     return StaticInvocation(
-        node.target == _loadLibrary
-            ? _loadLibraryFromLoadId
-            : _checkLibraryIsLoadedFromLoadId,
-        Arguments([StringLiteral(loadId)]));
+        _loadLibraryFromLoadId, Arguments([StringLiteral(loadId)]));
+  }
+
+  @override
+  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    final import = node.import;
+    final loadId = '${_libraryLoadIds[import.name!]!}';
+    return StaticInvocation(
+        _checkLibraryIsLoadedFromLoadId, Arguments([StringLiteral(loadId)]));
   }
 }
 
diff --git a/pkg/dart2wasm/lib/dynamic_modules.dart b/pkg/dart2wasm/lib/dynamic_modules.dart
index 7aad53fa..12d36b1 100644
--- a/pkg/dart2wasm/lib/dynamic_modules.dart
+++ b/pkg/dart2wasm/lib/dynamic_modules.dart
@@ -20,6 +20,7 @@
 import 'code_generator.dart';
 import 'compiler_options.dart';
 import 'constants.dart' show maxArrayNewFixedLength;
+import 'deferred_loading.dart' show DeferredLoadingLoweringUris;
 import 'dispatch_table.dart';
 import 'dynamic_module_kernel_metadata.dart';
 import 'intrinsics.dart' show MemberIntrinsic;
@@ -117,6 +118,9 @@
       this.dynamicInterfaceSpecificationBaseUri)
       : index = coreTypes.index;
 
+  late final deferredLoweringTransformer =
+      DeferredLoadingLoweringUris(coreTypes);
+
   @override
   void prepareComponent() {
     // Annotate the kernel with info from dynamic interface.
@@ -131,6 +135,8 @@
 
     component.addMetadataRepository(DynamicModuleConstantRepository());
     component.addMetadataRepository(DynamicModuleGlobalIdRepository());
+
+    deferredLoweringTransformer.markRuntimeFunctionsAsEntrypoints();
   }
 
   @override
@@ -202,7 +208,9 @@
   }
 
   @override
-  Future<void> processComponentAfterTfa() async {}
+  Future<void> processComponentAfterTfa() async {
+    component.accept(deferredLoweringTransformer);
+  }
 }
 
 class DynamicSubmoduleStrategy extends ModuleStrategy {
diff --git a/pkg/dart2wasm/lib/modules.dart b/pkg/dart2wasm/lib/modules.dart
index 40c073c..32192d5 100644
--- a/pkg/dart2wasm/lib/modules.dart
+++ b/pkg/dart2wasm/lib/modules.dart
@@ -7,6 +7,7 @@
 import 'package:path/path.dart' as path;
 
 import 'compiler_options.dart';
+import 'deferred_loading.dart' show DeferredLoadingLoweringUris;
 import 'target.dart';
 import 'util.dart';
 
@@ -101,10 +102,14 @@
 
 /// Module strategy that puts all libraries into a single module.
 class DefaultModuleStrategy extends ModuleStrategy {
+  final CoreTypes coreTypes;
   final Component component;
   final WasmCompilerOptions options;
 
-  DefaultModuleStrategy(this.component, this.options);
+  DefaultModuleStrategy(this.coreTypes, this.component, this.options);
+
+  late final deferredLoweringTransformer =
+      DeferredLoadingLoweringUris(coreTypes);
 
   @override
   ModuleOutputData buildModuleOutputData() {
@@ -117,10 +122,14 @@
   }
 
   @override
-  void prepareComponent() {}
+  void prepareComponent() {
+    deferredLoweringTransformer.markRuntimeFunctionsAsEntrypoints();
+  }
 
   @override
-  Future<void> processComponentAfterTfa() async {}
+  Future<void> processComponentAfterTfa() async {
+    component.accept(deferredLoweringTransformer);
+  }
 }
 
 bool _hasWasmExportPragma(CoreTypes coreTypes, Member m) =>
diff --git a/pkg/dart2wasm/lib/transformers.dart b/pkg/dart2wasm/lib/transformers.dart
index af643d6..96a30aa 100644
--- a/pkg/dart2wasm/lib/transformers.dart
+++ b/pkg/dart2wasm/lib/transformers.dart
@@ -57,9 +57,6 @@
   final Procedure _trySetStackTraceForwarder;
   final Procedure _trySetStackTrace;
 
-  final Procedure _loadLibrary;
-  final Procedure _checkLibraryIsLoaded;
-
   final List<_AsyncStarFrame> _asyncStarFrames = [];
   bool _enclosingIsAsyncStar = false;
 
@@ -164,10 +161,6 @@
             .getTopLevelProcedure('dart:async', '_trySetStackTrace'),
         _trySetStackTrace = coreTypes.index
             .getProcedure('dart:core', 'Error', '_trySetStackTrace'),
-        _loadLibrary = coreTypes.index
-            .getTopLevelProcedure("dart:_internal", "loadLibrary"),
-        _checkLibraryIsLoaded = coreTypes.index
-            .getTopLevelProcedure("dart:_internal", "checkLibraryIsLoaded"),
         _factorySpecializer = FactorySpecializer(coreTypes),
         _pushPopWasmArrayTransformer = PushPopWasmArrayTransformer(coreTypes);
 
@@ -839,30 +832,6 @@
   }
 
   @override
-  TreeNode visitLoadLibrary(LoadLibrary node) {
-    node.transformChildren(this);
-    final import = node.import;
-    return StaticInvocation(
-        _loadLibrary,
-        Arguments([
-          StringLiteral('${import.enclosingLibrary.importUri}'),
-          StringLiteral(import.name!)
-        ]));
-  }
-
-  @override
-  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
-    node.transformChildren(this);
-    final import = node.import;
-    return StaticInvocation(
-        _checkLibraryIsLoaded,
-        Arguments([
-          StringLiteral('${import.enclosingLibrary.importUri}'),
-          StringLiteral(import.name!)
-        ]));
-  }
-
-  @override
   TreeNode visitThrow(Throw node) {
     node.transformChildren(this);
     if (node.forErrorHandling) {
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
index 8abd4bf..d9f9f94 100644
--- a/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
@@ -29,17 +29,17 @@
   (global $S.globalH0Foo (import "S" "globalH0Foo") externref)
   (global $global29 (ref $#DummyStruct) <...>)
   (global $"C28 _InterfaceType" (ref $_InterfaceType) <...>)
-  (global $"C333 \"h0\"" (ref $JSStringImpl) <...>)
-  (global $"C372 _FunctionType" (ref $_FunctionType) <...>)
+  (global $"C334 \"h0\"" (ref $JSStringImpl) <...>)
+  (global $"C373 _FunctionType" (ref $_FunctionType) <...>)
   (global $global32 (ref $#Vtable-1-1) <...>)
-  (global $"C376 _FunctionType" (ref $_FunctionType) <...>)
-  (global $"C377 globalH1Foo tear-off" (mut (ref null $#Closure-1-1))
+  (global $"C377 _FunctionType" (ref $_FunctionType) <...>)
+  (global $"C378 globalH1Foo tear-off" (mut (ref null $#Closure-1-1))
     (ref.null none))
-  (global $"C378 InstantiationConstant(globalH1Foo<int>)" (mut (ref null $#Closure-0-1))
+  (global $"C379 InstantiationConstant(globalH1Foo<int>)" (mut (ref null $#Closure-0-1))
     (ref.null none))
-  (global $"C379 H1" (mut (ref null $H1))
+  (global $"C380 H1" (mut (ref null $H1))
     (ref.null none))
-  (global $"C386 \"globalH1Bar<\"" (ref $JSStringImpl)
+  (global $"C387 \"globalH1Bar<\"" (ref $JSStringImpl)
     (i32.const 4)
     (i32.const 0)
     (global.get $S.globalH1Bar<)
@@ -59,7 +59,7 @@
   (func $#dummy function (ref struct) -> (ref null #Top) (param $var0 (ref struct)) (result (ref null $#Top)) <...>)
   (func $print (param $var0 (ref null $#Top)) (result (ref null $#Top)) <...>)
   (func $"modMainUseH0 <noInline>"
-    global.get $"C333 \"h0\""
+    global.get $"C334 \"h0\""
     call $checkLibraryIsLoaded
     block $label0 (result (ref $H0))
       global.get $"C398 H0"
@@ -68,7 +68,7 @@
     end $label0
     call $print
     drop
-    global.get $"C333 \"h0\""
+    global.get $"C334 \"h0\""
     call $checkLibraryIsLoaded
     block $label1 (result (ref $H0))
       global.get $"C398 H0"
@@ -100,28 +100,28 @@
   )
   (func $dynamic call entry (param $var0 (ref $#ClosureBase)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top)) <...>)
   (func $instantiation constant trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
-  (func $"C379 H1 (lazy initializer)}" (export "func0") (result (ref $H1))
+  (func $"C380 H1 (lazy initializer)}" (export "func0") (result (ref $H1))
     (local $var0 (ref $#Closure-1-1))
     (local $var1 (ref $#Closure-0-1))
     (local $var2 (ref $H1))
     i32.const 106
     i32.const 0
     block $label0 (result (ref $#Closure-0-1))
-      global.get $"C378 InstantiationConstant(globalH1Foo<int>)"
+      global.get $"C379 InstantiationConstant(globalH1Foo<int>)"
       br_on_non_null $label0
       i32.const 37
       i32.const 0
       block $label1 (result (ref $#Closure-1-1))
-        global.get $"C377 globalH1Foo tear-off"
+        global.get $"C378 globalH1Foo tear-off"
         br_on_non_null $label1
         i32.const 37
         i32.const 0
         global.get $global29
         global.get $global32
-        global.get $"C376 _FunctionType"
+        global.get $"C377 _FunctionType"
         struct.new $#Closure-1-1
         local.tee $var0
-        global.set $"C377 globalH1Foo tear-off"
+        global.set $"C378 globalH1Foo tear-off"
         local.get $var0
       end $label1
       global.get $"C28 _InterfaceType"
@@ -130,15 +130,15 @@
       ref.func $"#dummy function (ref struct) -> (ref null #Top)"
       ref.func $"instantiation constant trampoline"
       struct.new $#Vtable-0-1
-      global.get $"C372 _FunctionType"
+      global.get $"C373 _FunctionType"
       struct.new $#Closure-0-1
       local.tee $var1
-      global.set $"C378 InstantiationConstant(globalH1Foo<int>)"
+      global.set $"C379 InstantiationConstant(globalH1Foo<int>)"
       local.get $var1
     end $label0
     struct.new $H1
     local.tee $var2
-    global.set $"C379 H1"
+    global.set $"C380 H1"
     local.get $var2
   )
   (func $"globalH0Foo tear-off dynamic call entry" (param $var0 (ref $#ClosureBase)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top))
@@ -169,7 +169,7 @@
       i32.const 0
       global.get $global29
       global.get $global35
-      global.get $"C372 _FunctionType"
+      global.get $"C373 _FunctionType"
       struct.new $#Closure-0-1
       local.tee $var0
       global.set $"C397 globalH0Foo tear-off"
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
index dc73c20..dd0005d 100644
--- a/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
@@ -12,7 +12,7 @@
     (field $field1 (mut i32))
     (field $fun (ref $#Closure-0-1)))))
   (type $BoxedInt <...>)
-  (func $"C379 H1 (lazy initializer)}" (import "module0" "func0") (result (ref $H1)))
+  (func $"C380 H1 (lazy initializer)}" (import "module0" "func0") (result (ref $H1)))
   (func $print (import "module0" "func1") (param (ref null $#Top)) (result (ref null $#Top)))
   (func $JSStringImpl._interpolate (import "module0" "func2") (param (ref $Array<Object?>)) (result (ref $JSStringImpl)))
   (global $module0.global0 (import "module0" "global0") (ref null $H1))
@@ -24,14 +24,14 @@
     block $label0 (result (ref $H1))
       global.get $module0.global0
       br_on_non_null $label0
-      call $"C379 H1 (lazy initializer)}"
+      call $"C380 H1 (lazy initializer)}"
     end $label0
     call $print
     drop
     block $label1 (result (ref $H1))
       global.get $module0.global0
       br_on_non_null $label1
-      call $"C379 H1 (lazy initializer)}"
+      call $"C380 H1 (lazy initializer)}"
     end $label1
     struct.get $H1 $fun
     local.tee $var0
diff --git a/pkg/dart2wasm/test/ir_tests/hello.wat b/pkg/dart2wasm/test/ir_tests/hello.wat
index 7826560..e94dde2 100644
--- a/pkg/dart2wasm/test/ir_tests/hello.wat
+++ b/pkg/dart2wasm/test/ir_tests/hello.wat
@@ -5,12 +5,12 @@
     (field $field0 i32)
     (field $_ref externref))))
   (global $"S.hello world" (import "S" "hello world") externref)
-  (global $"C327 \"hello world\"" (ref $JSStringImpl)
+  (global $"C329 \"hello world\"" (ref $JSStringImpl)
     (i32.const 4)
     (global.get $"S.hello world")
     (struct.new $JSStringImpl))
   (func $"main <noInline>"
-    global.get $"C327 \"hello world\""
+    global.get $"C329 \"hello world\""
     call $print
   )
   (func $print (param $var0 (ref $#Top)) <...>)
diff --git a/pkg/dart2wasm/test/ir_tests/interop.double.wat b/pkg/dart2wasm/test/ir_tests/interop.double.wat
index 1573b44..4e70fc7 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.double.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.double.wat
@@ -38,7 +38,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 77
       local.get $var0
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
@@ -78,7 +78,7 @@
         call $"ktrue implicit getter"
       end
       if (result (ref null $BoxedDouble))
-        i32.const 76
+        i32.const 77
         global.get $"doubleValue initialized"
         if (result f64)
           global.get $doubleValue
@@ -115,7 +115,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 77
       local.get $var1
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
diff --git a/pkg/dart2wasm/test/ir_tests/interop.int.wat b/pkg/dart2wasm/test/ir_tests/interop.int.wat
index c43b70a..6e8c338 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.int.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.int.wat
@@ -37,7 +37,7 @@
     if (result (ref null $BoxedInt))
       ref.null none
     else
-      i32.const 63
+      i32.const 60
       local.get $var0
       call $dartifyInt
       struct.new $BoxedInt
@@ -78,7 +78,7 @@
         call $"ktrue implicit getter"
       end
       if (result (ref null $BoxedInt))
-        i32.const 63
+        i32.const 60
         global.get $"intValue initialized"
         if (result i64)
           global.get $intValue
@@ -108,7 +108,7 @@
     if (result (ref null $BoxedInt))
       ref.null none
     else
-      i32.const 63
+      i32.const 60
       local.get $var1
       call $dartifyInt
       struct.new $BoxedInt
diff --git a/pkg/dart2wasm/test/ir_tests/interop.num.wat b/pkg/dart2wasm/test/ir_tests/interop.num.wat
index c1ed442..b4a4ae7 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.num.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.num.wat
@@ -18,14 +18,14 @@
   (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
   (func $"dart2wasm._147 (import)" (import "dart2wasm" "_147") (param externref) (result f64))
   (func $"dart2wasm._148 (import)" (import "dart2wasm" "_148") (param f64) (result externref))
-  (global $"C66 WasmArray<WasmArray<_Type>>[727]" (ref $Array<WasmArray<_Type>>) <...>)
-  (global $"C311 _TopType" (ref $_TopType) <...>)
+  (global $"C66 WasmArray<WasmArray<_Type>>[766]" (ref $Array<WasmArray<_Type>>) <...>)
+  (global $"C313 _TopType" (ref $_TopType) <...>)
   (global $"numValueNullable initialized" (mut i32) <...>)
   (global $numValueNullable (mut (ref null $#Top)) <...>)
   (global $"ktrue initialized" (mut i32) <...>)
   (global $ktrue (mut i32) <...>)
   (global $numValue (mut (ref null $#Top)) <...>)
-  (table $dtable2 666 funcref <...>)
+  (table $dtable2 699 funcref <...>)
   (func $_TypeUniverse.isSubtype (param $var0 (ref $_Type)) (param $var1 (ref null $_Environment)) (param $var2 (ref $_Type)) (param $var3 (ref null $_Environment)) (result i32) <...>)
   (func $_TypeUniverse._checkSubclassRelationshipViaTable (param $var0 i32) (param $var1 i32) (result i32) <...>)
   (func $_TypeUniverse.substituteTypeArgument (param $var0 (ref $_Type)) (param $var1 (ref $Array<_Type>)) (result (ref $_Type)) <...>)
@@ -70,7 +70,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 77
       local.get $var0
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
@@ -143,13 +143,13 @@
           local.get $var1
           struct.get $#Top $field0
           local.tee $var0
-          i32.const 63
+          i32.const 60
           i32.eq
           br_if $label2
           drop
           i32.const 1
           local.get $var0
-          i32.const 76
+          i32.const 77
           i32.eq
           br_if $label2
           drop
@@ -163,7 +163,7 @@
         end
         local.get $var1
         struct.get $#Top $field0
-        i32.const 90
+        i32.const 91
         i32.sub
         local.tee $var0
         i32.const 9
@@ -178,13 +178,13 @@
           local.tee $var2
           struct.get $#Top $field0
           local.tee $var0
-          i32.const 167
+          i32.const 170
           i32.eq
           if (result i32)
             i32.const 0
           else
             local.get $var0
-            i32.const 167
+            i32.const 170
             call $_TypeUniverse._checkSubclassRelationshipViaTable
           end
           local.tee $var0
@@ -193,13 +193,13 @@
           if (result i32)
             i32.const 0
           else
-            global.get $"C311 _TopType"
+            global.get $"C313 _TopType"
             local.set $var3
             block $label3 (result i32)
               local.get $var2
               local.get $var2
               struct.get $#Top $field0
-              i32.const 327
+              i32.const 333
               i32.add
               call_indirect (param (ref $#Top)) (result (ref $Array<_Type>))
               local.set $var4
@@ -215,7 +215,7 @@
                 call $_TypeUniverse.isSubtype
                 br $label3
               end
-              global.get $"C66 WasmArray<WasmArray<_Type>>[727]"
+              global.get $"C66 WasmArray<WasmArray<_Type>>[766]"
               local.get $var0
               array.get $Array<WasmArray<_Type>>
               i32.const 0
@@ -233,7 +233,7 @@
           else
             local.get $var2
             struct.get $#Top $field0
-            i32.const 89
+            i32.const 90
             i32.eq
             if
               unreachable
@@ -256,7 +256,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 77
       local.get $var5
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
diff --git a/pkg/dart2wasm/test/ir_tests/interop.string.wat b/pkg/dart2wasm/test/ir_tests/interop.string.wat
index 79aa082..27cd0eb 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.string.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.string.wat
@@ -11,11 +11,11 @@
   (global $"ktrue initialized" (mut i32) <...>)
   (global $ktrue (mut i32) <...>)
   (global $stringValue (mut (ref null $JSStringImpl)) <...>)
-  (global $"C358 \"a\"" (ref $JSStringImpl) <...>)
+  (global $"C360 \"a\"" (ref $JSStringImpl) <...>)
   (func $new JSStringImpl.fromRef (param $var0 externref) (result (ref $JSStringImpl)) <...>)
   (func $"testStringConstant <noInline>"
     (local $var0 externref)
-    global.get $"C358 \"a\""
+    global.get $"C360 \"a\""
     struct.get $JSStringImpl $_ref
     call $"dart2wasm._274 (import)"
     local.tee $var0
diff --git a/pkg/front_end/lib/src/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/kernel/constant_evaluator.dart
index f830233..bf93712 100644
--- a/pkg/front_end/lib/src/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/kernel/constant_evaluator.dart
@@ -2361,6 +2361,16 @@
   }
 
   @override
+  TreeNode visitRedirectingFactoryInvocation(
+    RedirectingFactoryInvocation node,
+    TreeNode? removalSentinel,
+  ) {
+    return transformOrRemove(node.expression, removalSentinel) ??
+        // Coverage-ignore(suite): Not run.
+        node.expression;
+  }
+
+  @override
   TreeNode visitStaticInvocation(
     StaticInvocation node,
     TreeNode? removalSentinel,
@@ -5930,6 +5940,13 @@
       "Unsupported auxiliary expression ${node} (${node.runtimeType}).",
     );
   }
+
+  @override
+  Constant visitRedirectingFactoryInvocation(
+    RedirectingFactoryInvocation node,
+  ) {
+    return node.expression.accept(this);
+  }
 }
 
 class StatementConstantEvaluator
diff --git a/pkg/front_end/lib/src/type_inference/inference_results.dart b/pkg/front_end/lib/src/type_inference/inference_results.dart
index 0ecdc2b..3d0a726 100644
--- a/pkg/front_end/lib/src/type_inference/inference_results.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_results.dart
@@ -171,6 +171,11 @@
     List<VariableDeclaration>? hoistedArguments = this.hoistedArguments;
     if (hoistedArguments == null || hoistedArguments.isEmpty) {
       return expression;
+    } else if (expression is RedirectingFactoryInvocation) {
+      return InvocationInferenceResult._insertHoistedExpressions(
+        expression,
+        hoistedArguments,
+      );
     } else {
       assert(
         expression is InvocationExpression || expression is InvalidExpression,
diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
index a4df663..57f53d1 100644
--- a/pkg/front_end/lib/src/type_inference/inference_visitor.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
@@ -771,6 +771,15 @@
 
   @override
   // Coverage-ignore(suite): Not run.
+  ExpressionInferenceResult visitRedirectingFactoryInvocation(
+    RedirectingFactoryInvocation node,
+    DartType typeContext,
+  ) {
+    return _unhandledExpression(node, typeContext);
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
   ExpressionInferenceResult visitListConcatenation(
     ListConcatenation node,
     DartType typeContext,
@@ -2558,10 +2567,9 @@
     required bool isConst,
     required bool hasInferredTypeArguments,
   }) {
-    Procedure initialTarget = target;
     Expression replacementNode;
 
-    _RedirectionTarget redirectionTarget = _getRedirectionTarget(initialTarget);
+    _RedirectionTarget redirectionTarget = _getRedirectionTarget(target);
     Member resolvedTarget = redirectionTarget.target;
     if (redirectionTarget.typeArguments.any((type) => type is UnknownType)) {
       return null;
@@ -2578,7 +2586,7 @@
         ..fileOffset = fileOffset;
     } else {
       Substitution substitution = Substitution.fromPairs(
-        initialTarget.function.typeParameters,
+        target.function.typeParameters,
         arguments.types,
       );
       for (int i = 0; i < redirectionTarget.typeArguments.length; i++) {
@@ -2594,8 +2602,11 @@
       arguments.types.length = redirectionTarget.typeArguments.length;
 
       replacementNode = _buildRedirectingFactoryTargetInvocation(
-        resolvedTarget,
-        new Arguments(
+        redirectingFactoryTarget: target.reference != resolvedTarget.reference
+            ? target
+            : null,
+        effectiveTarget: resolvedTarget,
+        arguments: new Arguments(
           arguments.positional,
           types: arguments.types,
           named: arguments.named,
@@ -2608,16 +2619,17 @@
     return replacementNode;
   }
 
-  Expression _buildRedirectingFactoryTargetInvocation(
-    Member target,
-    Arguments arguments, {
+  Expression _buildRedirectingFactoryTargetInvocation({
+    required Procedure? redirectingFactoryTarget,
+    required Member effectiveTarget,
+    required Arguments arguments,
     required bool isConst,
     required int fileOffset,
     required bool hasInferredTypeArguments,
   }) {
     Expression? result = problemReporting.checkStaticArguments(
       compilerContext: compilerContext,
-      target: target,
+      target: effectiveTarget,
       arguments: arguments,
       fileOffset: fileOffset,
       fileUri: fileUri,
@@ -2625,8 +2637,8 @@
     if (result != null) {
       return result;
     }
-    if (target is Constructor) {
-      if (isConst && !target.isConst) {
+    if (effectiveTarget is Constructor) {
+      if (isConst && !effectiveTarget.isConst) {
         // Coverage-ignore-block(suite): Not run.
         return problemReporting.buildProblem(
           compilerContext: compilerContext,
@@ -2638,16 +2650,27 @@
       }
       problemReporting.checkBoundsInConstructorInvocation(
         libraryFeatures: libraryFeatures,
-        constructor: target,
+        constructor: effectiveTarget,
         typeArguments: arguments.types,
         typeEnvironment: typeSchemaEnvironment,
         fileUri: fileUri,
         fileOffset: fileOffset,
       );
-      return new ConstructorInvocation(target, arguments, isConst: isConst)
-        ..fileOffset = fileOffset;
+      ConstructorInvocation constructorInvocation = new ConstructorInvocation(
+        effectiveTarget,
+        arguments,
+        isConst: isConst,
+      )..fileOffset = fileOffset;
+      if (redirectingFactoryTarget != null) {
+        return new RedirectingFactoryInvocation(
+          redirectingFactoryTarget,
+          constructorInvocation,
+        )..fileOffset = fileOffset;
+      } else {
+        return constructorInvocation;
+      }
     } else {
-      Procedure procedure = target as Procedure;
+      Procedure procedure = effectiveTarget as Procedure;
       if (isConst && !procedure.isConst) {
         // Coverage-ignore-block(suite): Not run.
         if (procedure.isExtensionTypeMember) {
@@ -2673,15 +2696,26 @@
       }
       problemReporting.checkBoundsInFactoryInvocation(
         libraryFeatures: libraryFeatures,
-        factory: target,
+        factory: effectiveTarget,
         typeArguments: arguments.types,
         typeEnvironment: typeSchemaEnvironment,
         fileUri: fileUri,
         fileOffset: fileOffset,
         inferred: hasInferredTypeArguments,
       );
-      return new StaticInvocation(target, arguments, isConst: isConst)
-        ..fileOffset = fileOffset;
+      StaticInvocation factoryInvocation = new StaticInvocation(
+        effectiveTarget,
+        arguments,
+        isConst: isConst,
+      )..fileOffset = fileOffset;
+      if (redirectingFactoryTarget != null) {
+        return new RedirectingFactoryInvocation(
+          redirectingFactoryTarget,
+          factoryInvocation,
+        )..fileOffset = fileOffset;
+      } else {
+        return factoryInvocation;
+      }
     }
   }
 
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart
index 06f9c25..2460f73 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart
@@ -5,6 +5,14 @@
 class C(final a) {}
 class C(var a b) {}
 class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
 
 enum E() {}
 enum E(a) {}
@@ -13,6 +21,14 @@
 enum E(final a) {}
 enum E(var a b) {}
 enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
 
 extension type ET() {}
 extension type ET(a) {}
@@ -21,3 +37,11 @@
 extension type ET(final a) {}
 extension type ET(var a b) {}
 extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect
index a76e748..1af7096 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect
@@ -180,6 +180,286 @@
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
   beginMetadataStar(enum)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(enum)
@@ -354,6 +634,278 @@
       endEnumBody({, })
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
   beginMetadataStar(extension)
   endMetadataStar(0)
   beginExtensionDeclarationPrelude(extension)
@@ -500,4 +1052,244 @@
       endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
     endExtensionTypeDeclaration(extension, null, extension, type, })
   endTopLevelDeclaration(})
-endCompilationUnit(21, )
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect
index b01f60a..10557b8 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect
@@ -308,6 +308,446 @@
   listener: endTopLevelDeclaration(})
   parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
       listener: beginMetadataStar(enum)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
@@ -577,6 +1017,406 @@
   listener: endTopLevelDeclaration(})
   parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
@@ -816,5 +1656,373 @@
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
           listener: endExtensionTypeDeclaration(extension, null, extension, type, })
   listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
   reportAllErrorTokens(class)
-  listener: endCompilationUnit(21, )
+  listener: endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect
index 9ae0091..f348d0f 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect
@@ -5,6 +5,14 @@
 class C(final a) {}
 class C(var a b) {}
 class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
 
 enum E() {}
 enum E(a) {}
@@ -13,6 +21,14 @@
 enum E(final a) {}
 enum E(var a b) {}
 enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
 
 extension type ET() {}
 extension type ET(a) {}
@@ -21,6 +37,14 @@
 extension type ET(final a) {}
 extension type ET(var a b) {}
 extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
 
 
 class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -30,6 +54,14 @@
 class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 enum[KeywordToken] E[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -38,6 +70,14 @@
 enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -46,4 +86,12 @@
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 [SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect
index 9ae0091..f348d0f 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect
@@ -5,6 +5,14 @@
 class C(final a) {}
 class C(var a b) {}
 class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
 
 enum E() {}
 enum E(a) {}
@@ -13,6 +21,14 @@
 enum E(final a) {}
 enum E(var a b) {}
 enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
 
 extension type ET() {}
 extension type ET(a) {}
@@ -21,6 +37,14 @@
 extension type ET(final a) {}
 extension type ET(var a b) {}
 extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
 
 
 class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -30,6 +54,14 @@
 class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 enum[KeywordToken] E[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -38,6 +70,14 @@
 enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -46,4 +86,12 @@
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 [SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart
index 1398fce..a9244c4 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart
@@ -10,6 +10,10 @@
 class C(covariant final a) {}
 class C(covariant var a b) {}
 class C(covariant final a b) {}
+class C(const f()) {}
+class C(const f<T>()) {}
+class C(const void f()) {}
+class C(const void f<T>()) {}
 
 enum E(covariant a) {}
 enum E(covariant a b) {}
@@ -17,6 +21,10 @@
 enum E(covariant final a) {}
 enum E(covariant var a b) {}
 enum E(covariant final a b) {}
+enum E(const f()) {}
+enum E(const f<T>()) {}
+enum E(const void f()) {}
+enum E(const void f<T>()) {}
 
 extension type ET(int i) {
   ET(var a b) {}
@@ -28,3 +36,7 @@
 extension type ET(covariant final a) {}
 extension type ET(covariant var a b) {}
 extension type ET(covariant final a b) {}
+extension type ET(const f()) {}
+extension type ET(const f<T>()) {}
+extension type ET(const void f()) {}
+extension type ET(const void f<T>()) {}
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect
index 8844109..515f2c0 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect
@@ -32,58 +32,106 @@
 class C(covariant final a b) {}
         ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:14:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:13:9: Can't have modifier 'const' here.
+class C(const f()) {}
+        ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:14:9: Can't have modifier 'const' here.
+class C(const f<T>()) {}
+        ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:15:9: Can't have modifier 'const' here.
+class C(const void f()) {}
+        ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:16:9: Can't have modifier 'const' here.
+class C(const void f<T>()) {}
+        ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:18:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant a) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:15:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:19:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant a b) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:16:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:20:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant var a) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:17:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:21:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant final a) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:18:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:22:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant var a b) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:19:8: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:23:8: Can't have modifier 'covariant' in a primary constructor.
 enum E(covariant final a b) {}
        ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:22:6: Variables can't be declared using both 'var' and a type name.
+parser/declaring_constructors/declaring_parameter_error:24:8: Can't have modifier 'const' here.
+enum E(const f()) {}
+       ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:25:8: Can't have modifier 'const' here.
+enum E(const f<T>()) {}
+       ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:26:8: Can't have modifier 'const' here.
+enum E(const void f()) {}
+       ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:27:8: Can't have modifier 'const' here.
+enum E(const void f<T>()) {}
+       ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:30:6: Variables can't be declared using both 'var' and a type name.
   ET(var a b) {}
      ^^^
 
-parser/declaring_constructors/declaring_parameter_error:25:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:33:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant a) {}
                   ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:26:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:34:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant a b) {}
                   ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:27:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:35:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant var a) {}
                   ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:28:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:36:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant final a) {}
                   ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:29:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:37:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant var a b) {}
                   ^^^^^^^^^
 
-parser/declaring_constructors/declaring_parameter_error:30:19: Can't have modifier 'covariant' in a primary constructor.
+parser/declaring_constructors/declaring_parameter_error:38:19: Can't have modifier 'covariant' in a primary constructor.
 extension type ET(covariant final a b) {}
                   ^^^^^^^^^
 
+parser/declaring_constructors/declaring_parameter_error:39:19: Can't have modifier 'const' here.
+extension type ET(const f()) {}
+                  ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:40:19: Can't have modifier 'const' here.
+extension type ET(const f<T>()) {}
+                  ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:41:19: Can't have modifier 'const' here.
+extension type ET(const void f()) {}
+                  ^^^^^
+
+parser/declaring_constructors/declaring_parameter_error:42:19: Can't have modifier 'const' here.
+extension type ET(const void f<T>()) {}
+                  ^^^^^
+
 beginCompilationUnit(m)
   beginMetadataStar(m)
   endMetadataStar(0)
@@ -318,6 +366,150 @@
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
   beginMetadataStar(enum)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(enum)
@@ -480,6 +672,146 @@
       endEnumBody({, })
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
   beginMetadataStar(extension)
   endMetadataStar(0)
   beginExtensionDeclarationPrelude(extension)
@@ -666,4 +998,128 @@
       endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
     endExtensionTypeDeclaration(extension, null, extension, type, })
   endTopLevelDeclaration(})
-endCompilationUnit(21, )
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect
index 2db618f..2687d67 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect
@@ -403,6 +403,234 @@
   listener: endTopLevelDeclaration(})
   parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
       listener: beginMetadataStar(enum)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
@@ -655,6 +883,214 @@
   listener: endTopLevelDeclaration(})
   parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(const)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(const, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(const)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(const, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
@@ -964,5 +1400,197 @@
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
           listener: endExtensionTypeDeclaration(extension, null, extension, type, })
   listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
   reportAllErrorTokens(m)
-  listener: endCompilationUnit(21, )
+  listener: endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect
index 0aa0a08..52ab36d 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect
@@ -10,6 +10,10 @@
 class C(covariant final a) {}
 class C(covariant var a b) {}
 class C(covariant final a b) {}
+class C(const f()) {}
+class C(const f<T>()) {}
+class C(const void f()) {}
+class C(const void f<T>()) {}
 
 enum E(covariant a) {}
 enum E(covariant a b) {}
@@ -17,6 +21,10 @@
 enum E(covariant final a) {}
 enum E(covariant var a b) {}
 enum E(covariant final a b) {}
+enum E(const f()) {}
+enum E(const f<T>()) {}
+enum E(const void f()) {}
+enum E(const void f<T>()) {}
 
 extension type ET(int i) {
 ET(var a b) {}
@@ -28,6 +36,10 @@
 extension type ET(covariant final a) {}
 extension type ET(covariant var a b) {}
 extension type ET(covariant final a b) {}
+extension type ET(const f()) {}
+extension type ET(const f<T>()) {}
+extension type ET(const void f()) {}
+extension type ET(const void f<T>()) {}
 
 
 m[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -42,6 +54,10 @@
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -49,6 +65,10 @@
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
 ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -60,4 +80,8 @@
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 [SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect
index 0aa0a08..52ab36d 100644
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect
+++ b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect
@@ -10,6 +10,10 @@
 class C(covariant final a) {}
 class C(covariant var a b) {}
 class C(covariant final a b) {}
+class C(const f()) {}
+class C(const f<T>()) {}
+class C(const void f()) {}
+class C(const void f<T>()) {}
 
 enum E(covariant a) {}
 enum E(covariant a b) {}
@@ -17,6 +21,10 @@
 enum E(covariant final a) {}
 enum E(covariant var a b) {}
 enum E(covariant final a b) {}
+enum E(const f()) {}
+enum E(const f<T>()) {}
+enum E(const void f()) {}
+enum E(const void f<T>()) {}
 
 extension type ET(int i) {
 ET(var a b) {}
@@ -28,6 +36,10 @@
 extension type ET(covariant final a) {}
 extension type ET(covariant var a b) {}
 extension type ET(covariant final a b) {}
+extension type ET(const f()) {}
+extension type ET(const f<T>()) {}
+extension type ET(const void f()) {}
+extension type ET(const void f<T>()) {}
 
 
 m[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -42,6 +54,10 @@
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 class[KeywordToken] C[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -49,6 +65,10 @@
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 enum[KeywordToken] E[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
 ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
@@ -60,4 +80,8 @@
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]covariant[KeywordToken] final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]const[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
 [SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart
new file mode 100644
index 0000000..2460f73
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart
@@ -0,0 +1,47 @@
+class C() {}
+class C(a) {}
+class C(a b) {}
+class C(var a) {}
+class C(final a) {}
+class C(var a b) {}
+class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
+
+enum E() {}
+enum E(a) {}
+enum E(a b) {}
+enum E(var a) {}
+enum E(final a) {}
+enum E(var a b) {}
+enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
+
+extension type ET() {}
+extension type ET(a) {}
+extension type ET(a b) {}
+extension type ET(var a) {}
+extension type ET(final a) {}
+extension type ET(var a b) {}
+extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect
new file mode 100644
index 0000000..5992f43
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect
@@ -0,0 +1,1462 @@
+Problems reported:
+
+parser/general/declaring_parameter_pre_feature:6:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var a b) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:8:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var f()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:9:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(final f()) {}
+        ^^^^^
+
+parser/general/declaring_parameter_pre_feature:10:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var void f()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:10:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var void f()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:11:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(final void f()) {}
+        ^^^^^
+
+parser/general/declaring_parameter_pre_feature:12:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var f<T>()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:13:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(final f<T>()) {}
+        ^^^^^
+
+parser/general/declaring_parameter_pre_feature:14:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var void f<T>()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:14:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(var void f<T>()) {}
+        ^^^
+
+parser/general/declaring_parameter_pre_feature:15:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
+class C(final void f<T>()) {}
+        ^^^^^
+
+parser/general/declaring_parameter_pre_feature:22:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var a b) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:24:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var f()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:25:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(final f()) {}
+       ^^^^^
+
+parser/general/declaring_parameter_pre_feature:26:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var void f()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:26:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var void f()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:27:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(final void f()) {}
+       ^^^^^
+
+parser/general/declaring_parameter_pre_feature:28:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var f<T>()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:29:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(final f<T>()) {}
+       ^^^^^
+
+parser/general/declaring_parameter_pre_feature:30:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var void f<T>()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:30:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(var void f<T>()) {}
+       ^^^
+
+parser/general/declaring_parameter_pre_feature:31:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
+enum E(final void f<T>()) {}
+       ^^^^^
+
+parser/general/declaring_parameter_pre_feature:38:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var a b) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:40:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var f()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:41:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(final f()) {}
+                  ^^^^^
+
+parser/general/declaring_parameter_pre_feature:42:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var void f()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:42:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var void f()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:43:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(final void f()) {}
+                  ^^^^^
+
+parser/general/declaring_parameter_pre_feature:44:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var f<T>()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:45:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(final f<T>()) {}
+                  ^^^^^
+
+parser/general/declaring_parameter_pre_feature:46:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var void f<T>()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:46:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(var void f<T>()) {}
+                  ^^^
+
+parser/general/declaring_parameter_pre_feature:47:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
+extension type ET(final void f<T>()) {}
+                  ^^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(()
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnum(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect
new file mode 100644
index 0000000..b741a47
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect
@@ -0,0 +1,2094 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleNoType(()
+                  ensureIdentifier((, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(a)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(a)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: handleNoType(var)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleNoType(final)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        listener: handleNoTypeVariables(()
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnum(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleNoType(()
+                  ensureIdentifier((, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.parser.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.parser.expect
new file mode 100644
index 0000000..f348d0f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.parser.expect
@@ -0,0 +1,97 @@
+class C() {}
+class C(a) {}
+class C(a b) {}
+class C(var a) {}
+class C(final a) {}
+class C(var a b) {}
+class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
+
+enum E() {}
+enum E(a) {}
+enum E(a b) {}
+enum E(var a) {}
+enum E(final a) {}
+enum E(var a b) {}
+enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
+
+extension type ET() {}
+extension type ET(a) {}
+extension type ET(a b) {}
+extension type ET(var a) {}
+extension type ET(final a) {}
+extension type ET(var a b) {}
+extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
+
+
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+enum[KeywordToken] E[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.scanner.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.scanner.expect
new file mode 100644
index 0000000..f348d0f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.scanner.expect
@@ -0,0 +1,97 @@
+class C() {}
+class C(a) {}
+class C(a b) {}
+class C(var a) {}
+class C(final a) {}
+class C(var a b) {}
+class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
+
+enum E() {}
+enum E(a) {}
+enum E(a b) {}
+enum E(var a) {}
+enum E(final a) {}
+enum E(var a b) {}
+enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
+
+extension type ET() {}
+extension type ET(a) {}
+extension type ET(a b) {}
+extension type ET(var a) {}
+extension type ET(final a) {}
+extension type ET(var a b) {}
+extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
+
+
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+enum[KeywordToken] E[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+enum[KeywordToken] E[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] a[StringToken] b[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]var[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]final[KeywordToken] void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
index 42222b0..2b8e83e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
@@ -25,9 +25,9 @@
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
 class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
-  constructor •({core::List<self::Const> constants = const <self::Const>[const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
+  constructor •({core::List<self::Const> constants = const <self::Const>[/*original=self::Const::impl*/ const self::_ConstImpl::•<dynamic>(), /*original=self::Const::impl*/ const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
     ;
-  const constructor named({core::List<self::Const> constants = const <self::Const>[const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
+  const constructor named({core::List<self::Const> constants = const <self::Const>[/*original=self::Const::impl*/ const self::_ConstImpl::•<dynamic>(), /*original=self::Const::impl*/ const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
   static synthetic method _#new#tearOff({has-declared-initializer core::List<self::Const> constants}) → self::Class
diff --git a/pkg/front_end/testcases/dart2js/extension_types/external_with_annotations.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/extension_types/external_with_annotations.dart.strong.outline.expect
index 73b90a0..52ba65d 100644
--- a/pkg/front_end/testcases/dart2js/extension_types/external_with_annotations.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/extension_types/external_with_annotations.dart.strong.outline.expect
@@ -74,7 +74,7 @@
   static factory namedParams = self::B|constructor#namedParams;
   static factory tearoff namedParams = self::B|constructor#_#namedParams#tearOff;
 }
-static const field core::pragma annotation = const core::pragma::_("a pragma");
+static const field core::pragma annotation = /*original=core::pragma::•*/ const core::pragma::_("a pragma");
 static extension-type-member synthetic method B|constructor#_#_#tearOff(js_::JSObject /* erasure=_interceptors::JSObject */ a) → self::B /* erasure=_interceptors::JSObject */
   return self::B|constructor#_(a);
 static extension-type-member method B|constructor#_(js_::JSObject /* erasure=_interceptors::JSObject */ a) → self::B /* erasure=_interceptors::JSObject */
@@ -322,5 +322,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///external_with_annotations.dart:171:4 -> InstanceConstant(const pragma{pragma.name: "a pragma", pragma.options: null})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///external_with_annotations.dart:174:4 -> InstanceConstant(const JS{JS.name: "renamedSS1.SS2.SS3"})
 Evaluated: StaticGet @ org-dartlang-testcase:///external_with_annotations.dart:175:4 -> InstanceConstant(const pragma{pragma.name: "a pragma", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///external_with_annotations.dart:239:20 -> InstanceConstant(const pragma{pragma.name: "a pragma", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///external_with_annotations.dart:239:20 -> InstanceConstant(const pragma{pragma.name: "a pragma", pragma.options: null})
 Extra constant evaluation: evaluated: 115, effectively constant: 85
diff --git a/pkg/front_end/testcases/dart2js/issue53804.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue53804.dart.strong.outline.expect
index 5921f32..397919e 100644
--- a/pkg/front_end/testcases/dart2js/issue53804.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue53804.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   field core::double? f2;
   synthetic constructor •() → self::A
     ;
-  @core::pragma::_("vm:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("vm:never-inline")
   method foo() → core::String
     ;
   static synthetic method _#new#tearOff() → self::A
@@ -18,5 +18,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue53804.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "vm:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue53804.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "vm:never-inline", pragma.options: null})
 Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/dart2js/issue54115.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue54115.dart.strong.outline.expect
index aa9783d..3aa5349 100644
--- a/pkg/front_end/testcases/dart2js/issue54115.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue54115.dart.strong.outline.expect
@@ -8,20 +8,20 @@
     ;
   static synthetic method _#new#tearOff(core::int? _x) → self::C
     return new self::C::•(_x);
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method manual() → void
     ;
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method pattern() → void
     ;
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method promote() → void
     ;
 }
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:18:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:26:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:18:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:26:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
 Extra constant evaluation: evaluated: 5, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/late_fields_with_annotation.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/late_fields_with_annotation.dart.strong.outline.expect
index 59d91f6..c9b1ac9 100644
--- a/pkg/front_end/testcases/dart2js/late_fields_with_annotation.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/late_fields_with_annotation.dart.strong.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  @core::pragma::_("dart2js:late:trust")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:late:trust")
   late field core::int a;
-  @core::pragma::_("dart2js:late:check")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:late:check")
   late final [setter] field core::int b;
-  @core::pragma::_("dart2js:late:trust")
-  @core::pragma::_("dart2js:tryInline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:late:trust")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:tryInline")
   late field core::int c;
-  @core::pragma::_("dart2js:late:check")
-  @core::pragma::_("dart2js:noInline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:late:check")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
   late final field core::int d;
   synthetic constructor •() → self::C
     ;
@@ -32,10 +32,10 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:13:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:trust", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:check", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:19:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:trust", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:20:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:tryInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:23:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:check", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:24:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:13:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:trust", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:check", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:19:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:trust", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:20:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:tryInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:23:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:late:check", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///late_fields_with_annotation.dart:24:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
 Extra constant evaluation: evaluated: 7, effectively constant: 6
diff --git a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
index 6851719..d9e334b 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
@@ -10,7 +10,7 @@
     return new self::A::•();
 }
 class E extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E element = const self::E::•(0, "element", const self::A::•());
+  enum-element static const field self::E element = const self::E::•(0, "element", /*original=self::A::redir*/ const self::A::•());
   static const field core::List<self::E> values = const <self::E>[self::E::element];
   const constructor •(core::int #index, core::String #name, self::A a) → self::E
     : super core::_Enum::•(#index, #name)
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.strong.outline.expect b/pkg/front_end/testcases/extensions/annotations.dart.strong.outline.expect
index 07d0eb3..1de51ef 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.strong.outline.expect
@@ -5,10 +5,10 @@
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     ;
-  @core::pragma::_("dart2js:noInline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
   method instanceMethod() → dynamic
     ;
-  @core::pragma::_("dart2js:noInline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
   static method staticMethod() → dynamic
     ;
 }
@@ -17,15 +17,15 @@
   method tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
-@core::pragma::_("dart2js:noInline")
+@/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
 static extension-member method Extension|extensionInstanceMethod(lowered final self::Class #this) → dynamic
   ;
 static extension-member method Extension|get#extensionInstanceMethod(lowered final self::Class #this) → () → dynamic
   return () → dynamic => self::Extension|extensionInstanceMethod(#this);
-@core::pragma::_("dart2js:noInline")
+@/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
 static extension-member method Extension|extensionStaticMethod() → dynamic
   ;
-@core::pragma::_("dart2js:noInline")
+@/*original=core::pragma::•*/ const core::pragma::_("dart2js:noInline")
 static method topLevelMethod() → dynamic
   ;
 static method main() → dynamic
@@ -33,9 +33,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:6:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:14:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:17:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:21:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///annotations.dart:6:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///annotations.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///annotations.dart:14:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///annotations.dart:17:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///annotations.dart:21:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
 Extra constant evaluation: evaluated: 8, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.strong.outline.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.strong.outline.expect
index 40ae8e8..94e779460 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.strong.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static const field core::Symbol tripleShiftSymbol = const _in::Symbol::•(">>>");
+static const field core::Symbol tripleShiftSymbol = /*original=core::Symbol::•*/ const _in::Symbol::•(">>>");
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:5:40 -> SymbolConstant(#>>>)
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///various.dart:5:40 -> SymbolConstant(#>>>)
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/constants/various.dart.strong.outline.expect b/pkg/front_end/testcases/general/constants/various.dart.strong.outline.expect
index 3c2a7d7..b0d339d 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.strong.outline.expect
@@ -263,10 +263,10 @@
 static const field self::FooWithHashCodeField fooWithHashCodeField2 = const self::FooWithHashCodeField::•(42);
 static const field core::bool fooWithHashCodeFieldIdentical = core::identical(self::fooWithHashCodeField1, self::fooWithHashCodeField2);
 static const field core::bool fooWithHashCodeFieldEqual = self::fooWithHashCodeField1 =={core::Object::==}{(core::Object) → core::bool} self::fooWithHashCodeField2;
-static const field core::Symbol barFoo = const _in::Symbol::•("Foo");
-static const field core::Symbol barFooEqual = const _in::Symbol::•("Foo=");
-static const field core::Symbol tripleShiftSymbol = const _in::Symbol::•(">>>");
-static const field core::Symbol symbolWithDots = const _in::Symbol::•("I.Have.Dots");
+static const field core::Symbol barFoo = /*original=core::Symbol::•*/ const _in::Symbol::•("Foo");
+static const field core::Symbol barFooEqual = /*original=core::Symbol::•*/ const _in::Symbol::•("Foo=");
+static const field core::Symbol tripleShiftSymbol = /*original=core::Symbol::•*/ const _in::Symbol::•(">>>");
+static const field core::Symbol symbolWithDots = /*original=core::Symbol::•*/ const _in::Symbol::•("I.Have.Dots");
 static const field core::int circularity1 = self::circularity2;
 static const field core::int circularity2 = self::circularity3;
 static const field core::int circularity3 = self::circularity4;
@@ -351,10 +351,10 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:143:44 -> BoolConstant(true)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:144:40 -> InstanceConstant(const FooWithHashCodeField{FooWithHashCodeField.x: 42, FooWithHashCodeField.y: 5, FooWithHashCodeField.hashCode: 1764})
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:144:65 -> InstanceConstant(const FooWithHashCodeField{FooWithHashCodeField.x: 42, FooWithHashCodeField.y: 5, FooWithHashCodeField.hashCode: 1764})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:146:29 -> SymbolConstant(#Foo)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:147:34 -> SymbolConstant(#Foo=)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:148:40 -> SymbolConstant(#>>>)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:149:37 -> SymbolConstant(#I.Have.Dots)
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///various.dart:146:29 -> SymbolConstant(#Foo)
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///various.dart:147:34 -> SymbolConstant(#Foo=)
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///various.dart:148:40 -> SymbolConstant(#>>>)
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///various.dart:149:37 -> SymbolConstant(#I.Have.Dots)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:171:7 -> InstanceConstant(const ClassWithTypeArguments<int, int, int>{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:173:7 -> InstanceConstant(const ClassWithTypeArguments<dynamic, dynamic, dynamic>{})
 Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:175:1 -> BoolConstant(false)
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
index 818aa85..f8cb6b1 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
@@ -6,7 +6,7 @@
 
 import "org-dartlang-testcase:///foo_lib.dart";
 
-static const field core::Set<foo::Foo> foo = const <foo::Foo>{const bar::Bar::•<dynamic>()};
+static const field core::Set<foo::Foo> foo = const <foo::Foo>{/*original=foo::Foo::bar*/ const bar::Bar::•<dynamic>()};
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
index 5b13757..dc23927 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  const constructor •({dynamic x = const self::B::•<dynamic>()}) → self::C
+  const constructor •({dynamic x = /*original=self::A::foo*/ const self::B::•<dynamic>()}) → self::C
     : super core::Object::•()
     ;
 }
@@ -24,5 +24,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
 Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
index fc7f661..a14d1ea 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
@@ -14,7 +14,7 @@
 import "dart:_internal";
 
 @/* from org-dartlang-testcase:///patch_lib.dart */ _in::patch
-@/* from org-dartlang-testcase:///patch_lib.dart */ const core::pragma::_("vm:entry-point")
+@/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("vm:entry-point")
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
diff --git a/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
index 1bcc897..b3f211d 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
@@ -9,7 +9,7 @@
     ;
 }
 class Settings extends core::Object {
-  static factory •({self::Sidebar sidebar = const self::_$_SSidebar::•()}) → self::Settings /* redirection-target: self::_SSettings::• */
+  static factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::Settings /* redirection-target: self::_SSettings::• */
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
@@ -17,12 +17,12 @@
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static factory •({self::Sidebar sidebar = const self::_$_SSidebar::•()}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
+  static factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
   final field self::Sidebar sidebar;
-  const constructor •({self::Sidebar sidebar = const self::_$_SSidebar::•()}) → self::_$_SSettings
+  const constructor •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::_$_SSettings
     : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
     ;
 }
@@ -40,7 +40,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:13:33 -> InstanceConstant(const _$_SSidebar{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:22:37 -> InstanceConstant(const _$_SSidebar{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue47036.dart:13:33 -> InstanceConstant(const _$_SSidebar{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue47036.dart:22:37 -> InstanceConstant(const _$_SSidebar{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
 Extra constant evaluation: evaluated: 11, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
index a4e8eb7..e4a543e 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
@@ -19,16 +19,16 @@
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
 static const field self::Foo bar = const self::Foo::named();
-static const field self::Foo bar2 = const self::Foo::named();
+static const field self::Foo bar2 = /*original=self::Foo::namedFactory*/ const self::Foo::named();
 static const field self::FooGeneric<core::int> barGeneric = const self::FooGeneric::named<core::int>();
-static const field self::FooGeneric<core::int> barGeneric2 = const self::FooGeneric::named<core::int>();
+static const field self::FooGeneric<core::int> barGeneric2 = /*original=self::FooGeneric::namedFactory*/ const self::FooGeneric::named<core::int>();
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:12:11 -> InstanceConstant(const Foo{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:14:22 -> InstanceConstant(const Foo{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue47339.dart:14:22 -> InstanceConstant(const Foo{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:23:23 -> InstanceConstant(const FooGeneric<int>{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:25:48 -> InstanceConstant(const FooGeneric<int>{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue47339.dart:25:48 -> InstanceConstant(const FooGeneric<int>{})
 Extra constant evaluation: evaluated: 6, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
index ef18258..388278c 100644
--- a/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
@@ -11,7 +11,7 @@
     return new self::A::•<self::A::redir::X%>();
 }
 class E extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E element = const self::E::•(0, "element", const self::A::•<core::String>());
+  enum-element static const field self::E element = const self::E::•(0, "element", /*original=self::A::redir*/ const self::A::•<core::String>());
   final field self::A<core::String> a;
   static const field core::List<self::E> values = const <self::E>[self::E::element];
   const constructor •(core::int #index, core::String #name, self::A<core::String> a) → self::E
diff --git a/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
index c22ddd5..18df973 100644
--- a/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
@@ -10,8 +10,8 @@
   static factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
-static const field core::List<self::A> test1 = const <self::A>[const self::A::•()];
-static const field core::List<self::A> test2 = const <self::A>[const self::A::•()];
+static const field core::List<self::A> test1 = const <self::A>[/*original=self::A::redir*/ const self::A::•()];
+static const field core::List<self::A> test2 = const <self::A>[/*original=self::A::redir*/ const self::A::•()];
 static const field core::List<self::A> test3 = const <self::A>[const self::A::•()];
 
 
diff --git a/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
index 57cb5dd..daf7eac 100644
--- a/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
@@ -26,36 +26,36 @@
     : self::Test::a = const self::A::•(), super core::Object::•()
     ;
   const constructor named2() → self::Test
-    : self::Test::a = const self::B::•(), super core::Object::•()
+    : self::Test::a = /*original=self::A::redir*/ const self::B::•(), super core::Object::•()
     ;
   const constructor named3() → self::Test
     : self::Test::a = const self::A::named(), super core::Object::•()
     ;
   const constructor named4() → self::Test
-    : self::Test::a = const self::A::named(), super core::Object::•()
+    : self::Test::a = /*original=self::A::selfRedir*/ const self::A::named(), super core::Object::•()
     ;
   const constructor named5() → self::Test
     : self::Test::a = const self::A::•(), super core::Object::•()
     ;
   const constructor named6() → self::Test
-    : self::Test::a = const self::B::•(), super core::Object::•()
+    : self::Test::a = /*original=self::A::redir*/ const self::B::•(), super core::Object::•()
     ;
   const constructor named7() → self::Test
     : self::Test::a = const self::A::named(), super core::Object::•()
     ;
   const constructor named8() → self::Test
-    : self::Test::a = const self::A::named(), super core::Object::•()
+    : self::Test::a = /*original=self::A::selfRedir*/ const self::A::named(), super core::Object::•()
     ;
 }
 
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:21:35 -> InstanceConstant(const A{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:22:35 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55152_5.dart:22:35 -> InstanceConstant(const B{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:23:35 -> InstanceConstant(const A{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:24:35 -> InstanceConstant(const A{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55152_5.dart:24:35 -> InstanceConstant(const A{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:25:35 -> InstanceConstant(const A{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:26:35 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55152_5.dart:26:35 -> InstanceConstant(const B{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:27:35 -> InstanceConstant(const A{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55152_5.dart:28:35 -> InstanceConstant(const A{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55152_5.dart:28:35 -> InstanceConstant(const A{})
 Extra constant evaluation: evaluated: 10, effectively constant: 8
diff --git a/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
index a89931f..0496ab0 100644
--- a/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
@@ -9,7 +9,7 @@
   static factory redir(core::int x) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x);
 }
-@self::A::•(1)
+@/*original=self::A::redir*/ const self::A::•(1)
 static method foo(core::String y) → dynamic
   ;
 static method main() → dynamic
@@ -17,5 +17,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_2.dart:10:2 -> InstanceConstant(const A{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_2.dart:10:2 -> InstanceConstant(const A{})
 Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
index 3d196a8..afeb964 100644
--- a/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
@@ -15,14 +15,14 @@
     ;
 }
 class C extends core::Object /*hasConstConstructor*/  {
-  constructor •({self::A a = const self::B::•()}) → self::C
+  constructor •({self::A a = /*original=self::A::redir*/ const self::B::•()}) → self::C
     ;
-  const constructor c({self::A a = const self::B::•()}) → self::C
+  const constructor c({self::A a = /*original=self::A::redir*/ const self::B::•()}) → self::C
     : super core::Object::•()
     ;
-  static factory f({self::A a = const self::B::•()}) → self::C
+  static factory f({self::A a = /*original=self::A::redir*/ const self::B::•()}) → self::C
     ;
-  method foo({self::A a = const self::B::•()}) → dynamic
+  method foo({self::A a = /*original=self::A::redir*/ const self::B::•()}) → dynamic
     ;
   static method bar({has-declared-initializer self::A a}) → dynamic
     ;
@@ -48,7 +48,7 @@
   ;
 static extension-type-member synthetic method ET|constructor#_#new#tearOff(self::C c) → self::ET% /* erasure=self::C, declared=! */
   return self::ET|constructor#(c);
-static extension-type-member method ET|constructor#named(self::C c, {self::A a = const self::B::•()}) → self::ET% /* erasure=self::C, declared=! */
+static extension-type-member method ET|constructor#named(self::C c, {self::A a = /*original=self::A::redir*/ const self::B::•()}) → self::ET% /* erasure=self::C, declared=! */
   ;
 static extension-type-member synthetic method ET|constructor#_#named#tearOff(self::C c, {has-declared-initializer self::A a}) → self::ET% /* erasure=self::C, declared=! */
   return self::ET|constructor#named(c, a: a);
@@ -61,9 +61,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_3.dart:15:18 -> InstanceConstant(const B{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_3.dart:19:26 -> InstanceConstant(const B{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_3.dart:17:28 -> InstanceConstant(const B{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_3.dart:21:20 -> InstanceConstant(const B{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue55849_3.dart:31:30 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_3.dart:15:18 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_3.dart:19:26 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_3.dart:17:28 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_3.dart:21:20 -> InstanceConstant(const B{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue55849_3.dart:31:30 -> InstanceConstant(const B{})
 Extra constant evaluation: evaluated: 19, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.outline.expect
index 8b0793c..3e3a85c 100644
--- a/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.outline.expect
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-@dart.core::pragma::_("origin-library")
+@/*original=dart.core::pragma::•*/ const dart.core::pragma::_("origin-library")
 library;
 import self as self2;
 import "dart:core" as core;
@@ -14,55 +14,55 @@
 
 import "dart:_internal";
 
-@core::pragma::_("origin-class")
+@/*original=core::pragma::•*/ const core::pragma::_("origin-class")
 @/* from org-dartlang-testcase:///patch_lib.dart */ _in::patch
-@/* from org-dartlang-testcase:///patch_lib.dart */ const core::pragma::_("patch-class")
-class Class<@core::pragma::_("origin-class-type-variable") @/* from org-dartlang-testcase:///patch_lib.dart */ const core::pragma::_("patch-class-type-variable") T extends core::Object? = dynamic> extends core::Object {
-  @/* from org-dartlang-testcase:///origin_lib.dart */ const core::pragma::_("origin-constructor")
+@/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("patch-class")
+class Class<@/*original=core::pragma::•*/ const core::pragma::_("origin-class-type-variable") @/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("patch-class-type-variable") T extends core::Object? = dynamic> extends core::Object {
+  @/* from org-dartlang-testcase:///origin_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("origin-constructor")
   @_in::patch
-  @core::pragma::_("patch-constructor")
+  @/*original=core::pragma::•*/ const core::pragma::_("patch-constructor")
   external constructor /* from org-dartlang-testcase:///patch_lib.dart */ •() → self2::Class<self2::Class::T%>;
-  @/* from org-dartlang-testcase:///origin_lib.dart */ const core::pragma::_("origin-procedure")
+  @/* from org-dartlang-testcase:///origin_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("origin-procedure")
   @_in::patch
-  @core::pragma::_("patch-procedure")
-  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@core::pragma::_("patch-method-type-variable") S extends core::Object? = dynamic>() → void;
+  @/*original=core::pragma::•*/ const core::pragma::_("patch-procedure")
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@/*original=core::pragma::•*/ const core::pragma::_("patch-method-type-variable") S extends core::Object? = dynamic>() → void;
 }
-@core::pragma::_("origin-extension")
+@/*original=core::pragma::•*/ const core::pragma::_("origin-extension")
 @/* from org-dartlang-testcase:///patch_lib.dart */ _in::patch
-@/* from org-dartlang-testcase:///patch_lib.dart */ const core::pragma::_("patch-extension")
-extension Extension<@core::pragma::_("origin-extension-type-variable") @/* from org-dartlang-testcase:///patch_lib.dart */ const core::pragma::_("patch-extension-type-variable") T extends core::Object? = dynamic> on core::int {
+@/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("patch-extension")
+extension Extension<@/*original=core::pragma::•*/ const core::pragma::_("origin-extension-type-variable") @/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("patch-extension-type-variable") T extends core::Object? = dynamic> on core::int {
   method method = self2::Extension|method;
   method tearoff method = self2::Extension|get#method;
 }
-@/* from org-dartlang-testcase:///origin_lib.dart */ const core::pragma::_("origin-extension-method")
+@/* from org-dartlang-testcase:///origin_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("origin-extension-method")
 @_in::patch
-@core::pragma::_("patch-extension-method")
-external static extension-member method /* from org-dartlang-testcase:///patch_lib.dart */ Extension|method<T extends core::Object? = dynamic, @core::pragma::_("patch-extension-method-type-variable") S extends core::Object? = dynamic>(lowered final core::int #this) → void;
+@/*original=core::pragma::•*/ const core::pragma::_("patch-extension-method")
+external static extension-member method /* from org-dartlang-testcase:///patch_lib.dart */ Extension|method<T extends core::Object? = dynamic, @/*original=core::pragma::•*/ const core::pragma::_("patch-extension-method-type-variable") S extends core::Object? = dynamic>(lowered final core::int #this) → void;
 static extension-member method /* from org-dartlang-testcase:///patch_lib.dart */ Extension|get#method<T extends core::Object? = dynamic>(lowered final core::int #this) → <S extends core::Object? = dynamic>() → void
   return <S extends core::Object? = dynamic>() → void => self2::Extension|method<self2::Extension|get#method::T%, S%>(#this);
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:5:2 -> InstanceConstant(const pragma{pragma.name: "origin-library", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:8:2 -> InstanceConstant(const pragma{pragma.name: "origin-class", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///origin_lib.dart:5:2 -> InstanceConstant(const pragma{pragma.name: "origin-library", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///origin_lib.dart:8:2 -> InstanceConstant(const pragma{pragma.name: "origin-class", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:9:1 -> InstanceConstant(const pragma{pragma.name: "patch-class", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:9:14 -> InstanceConstant(const pragma{pragma.name: "origin-class-type-variable", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///origin_lib.dart:9:14 -> InstanceConstant(const pragma{pragma.name: "origin-class-type-variable", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:10:13 -> InstanceConstant(const pragma{pragma.name: "patch-class-type-variable", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///origin_lib.dart:10:3 -> InstanceConstant(const pragma{pragma.name: "origin-constructor", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:11:4 -> InstanceConstant(const _Patch{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///patch_lib.dart:12:4 -> InstanceConstant(const pragma{pragma.name: "patch-constructor", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///patch_lib.dart:12:4 -> InstanceConstant(const pragma{pragma.name: "patch-constructor", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///origin_lib.dart:13:3 -> InstanceConstant(const pragma{pragma.name: "origin-procedure", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:15:4 -> InstanceConstant(const _Patch{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///patch_lib.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "patch-procedure", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///patch_lib.dart:17:25 -> InstanceConstant(const pragma{pragma.name: "patch-method-type-variable", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:17:2 -> InstanceConstant(const pragma{pragma.name: "origin-extension", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///patch_lib.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "patch-procedure", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///patch_lib.dart:17:25 -> InstanceConstant(const pragma{pragma.name: "patch-method-type-variable", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///origin_lib.dart:17:2 -> InstanceConstant(const pragma{pragma.name: "origin-extension", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:20:1 -> InstanceConstant(const _Patch{})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:21:1 -> InstanceConstant(const pragma{pragma.name: "patch-extension", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:18:22 -> InstanceConstant(const pragma{pragma.name: "origin-extension-type-variable", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///origin_lib.dart:18:22 -> InstanceConstant(const pragma{pragma.name: "origin-extension-type-variable", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:22:21 -> InstanceConstant(const pragma{pragma.name: "patch-extension-type-variable", pragma.options: null})
 Evaluated: FileUriExpression @ org-dartlang-testcase:///origin_lib.dart:19:3 -> InstanceConstant(const pragma{pragma.name: "origin-extension-method", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:23:4 -> InstanceConstant(const _Patch{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///patch_lib.dart:24:4 -> InstanceConstant(const pragma{pragma.name: "patch-extension-method", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///patch_lib.dart:25:25 -> InstanceConstant(const pragma{pragma.name: "patch-extension-method-type-variable", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///patch_lib.dart:24:4 -> InstanceConstant(const pragma{pragma.name: "patch-extension-method", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///patch_lib.dart:25:25 -> InstanceConstant(const pragma{pragma.name: "patch-extension-method-type-variable", pragma.options: null})
 Extra constant evaluation: evaluated: 25, effectively constant: 22
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
index b288ecc..cb76085 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::List<self::A> field;
-  constructor •({core::List<self::A> field = const <self::A>[const self::B::•<dynamic>()]}) → self::C
+  constructor •({core::List<self::A> field = const <self::A>[/*original=self::A::redir*/ const self::B::•<dynamic>()]}) → self::C
     ;
 }
 abstract class A extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
index f58b613..6df6f15 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
@@ -4,9 +4,9 @@
 
 class C extends core::Object {
   field core::List<self::A> field;
-  constructor named1({core::List<self::A> field = const <self::A>[const self::B::•<dynamic>(0, s: "")]}) → self::C
+  constructor named1({core::List<self::A> field = const <self::A>[/*original=self::A::redir1*/ const self::B::•<dynamic>(0, s: "")]}) → self::C
     ;
-  constructor named2({core::List<self::A> field = const <self::A>[const self::B::•<dynamic>(0, s: "")]}) → self::C
+  constructor named2({core::List<self::A> field = const <self::A>[/*original=self::A::redir1*/ const self::B::•<dynamic>(0, s: "")]}) → self::C
     ;
 }
 abstract class A extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
index 51200e0..c631fd1 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
@@ -4,9 +4,9 @@
 
 class C extends core::Object {
   field core::List<self::A<core::bool>> field;
-  constructor named1({core::List<self::A<core::bool>> field = const <self::A<core::bool>>[const self::B::•<core::bool>(0, s: "")]}) → self::C
+  constructor named1({core::List<self::A<core::bool>> field = const <self::A<core::bool>>[/*original=self::A::redir1*/ const self::B::•<core::bool>(0, s: "")]}) → self::C
     ;
-  constructor named2({core::List<self::A<core::bool>> field = const <self::A<core::bool>>[const self::B::•<core::bool>(0, s: "")]}) → self::C
+  constructor named2({core::List<self::A<core::bool>> field = const <self::A<core::bool>>[/*original=self::A::redir1*/ const self::B::•<core::bool>(0, s: "")]}) → self::C
     ;
 }
 abstract class A<X extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
index a370348..d837f6b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
@@ -1,4 +1,4 @@
-@name::Const::internal()
+@/*original=name::Const::•*/ const name::Const::internal()
 library name;
 import self as self;
 import "dart:core" as core;
@@ -7,15 +7,15 @@
 export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
 
 part redirecting_factory_invocation_metadata_lib.dart;
-@self::Const::internal()
-typedef Typedef1<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
-@self::Const::internal()
-typedef Typedef2<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
-@self::Const::internal()
-typedef Typedef3<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
-@self::Const::internal()
-typedef Typedef4<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
-@self::Const::internal()
+@/*original=self::Const::•*/ const self::Const::internal()
+typedef Typedef1<@/*original=self::Const::•*/ const self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
+@/*original=self::Const::•*/ const self::Const::internal()
+typedef Typedef2<@/*original=self::Const::•*/ const self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
+@/*original=self::Const::•*/ const self::Const::internal()
+typedef Typedef3<@/*original=self::Const::•*/ const self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
+@/*original=self::Const::•*/ const self::Const::internal()
+typedef Typedef4<@/*original=self::Const::•*/ const self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
+@/*original=self::Const::•*/ const self::Const::internal()
 class Const extends core::Object /*hasConstConstructor*/  {
   const constructor internal() → self::Const
     : super core::Object::•()
@@ -23,44 +23,44 @@
   static factory •() → self::Const /* redirection-target: self::Const::internal */
     return new self::Const::internal();
 }
-class Class<@self::Const::internal() T extends core::Object? = dynamic> extends core::Object {
-  @self::Const::internal()
+class Class<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic> extends core::Object {
+  @/*original=self::Const::•*/ const self::Const::internal()
   field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field;
-  @self::Const::internal()
+  @/*original=self::Const::•*/ const self::Const::internal()
   constructor •() → self::Class<self::Class::T%>
     ;
-  @self::Const::internal()
-  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = null]) → dynamic
+  @/*original=self::Const::•*/ const self::Const::internal()
+  method method1<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = null]) → dynamic
     ;
-  @self::Const::internal()
-  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = null}) → dynamic
+  @/*original=self::Const::•*/ const self::Const::internal()
+  method method2<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = null}) → dynamic
     ;
 }
-@self::Const::internal()
-extension Extension<@self::Const::internal() T extends core::Object? = dynamic> on self::Class<T%> {
+@/*original=self::Const::•*/ const self::Const::internal()
+extension Extension<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic> on self::Class<T%> {
   static field field = self::Extension|field;
   method method1 = self::Extension|method1;
   method tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
   method tearoff method2 = self::Extension|get#method2;
 }
-@self::Const::internal()
+@/*original=self::Const::•*/ const self::Const::internal()
 static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field;
-@self::Const::internal()
+@/*original=self::Const::•*/ const self::Const::internal()
 static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field;
-@self::Const::internal()
-static method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+@/*original=self::Const::•*/ const self::Const::internal()
+static method method1<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
   ;
-@self::Const::internal()
-static method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+@/*original=self::Const::•*/ const self::Const::internal()
+static method method2<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
   ;
-@self::Const::internal()
-static extension-member method Extension|method1<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, dynamic o1, [dynamic o2]) → dynamic
+@/*original=self::Const::•*/ const self::Const::internal()
+static extension-member method Extension|method1<#T extends core::Object? = dynamic, @/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, dynamic o1, [dynamic o2]) → dynamic
   ;
 static extension-member method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
   return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
-@self::Const::internal()
-static extension-member method Extension|method2<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, dynamic o1, {dynamic o2}) → dynamic
+@/*original=self::Const::•*/ const self::Const::internal()
+static extension-member method Extension|method2<#T extends core::Object? = dynamic, @/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, dynamic o1, {dynamic o2}) → dynamic
   ;
 static extension-member method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
   return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
@@ -69,33 +69,33 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:5:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:74:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:75:19 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:78:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:79:19 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:82:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:83:24 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:85:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:86:24 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:17:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:46:14 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:56:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:59:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:60:12 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:68:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:69:12 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:47:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:88:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:89:22 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:32:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:33:10 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:41:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:42:10 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:99:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:100:12 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:108:4 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:109:12 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:23:2 -> InstanceConstant(const Const{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:90:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:5:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:74:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:75:19 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:78:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:79:19 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:82:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:83:24 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:85:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:86:24 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:17:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:46:14 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:56:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:59:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:60:12 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:68:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:69:12 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:47:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:88:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:89:22 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:32:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:33:10 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:41:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:42:10 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:99:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:100:12 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:108:4 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:109:12 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:23:2 -> InstanceConstant(const Const{})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:90:4 -> InstanceConstant(const Const{})
 Extra constant evaluation: evaluated: 40, effectively constant: 29
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.outline.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.outline.expect
index c7ca380..70d1d0a 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.outline.expect
@@ -8,9 +8,9 @@
 final class StructInlineArray extends ffi::Struct {
   synthetic constructor •() → self::StructInlineArray
     ;
-  @ffi::_ArraySize::•<ffi::NativeType>(8)
+  @/*original=ffi::Array::•*/ const ffi::_ArraySize::•<ffi::NativeType>(8)
   external get a0() → ffi::Array<ffi::Uint8>;
-  @ffi::_ArraySize::•<ffi::NativeType>(8)
+  @/*original=ffi::Array::•*/ const ffi::_ArraySize::•<ffi::NativeType>(8)
   external set a0(synthesized ffi::Array<ffi::Uint8> #externalFieldValue) → void;
 }
 static method main() → dynamic
@@ -18,6 +18,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_struct_inline_array.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 8, _ArraySize.dimension2: null, _ArraySize.dimension3: null, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_struct_inline_array.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 8, _ArraySize.dimension2: null, _ArraySize.dimension3: null, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///ffi_struct_inline_array.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 8, _ArraySize.dimension2: null, _ArraySize.dimension3: null, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///ffi_struct_inline_array.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 8, _ArraySize.dimension2: null, _ArraySize.dimension3: null, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.outline.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.outline.expect
index f333f6e..e36a709 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.outline.expect
@@ -8,9 +8,9 @@
 final class StructInlineArrayMultiDimensional extends ffi::Struct {
   synthetic constructor •() → self::StructInlineArrayMultiDimensional
     ;
-  @ffi::_ArraySize::•<ffi::NativeType>(2, 2, 2)
+  @/*original=ffi::Array::•*/ const ffi::_ArraySize::•<ffi::NativeType>(2, 2, 2)
   external get a0() → ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>;
-  @ffi::_ArraySize::•<ffi::NativeType>(2, 2, 2)
+  @/*original=ffi::Array::•*/ const ffi::_ArraySize::•<ffi::NativeType>(2, 2, 2)
   external set a0(synthesized ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> #externalFieldValue) → void;
 }
 static method main() → dynamic
@@ -18,6 +18,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 2, _ArraySize.dimension2: 2, _ArraySize.dimension3: 2, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 2, _ArraySize.dimension2: 2, _ArraySize.dimension3: 2, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 2, _ArraySize.dimension2: 2, _ArraySize.dimension3: 2, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:10:4 -> InstanceConstant(const _ArraySize<NativeType>{_ArraySize.dimension1: 2, _ArraySize.dimension2: 2, _ArraySize.dimension3: 2, _ArraySize.dimension4: null, _ArraySize.dimension5: null, _ArraySize.dimensions: null, _ArraySize.variableDimension: null})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/patterns/issue53804.dart.strong.outline.expect b/pkg/front_end/testcases/patterns/issue53804.dart.strong.outline.expect
index c1b767d..a3c6e43 100644
--- a/pkg/front_end/testcases/patterns/issue53804.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/patterns/issue53804.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   field core::double? f2;
   synthetic constructor •() → self::A
     ;
-  @core::pragma::_("vm:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("vm:never-inline")
   method foo() → core::String
     ;
 }
@@ -16,5 +16,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue53804.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "vm:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue53804.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "vm:never-inline", pragma.options: null})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/patterns/issue54115.dart.strong.outline.expect b/pkg/front_end/testcases/patterns/issue54115.dart.strong.outline.expect
index f9ec183..b0929ea 100644
--- a/pkg/front_end/testcases/patterns/issue54115.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/patterns/issue54115.dart.strong.outline.expect
@@ -6,20 +6,20 @@
   final field core::int? _x;
   constructor •(core::int? _x) → self::C
     ;
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method manual() → void
     ;
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method pattern() → void
     ;
-  @core::pragma::_("dart2js:never-inline")
+  @/*original=core::pragma::•*/ const core::pragma::_("dart2js:never-inline")
   method promote() → void
     ;
 }
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:18:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54115.dart:26:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:18:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
+Evaluated: RedirectingFactoryInvocation @ org-dartlang-testcase:///issue54115.dart:26:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:never-inline", pragma.options: null})
 Extra constant evaluation: evaluated: 3, effectively constant: 3
diff --git a/pkg/front_end/testcases/patterns/primitive_equality.dart.strong.outline.expect b/pkg/front_end/testcases/patterns/primitive_equality.dart.strong.outline.expect
index 9048b1c..ca67d89 100644
--- a/pkg/front_end/testcases/patterns/primitive_equality.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/patterns/primitive_equality.dart.strong.outline.expect
@@ -71,10 +71,10 @@
 static const field core::bool g2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} #a;
 static const field core::bool g3 = !(#a =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•());
 static const field core::bool g4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} #a);
-static const field core::bool h1 = const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•();
-static const field core::bool h2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const _in::Symbol::•("b");
-static const field core::bool h3 = !(const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•());
-static const field core::bool h4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} const _in::Symbol::•("b"));
+static const field core::bool h1 = /*original=core::Symbol::•*/ const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•();
+static const field core::bool h2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} /*original=core::Symbol::•*/ const _in::Symbol::•("b");
+static const field core::bool h3 = !(/*original=core::Symbol::•*/ const _in::Symbol::•("b") =={core::Symbol::==}{(core::Object) → core::bool} const self::Const::•());
+static const field core::bool h4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} /*original=core::Symbol::•*/ const _in::Symbol::•("b"));
 static const field core::bool i1 = core::Object =={core::Type::==}{(core::Object) → core::bool} const self::Const::•();
 static const field core::bool i2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} core::Object;
 static const field core::bool i3 = !(core::Object =={core::Type::==}{(core::Object) → core::bool} const self::Const::•());
@@ -99,12 +99,12 @@
 static const field core::bool o2 = const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0.5;
 static const field core::bool o3 = !(0.5 =={core::num::==}{(core::Object) → core::bool} const self::Const::•());
 static const field core::bool o4 = !(const self::Const::•() =={core::Object::==}{(core::Object) → core::bool} 0.5);
-static const field core::Set<core::Object?> set1 = const <core::Object?>{null, const self::Const::•(), true, 0, "", #a, const _in::Symbol::•("b"), core::Object, const <dynamic>[], const <dynamic, dynamic>{}, const <core::int>{0}, self::topLevel};
+static const field core::Set<core::Object?> set1 = const <core::Object?>{null, const self::Const::•(), true, 0, "", #a, /*original=core::Symbol::•*/ const _in::Symbol::•("b"), core::Object, const <dynamic>[], const <dynamic, dynamic>{}, const <core::int>{0}, self::topLevel};
 static const field core::Set<self::A> set2 = const <self::A>{const self::A::•()};
 static const field core::Set<self::B> set3 = const <self::B>{const self::B::•()};
 static const field core::Set<self::C> set4 = const <self::C>{const self::C::•()};
 static const field core::Set<core::double> set5 = const <core::double>{0.5};
-static const field core::Map<core::Object?, core::int> map1 = const <core::Object?, core::int>{null: 0, const self::Const::•(): 0, true: 0, 0: 0, "": 0, #a: 0, const _in::Symbol::•("b"): 0, core::Object: 0, const <dynamic>[]: 0, const <dynamic, dynamic>{}: 0, const <core::int>{0}: 0, self::topLevel: 0};
+static const field core::Map<core::Object?, core::int> map1 = const <core::Object?, core::int>{null: 0, const self::Const::•(): 0, true: 0, 0: 0, "": 0, #a: 0, /*original=core::Symbol::•*/ const _in::Symbol::•("b"): 0, core::Object: 0, const <dynamic>[]: 0, const <dynamic, dynamic>{}: 0, const <core::int>{0}: 0, self::topLevel: 0};
 static const field core::Map<self::A, core::int> map2 = const <self::A, core::int>{const self::A::•(): 0};
 static const field core::Map<self::B, core::int> map3 = const <self::B, core::int>{const self::B::•(): 0};
 static const field core::Map<self::C, core::int> map4 = const <self::C, core::int>{const self::C::•(): 0};
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 5e79b94..422d4fb 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 125;
+  UInt32 formatVersion = 126;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -908,6 +908,13 @@
   Arguments arguments;
 }
 
+type RedirectingFactoryInvocation extends Expression {
+  Byte tag = 153;
+  FileOffset fileOffset;
+  MemberReference redirectingFactoryTarget;
+  Expression expression;
+}
+
 type Not extends Expression {
   Byte tag = 33;
   FileOffset fileOffset;
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 270d2e5..600fae6 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -2311,6 +2311,8 @@
         return _readPatternAssignment();
       case Tag.FileUriConstantExpression:
         return _readFileUriConstantExpression();
+      case Tag.RedirectingFactoryInvocation:
+        return _readRedirectingFactoryInvocation();
       default:
         throw fail('unexpected expression tag: $tag');
     }
@@ -2625,6 +2627,13 @@
       ..fileOffset = offset;
   }
 
+  Expression _readRedirectingFactoryInvocation() {
+    int offset = readOffset();
+    return new RedirectingFactoryInvocation.byReference(
+        readNonNullMemberReference(), readExpression() as InvocationExpression)
+      ..fileOffset = offset;
+  }
+
   Expression _readNot() {
     int offset = readOffset();
     return new Not(readExpression())..fileOffset = offset;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index c1afc99..59ab23f 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1857,6 +1857,14 @@
   }
 
   @override
+  void visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) {
+    writeByte(Tag.RedirectingFactoryInvocation);
+    writeOffset(node.fileOffset);
+    writeNonNullReference(node.redirectingFactoryTargetReference);
+    writeNode(node.expression);
+  }
+
+  @override
   void visitArguments(Arguments node) {
     writeUInt30(node.positional.length + node.named.length);
     writeNodeList(node.types);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 81ded05..123673d 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -110,6 +110,7 @@
   static const int FunctionInvocation = 125;
   static const int FunctionTearOff = 126;
   static const int LocalFunctionInvocation = 127;
+  static const int RedirectingFactoryInvocation = 153;
 
   // Statements
   static const int ExpressionStatement = 61;
@@ -226,7 +227,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 125;
+  static const int BinaryFormatVersion = 126;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index e7adb0c..12aa2fa8 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -269,6 +269,13 @@
   }
 
   @override
+  TreeNode visitRedirectingFactoryInvocation(
+      RedirectingFactoryInvocation node) {
+    return new RedirectingFactoryInvocation.byReference(
+        node.redirectingFactoryTargetReference, clone(node.expression));
+  }
+
+  @override
   TreeNode visitNot(Not node) {
     return new Not(clone(node.operand));
   }
diff --git a/pkg/kernel/lib/src/ast/expressions.dart b/pkg/kernel/lib/src/ast/expressions.dart
index 11b2101..07d24f7 100644
--- a/pkg/kernel/lib/src/ast/expressions.dart
+++ b/pkg/kernel/lib/src/ast/expressions.dart
@@ -2742,6 +2742,84 @@
   }
 }
 
+/// Invocation of a redirecting factory constructor.
+///
+/// This wraps the actual invocation [expression] with the original redirecting
+/// factory target. This node is available only in outlines and during
+/// pre-modular transformation, and is replaced with [expression] during
+/// constant evaluation.
+class RedirectingFactoryInvocation extends Expression {
+  /// The original target of the redirecting factory invocation.
+  Reference redirectingFactoryTargetReference;
+
+  /// The invocation of the effective target.
+  InvocationExpression expression;
+
+  factory RedirectingFactoryInvocation(
+      Procedure redirectingFactoryTarget, InvocationExpression expression) {
+    assert(redirectingFactoryTarget.isRedirectingFactory);
+    return new RedirectingFactoryInvocation.byReference(
+        redirectingFactoryTarget.reference, expression);
+  }
+
+  RedirectingFactoryInvocation.byReference(
+      this.redirectingFactoryTargetReference, this.expression) {
+    expression.parent = this;
+  }
+
+  Procedure get redirectingFactoryTarget =>
+      redirectingFactoryTargetReference.asProcedure;
+
+  void set redirectingFactoryTarget(Procedure value) {
+    assert(redirectingFactoryTarget.isRedirectingFactory);
+    redirectingFactoryTargetReference = value.reference;
+  }
+
+  @override
+  DartType getStaticTypeInternal(StaticTypeContext context) {
+    return expression.getStaticTypeInternal(context);
+  }
+
+  @override
+  R accept<R>(ExpressionVisitor<R> v) =>
+      v.visitRedirectingFactoryInvocation(this);
+
+  @override
+  R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
+      v.visitRedirectingFactoryInvocation(this, arg);
+
+  @override
+  void visitChildren(Visitor v) {
+    redirectingFactoryTarget.acceptReference(v);
+    expression.accept(v);
+  }
+
+  @override
+  void transformChildren(Transformer v) {
+    expression = v.transform(expression);
+    expression.parent = this;
+  }
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {
+    expression = v.transform(expression);
+    expression.parent = this;
+  }
+
+  @override
+  String toString() {
+    return "RedirectingFactoryInvocation(${toStringInternal()})";
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.write('/*original=');
+    printer.writeMemberName(redirectingFactoryTargetReference);
+    printer.write('*/');
+    expression.toTextInternal(printer);
+  }
+}
+
 /// An explicit type instantiation of a generic function.
 class Instantiation extends Expression {
   Expression expression;
diff --git a/pkg/kernel/lib/src/coverage.dart b/pkg/kernel/lib/src/coverage.dart
index dfc8599..186ffba 100644
--- a/pkg/kernel/lib/src/coverage.dart
+++ b/pkg/kernel/lib/src/coverage.dart
@@ -363,6 +363,12 @@
   }
 
   @override
+  void visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) {
+    visited.add(ExpressionKind.RedirectingFactoryInvocation);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitInstantiation(Instantiation node) {
     visited.add(ExpressionKind.Instantiation);
     node.visitChildren(this);
@@ -1408,6 +1414,7 @@
   RecordIndexGet,
   RecordLiteral,
   RecordNameGet,
+  RedirectingFactoryInvocation,
   RedirectingFactoryTearOff,
   Rethrow,
   SetConcatenation,
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 18ad85b..eeb524d 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -323,6 +323,12 @@
   }
 
   @override
+  bool visitRedirectingFactoryInvocation(
+      RedirectingFactoryInvocation node, Node other) {
+    return strategy.checkRedirectingFactoryInvocation(this, node, other);
+  }
+
+  @override
   bool visitInstantiation(Instantiation node, Node other) {
     return strategy.checkInstantiation(this, node, other);
   }
@@ -3038,6 +3044,27 @@
     return result;
   }
 
+  bool checkRedirectingFactoryInvocation(EquivalenceVisitor visitor,
+      RedirectingFactoryInvocation? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! RedirectingFactoryInvocation) return false;
+    if (other is! RedirectingFactoryInvocation) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkRedirectingFactoryInvocation_redirectingFactoryTargetReference(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkRedirectingFactoryInvocation_expression(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkRedirectingFactoryInvocation_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkInstantiation(
       EquivalenceVisitor visitor, Instantiation? node, Object? other) {
     if (identical(node, other)) return true;
@@ -7554,6 +7581,26 @@
     return checkExpression_fileOffset(visitor, node, other);
   }
 
+  bool checkRedirectingFactoryInvocation_redirectingFactoryTargetReference(
+      EquivalenceVisitor visitor,
+      RedirectingFactoryInvocation node,
+      RedirectingFactoryInvocation other) {
+    return visitor.checkReferences(
+        node.redirectingFactoryTargetReference,
+        other.redirectingFactoryTargetReference,
+        'redirectingFactoryTargetReference');
+  }
+
+  bool checkRedirectingFactoryInvocation_expression(EquivalenceVisitor visitor,
+      RedirectingFactoryInvocation node, RedirectingFactoryInvocation other) {
+    return visitor.checkNodes(node.expression, other.expression, 'expression');
+  }
+
+  bool checkRedirectingFactoryInvocation_fileOffset(EquivalenceVisitor visitor,
+      RedirectingFactoryInvocation node, RedirectingFactoryInvocation other) {
+    return checkExpression_fileOffset(visitor, node, other);
+  }
+
   bool checkInstantiation_expression(
       EquivalenceVisitor visitor, Instantiation node, Instantiation other) {
     return visitor.checkNodes(node.expression, other.expression, 'expression');
diff --git a/pkg/kernel/lib/src/node_creator.dart b/pkg/kernel/lib/src/node_creator.dart
index b6a0441..1f8f662 100644
--- a/pkg/kernel/lib/src/node_creator.dart
+++ b/pkg/kernel/lib/src/node_creator.dart
@@ -1069,6 +1069,11 @@
       case ExpressionKind.PatternAssignment:
         return new PatternAssignment(_createPattern(), _createExpression())
           ..fileOffset = _needFileOffset();
+      case ExpressionKind.RedirectingFactoryInvocation:
+        return new RedirectingFactoryInvocation(
+            _needRedirectingFactory(),
+            _createExpressionFromKind(ExpressionKind.ConstructorInvocation)
+                as InvocationExpression);
       case ExpressionKind.VariableRead:
       case ExpressionKind.VariableWrite:
         throw new UnimplementedError("Unimplemented support for ${kind}.");
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 77dfd18..9a9655d 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1655,6 +1655,14 @@
   }
 
   @override
+  void visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) {
+    write('/*original=');
+    writeMemberReferenceFromReference(node.redirectingFactoryTargetReference);
+    write('*/');
+    writeNode(node.expression);
+  }
+
+  @override
   void visitNot(Not node) {
     writeSymbol('!');
     writeExpression(node.operand, Precedence.PREFIX);
@@ -3153,6 +3161,10 @@
   int visitConstructorInvocation(ConstructorInvocation node) => CALLEE;
 
   @override
+  int visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) =>
+      CALLEE;
+
+  @override
   int visitNot(Not node) => PREFIX;
 
   @override
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 57406cd..c98bd50 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -1367,4 +1367,10 @@
     throw UnimplementedError(
         "Unimplemented support for $node (${node.runtimeType}).");
   }
+
+  @override
+  DartType visitRedirectingFactoryInvocation(
+      RedirectingFactoryInvocation node) {
+    return node.expression.accept(this);
+  }
 }
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index f85448e..63d7ae5 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -39,6 +39,7 @@
   R visitSuperMethodInvocation(SuperMethodInvocation node);
   R visitStaticInvocation(StaticInvocation node);
   R visitConstructorInvocation(ConstructorInvocation node);
+  R visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node);
   R visitNot(Not node);
   R visitNullCheck(NullCheck node);
   R visitLogicalExpression(LogicalExpression node);
@@ -155,6 +156,9 @@
   R visitConstructorInvocation(ConstructorInvocation node) =>
       defaultExpression(node);
   @override
+  R visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) =>
+      defaultExpression(node);
+  @override
   R visitNot(Not node) => defaultExpression(node);
   @override
   R visitNullCheck(NullCheck node) => defaultExpression(node);
@@ -2534,6 +2538,7 @@
   R visitSuperMethodInvocation(SuperMethodInvocation node, A arg);
   R visitStaticInvocation(StaticInvocation node, A arg);
   R visitConstructorInvocation(ConstructorInvocation node, A arg);
+  R visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node, A arg);
   R visitNot(Not node, A arg);
   R visitNullCheck(NullCheck node, A arg);
   R visitLogicalExpression(LogicalExpression node, A arg);
@@ -2662,6 +2667,10 @@
   R visitConstructorInvocation(ConstructorInvocation node, A arg) =>
       defaultExpression(node, arg);
   @override
+  R visitRedirectingFactoryInvocation(
+          RedirectingFactoryInvocation node, A arg) =>
+      defaultExpression(node, arg);
+  @override
   R visitNot(Not node, A arg) => defaultExpression(node, arg);
   @override
   R visitNullCheck(NullCheck node, A arg) => defaultExpression(node, arg);
@@ -3053,6 +3062,13 @@
       "${runtimeType}.visitFileUriExpression isn't supported.",
     );
   }
+
+  @override
+  R visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) {
+    throw StateError(
+      "${runtimeType}.visitRedirectingFactoryInvocation isn't supported.",
+    );
+  }
 }
 
 /// [ExpressionVisitor1InternalNodeMixin] is intended to reduce the effects of
@@ -3112,6 +3128,14 @@
       "${runtimeType}.visitFileUriExpression isn't supported.",
     );
   }
+
+  @override
+  R visitRedirectingFactoryInvocation(
+      RedirectingFactoryInvocation node, A arg) {
+    throw StateError(
+      "${runtimeType}.visitRedirectingFactoryInvocation isn't supported.",
+    );
+  }
 }
 
 /// [ExpressionVisitorExperimentExclusionMixin] is intended to reduce the
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index f0efca6..ac5b6ad 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1210,6 +1210,7 @@
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
+    case kRedirectingFactoryInvocation:
     // These nodes are internal to the front end and
     // removed by the constant evaluator.
     default:
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 7d0697a..427d2fa 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -719,6 +719,7 @@
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
+    case kRedirectingFactoryInvocation:
     // These nodes are internal to the front end and
     // removed by the constant evaluator.
     default:
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 5e3e96b..35e571c 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2891,6 +2891,7 @@
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
+    case kRedirectingFactoryInvocation:
     // These nodes are internal to the front end and
     // removed by the constant evaluator.
     default:
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 6d25cdc..cd015e5 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -1091,6 +1091,7 @@
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
+    case kRedirectingFactoryInvocation:
     // These nodes are internal to the front end and
     // removed by the constant evaluator.
     default:
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 416892d..f5f43ad 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -18,7 +18,7 @@
 // package:kernel/binary.md.
 
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
-static const uint32_t kSupportedKernelFormatVersion = 125;
+static const uint32_t kSupportedKernelFormatVersion = 126;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
@@ -173,6 +173,7 @@
   V(PatternAssignment, 150)                                                    \
   V(PatternVariableDeclaration, 151)                                           \
   V(NullType, 152)                                                             \
+  V(RedirectingFactoryInvocation, 153)                                         \
   V(SpecializedVariableGet, 224)                                               \
   V(SpecializedVariableSet, 232)                                               \
   V(SpecializedIntLiteral, 240)
diff --git a/sdk/lib/_internal/wasm/lib/deferred.dart b/sdk/lib/_internal/wasm/lib/deferred.dart
index 3b4f88c..6a2704b 100644
--- a/sdk/lib/_internal/wasm/lib/deferred.dart
+++ b/sdk/lib/_internal/wasm/lib/deferred.dart
@@ -46,6 +46,8 @@
   }
 }
 
+// NOTE: We'll inject a `@pragma('wasm:entry-point')` before TFA if we need this
+// method at runtime.
 Future<void> loadLibraryFromLoadId(String loadId) {
   return _loading.putIfAbsent(loadId, () {
     // Start module load
@@ -64,13 +66,17 @@
   });
 }
 
-Object checkLibraryIsLoadedFromLoadId(String loadId) {
+// NOTE: We'll inject a `@pragma('wasm:entry-point')` before TFA if we need this
+// method at runtime.
+bool checkLibraryIsLoadedFromLoadId(String loadId) {
   if (!_loaded.contains(loadId)) {
     throw DeferredLoadIdNotLoadedError(loadId);
   }
   return true;
 }
 
+// NOTE: We'll inject a `@pragma('wasm:entry-point')` before TFA if we need this
+// method at runtime.
 Future<void> loadLibrary(String enclosingLibraryOrLoadId, String importPrefix) {
   if (_importMapping.isEmpty) {
     // Only contains one unit.
@@ -135,7 +141,9 @@
   });
 }
 
-Object checkLibraryIsLoaded(
+// NOTE: We'll inject a `@pragma('wasm:entry-point')` before TFA if we need this
+// method at runtime.
+bool checkLibraryIsLoaded(
   String enclosingLibraryOrLoadId,
   String importPrefix,
 ) {
diff --git a/tools/VERSION b/tools/VERSION
index 3303327..9eb9c6b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 11
 PATCH 0
-PRERELEASE 67
+PRERELEASE 68
 PRERELEASE_PATCH 0