Version 2.17.0-123.0.dev

Merge commit '7c04f35043d52b348061a4af110e18928916c955' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 7312240..54a1efc 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -7011,6 +7011,34 @@
     problemMessage: r"""'loadLibrary' takes no arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateMacroClassNotDeclaredMacro = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""Non-abstract class '#name' implements 'Macro' but isn't declared as a macro class.""",
+    correctionMessageTemplate: r"""Try adding the 'macro' class modifier.""",
+    withArguments: _withArgumentsMacroClassNotDeclaredMacro);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMacroClassNotDeclaredMacro =
+    const Code<Message Function(String name)>(
+  "MacroClassNotDeclaredMacro",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMacroClassNotDeclaredMacro(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMacroClassNotDeclaredMacro,
+      problemMessage:
+          """Non-abstract class '${name}' implements 'Macro' but isn't declared as a macro class.""",
+      correctionMessage: """Try adding the 'macro' class modifier.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainNotFunctionDeclaration =
     messageMainNotFunctionDeclaration;
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 9741d8c..1a3c741 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -61,9 +61,10 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
-    listener?.beginClassDeclaration(begin, abstractToken, macroToken, name);
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    listener?.beginClassDeclaration(
+        begin, abstractToken, macroToken, augmentToken, name);
   }
 
   @override
@@ -339,10 +340,10 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     listener?.beginNamedMixinApplication(
-        begin, abstractToken, macroToken, name);
+        begin, abstractToken, macroToken, augmentToken, name);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 2f5e2a4..f09b097 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -126,8 +126,8 @@
   /// (or extraneous modifiers in the case of recovery) preceding [name].
   ///
   /// At this point we have parsed the name and type parameter declarations.
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {}
 
   /// Handle an extends clause in a class declaration. Substructures:
   /// - supertype (may be a mixin application)
@@ -720,8 +720,8 @@
   /// (or extraneous modifiers in the case of recovery) preceding [name].
   ///
   /// At this point we have parsed the name and type parameter declarations.
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {}
 
   /// Handle a named mixin application with clause (e.g. "A with B, C").
   /// Substructures:
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 6ebcc62..9c693a0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -494,8 +494,12 @@
     token = parseMetadataStar(token);
     Token next = token.next!;
     if (next.isTopLevelKeyword) {
-      return parseTopLevelKeywordDeclaration(/* start = */ token,
-          /* keyword = */ next, /* macroToken = */ null, directiveState);
+      return parseTopLevelKeywordDeclaration(
+          /* start = */ token,
+          /* keyword = */ next,
+          /* macroToken = */ null,
+          /* augmentToken = */ null,
+          directiveState);
     }
     Token start = token;
     // Skip modifiers to find a top level keyword or identifier
@@ -515,15 +519,27 @@
     }
     next = token.next!;
     Token? macroToken;
+    Token? augmentToken;
+    // TODO(johnniwinther): Should we support/recognize the combination
+    // of 'macro' and 'augment'.
     if (next.isIdentifier &&
         next.lexeme == 'macro' &&
         optional('class', next.next!)) {
       macroToken = next;
       next = next.next!;
+    } else if (next.isIdentifier &&
+        next.lexeme == 'augment' &&
+        optional('class', next.next!)) {
+      augmentToken = next;
+      next = next.next!;
     }
     if (next.isTopLevelKeyword) {
-      return parseTopLevelKeywordDeclaration(/* start = */ start,
-          /* keyword = */ next, /* macroToken = */ macroToken, directiveState);
+      return parseTopLevelKeywordDeclaration(
+          /* start = */ start,
+          /* keyword = */ next,
+          /* macroToken = */ macroToken,
+          /* augmentToken =*/ augmentToken,
+          directiveState);
     } else if (next.isKeywordOrIdentifier) {
       // TODO(danrubel): improve parseTopLevelMember
       // so that we don't parse modifiers twice.
@@ -600,16 +616,20 @@
 
   /// Parse any top-level declaration that begins with a keyword.
   /// [start] is the token before any modifiers preceding [keyword].
-  Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
-      Token? macroToken, DirectiveContext? directiveState) {
+  Token parseTopLevelKeywordDeclaration(
+      Token start,
+      Token keyword,
+      Token? macroToken,
+      Token? augmentToken,
+      DirectiveContext? directiveState) {
     assert(keyword.isTopLevelKeyword);
     final String? value = keyword.stringValue;
     if (identical(value, 'class')) {
       directiveState?.checkDeclaration();
-      Token? abstractToken =
-          parseClassDeclarationModifiers(start, macroToken ?? keyword);
+      Token? abstractToken = parseClassDeclarationModifiers(
+          start, macroToken ?? augmentToken ?? keyword);
       return parseClassOrNamedMixinApplication(
-          abstractToken, macroToken, keyword);
+          abstractToken, macroToken, augmentToken, keyword);
     } else if (identical(value, 'enum')) {
       directiveState?.checkDeclaration();
       parseTopLevelKeywordModifiers(start, keyword);
@@ -2065,8 +2085,8 @@
     return token;
   }
 
-  Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token? macroToken, Token classKeyword) {
+  Token parseClassOrNamedMixinApplication(Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token classKeyword) {
     assert(optional('class', classKeyword));
     Token begin = abstractToken ?? classKeyword;
     listener.beginClassOrMixinOrNamedMixinApplicationPrelude(begin);
@@ -2077,10 +2097,11 @@
         .parseVariables(name, this);
     if (optional('=', token.next!)) {
       listener.beginNamedMixinApplication(
-          begin, abstractToken, macroToken, name);
+          begin, abstractToken, macroToken, augmentToken, name);
       return parseNamedMixinApplication(token, begin, classKeyword);
     } else {
-      listener.beginClassDeclaration(begin, abstractToken, macroToken, name);
+      listener.beginClassDeclaration(
+          begin, abstractToken, macroToken, augmentToken, name);
       return parseClass(token, begin, classKeyword, name.lexeme);
     }
   }
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 5719d83..06db863 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -808,6 +808,9 @@
   /// Return the 'abstract' keyword, or `null` if the keyword was absent.
   Token? get abstractKeyword;
 
+  /// Return the 'augment' keyword, or `null` if the keyword was absent.
+  Token? get augmentKeyword;
+
   /// Return the token representing the 'class' keyword.
   Token get classKeyword;
 
@@ -895,6 +898,10 @@
   /// defining an abstract class.
   Token? get abstractKeyword;
 
+  /// The token for the 'augment' keyword, or `null` if this is not defining an
+  /// augmentation class.
+  Token? get augmentKeyword;
+
   @override
   ClassElement? get declaredElement;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 78698ce..8569e45 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -119,16 +119,18 @@
   /// [comment] and [metadata] can be `null` if the class does not have the
   /// corresponding attribute. The [abstractKeyword] can be `null` if the class
   /// is not abstract. The [macroKeyword] can be `null` if the class is not a
-  /// macro class. The [typeParameters] can be `null` if the class does not
-  /// have any type parameters. Any or all of the [extendsClause], [withClause],
-  /// and [implementsClause] can be `null` if the class does not have the
-  /// corresponding clause. The list of [members] can be `null` if the class
-  /// does not have any members.
+  /// macro class. The [augmentKeyword] can be `null` if the class is not an
+  /// augmentation class. The [typeParameters] can be `null` if the class does
+  /// not have any type parameters. Any or all of the [extendsClause],
+  /// [withClause], and [implementsClause] can be `null` if the class does not
+  /// have the corresponding clause. The list of [members] can be `null` if the
+  /// class does not have any members.
   ClassDeclaration classDeclaration(
       Comment? comment,
       List<Annotation>? metadata,
       Token? abstractKeyword,
       Token? macroKeyword,
+      Token? augmentKeyword,
       Token classKeyword,
       SimpleIdentifier name,
       TypeParameterList? typeParameters,
@@ -144,7 +146,8 @@
   /// corresponding attribute. The [typeParameters] can be `null` if the class
   /// does not have any type parameters. The [abstractKeyword] can be `null` if
   /// the class is not abstract. The [macroKeyword] can be `null` if the class
-  /// is not a macro class. The [implementsClause] can be `null` if the
+  /// is not a macro class. The [augmentKeyword] can be `null` if the class is
+  /// not an augmentation class.  The [implementsClause] can be `null` if the
   /// class does not implement any interfaces.
   ClassTypeAlias classTypeAlias(
       Comment? comment,
@@ -155,6 +158,7 @@
       Token equals,
       Token? abstractKeyword,
       Token? macroKeyword,
+      Token? augmentKeyword,
       NamedType superclass,
       WithClause withClause,
       ImplementsClause? implementsClause,
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 0424dc2..29f3b33 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1405,6 +1405,10 @@
   @override
   Token? macroKeyword;
 
+  /// The 'augment' keyword, or `null` if the keyword was absent.
+  @override
+  Token? augmentKeyword;
+
   /// The token representing the 'class' keyword.
   @override
   Token classKeyword;
@@ -1434,6 +1438,7 @@
       List<Annotation>? metadata,
       this.abstractKeyword,
       this.macroKeyword,
+      this.augmentKeyword,
       this.classKeyword,
       SimpleIdentifierImpl name,
       TypeParameterListImpl? typeParameters,
@@ -1453,6 +1458,7 @@
   Iterable<SyntacticEntity> get childEntities => super._childEntities
     ..add(abstractKeyword)
     ..add(macroKeyword)
+    ..add(augmentKeyword)
     ..add(classKeyword)
     ..add(_name)
     ..add(_typeParameters)
@@ -1476,7 +1482,7 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? macroKeyword ?? classKeyword;
+    return abstractKeyword ?? macroKeyword ?? augmentKeyword ?? classKeyword;
   }
 
   @override
@@ -1661,6 +1667,11 @@
   @override
   Token? macroKeyword;
 
+  /// The token for the 'augment' keyword, or `null` if this is not defining an
+  /// augmentation class.
+  @override
+  Token? augmentKeyword;
+
   /// The name of the superclass of the class being declared.
   NamedTypeImpl _superclass;
 
@@ -1686,6 +1697,7 @@
       this.equals,
       this.abstractKeyword,
       this.macroKeyword,
+      this.augmentKeyword,
       this._superclass,
       this._withClause,
       this._implementsClause,
@@ -1705,6 +1717,7 @@
     ..add(equals)
     ..add(abstractKeyword)
     ..add(macroKeyword)
+    ..add(augmentKeyword)
     ..add(_superclass)
     ..add(_withClause)
     ..add(_implementsClause)
@@ -1715,7 +1728,7 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? macroKeyword ?? typedefKeyword;
+    return abstractKeyword ?? macroKeyword ?? augmentKeyword ?? typedefKeyword;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 9f80d70..bf7b306 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -156,6 +156,7 @@
           List<Annotation>? metadata,
           Token? abstractKeyword,
           Token? macroKeyword,
+          Token? augmentKeyword,
           Token classKeyword,
           SimpleIdentifier name,
           TypeParameterList? typeParameters,
@@ -170,6 +171,7 @@
           metadata,
           abstractKeyword,
           macroKeyword,
+          augmentKeyword,
           classKeyword,
           name as SimpleIdentifierImpl,
           typeParameters as TypeParameterListImpl?,
@@ -190,6 +192,7 @@
           Token equals,
           Token? abstractKeyword,
           Token? macroKeyword,
+          Token? augmentKeyword,
           NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause,
@@ -203,6 +206,7 @@
           equals,
           abstractKeyword,
           macroKeyword,
+          augmentKeyword,
           superclass as NamedTypeImpl,
           withClause as WithClauseImpl,
           implementsClause as ImplementsClauseImpl?,
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 960f2cf..1c1ea38 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -152,6 +152,7 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.abstractKeyword, suffix: ' ');
     _visitToken(node.macroKeyword, suffix: ' ');
+    _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
@@ -170,6 +171,7 @@
       sink.write('abstract ');
     }
     _visitToken(node.macroKeyword, suffix: ' ');
+    _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 68ee0dc..f71b79fc 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -250,25 +250,40 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     assert(classDeclaration == null &&
         mixinDeclaration == null &&
         extensionDeclaration == null);
     push(_Modifiers()..abstractKeyword = abstractToken);
-    if (macroToken != null && !enableMacros) {
-      var feature = ExperimentalFeatures.macros;
-      handleRecoverableError(
-          templateExperimentNotEnabled.withArguments(
-            feature.enableString,
-            _versionAsString(ExperimentStatus.currentVersion),
-          ),
-          macroToken,
-          macroToken);
-      // Pretend that 'macro' didn't occur while this feature is incomplete.
-      macroToken = null;
+    if (!enableMacros) {
+      if (macroToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            macroToken,
+            macroToken);
+        // Pretend that 'macro' didn't occur while this feature is incomplete.
+        macroToken = null;
+      }
+      if (augmentToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            augmentToken,
+            augmentToken);
+        // Pretend that 'augment' didn't occur while this feature is incomplete.
+        augmentToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -398,22 +413,37 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     push(_Modifiers()..abstractKeyword = abstractToken);
-    if (macroToken != null && !enableMacros) {
-      var feature = ExperimentalFeatures.macros;
-      handleRecoverableError(
-          templateExperimentNotEnabled.withArguments(
-            feature.enableString,
-            _versionAsString(ExperimentStatus.currentVersion),
-          ),
-          macroToken,
-          macroToken);
-      // Pretend that 'macro' didn't occur while this feature is incomplete.
-      macroToken = null;
+    if (!enableMacros) {
+      if (macroToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            macroToken,
+            macroToken);
+        // Pretend that 'macro' didn't occur while this feature is incomplete.
+        macroToken = null;
+      }
+      if (augmentToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            augmentToken,
+            augmentToken);
+        // Pretend that 'augment' didn't occur while this feature is incomplete.
+        augmentToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -2090,6 +2120,7 @@
     var withClause = pop(NullValue.WithClause) as WithClause;
     var superclass = pop() as NamedType;
     var macroKeyword = pop(NullValue.Token) as Token?;
+    var augmentKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2105,6 +2136,7 @@
         equalsToken,
         abstractKeyword,
         macroKeyword,
+        augmentKeyword,
         superclass,
         withClause,
         implementsClause,
@@ -2690,6 +2722,7 @@
     var withClause = pop(NullValue.WithClause) as WithClause?;
     var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
     var macroKeyword = pop(NullValue.Token) as Token?;
+    var augmentKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2703,6 +2736,7 @@
       metadata,
       abstractKeyword,
       macroKeyword,
+      augmentKeyword,
       classKeyword,
       name,
       typeParameters,
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 9fb88ca..22cd603 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -241,7 +241,8 @@
           WithClause? withClause,
           ImplementsClause? implementsClause,
           {List<ClassMember> members = const [],
-          bool isMacro = false}) =>
+          bool isMacro = false,
+          bool isAugmentation = false}) =>
       astFactory.classDeclaration(
           null,
           null,
@@ -249,6 +250,7 @@
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
           isMacro ? TokenFactory.tokenFromString('macro') : null,
+          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
           TokenFactory.tokenFromKeyword(Keyword.CLASS),
           identifier3(name),
           typeParameters,
@@ -266,7 +268,8 @@
           NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause,
-          {bool isMacro = false}) =>
+          {bool isMacro = false,
+          bool isAugmentation = false}) =>
       astFactory.classTypeAlias(
           null,
           null,
@@ -278,6 +281,7 @@
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
           isMacro ? TokenFactory.tokenFromString('macro') : null,
+          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
           superclass,
           withClause,
           implementsClause,
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index d588af2..cf8dfd5 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -86,9 +86,10 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
-    super.beginClassDeclaration(beginToken, abstractToken, macroToken, name);
+  void beginClassDeclaration(Token beginToken, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    super.beginClassDeclaration(
+        beginToken, abstractToken, macroToken, augmentToken, name);
     begin('ClassDeclaration');
   }
 
@@ -391,10 +392,10 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token beginToken, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     super.beginNamedMixinApplication(
-        beginToken, abstractToken, macroToken, name);
+        beginToken, abstractToken, macroToken, augmentToken, name);
     begin('NamedMixinApplication');
   }
 
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index 384a789..6db8545 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -815,6 +815,7 @@
         null,
         null,
         null,
+        null,
         Token(Keyword.CLASS, 0),
         astFactory.simpleIdentifier(
             fasta.StringToken.fromString(TokenType.IDENTIFIER, className, 6)),
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index eac40aa..3af192f 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -211,6 +211,13 @@
             Keyword.ABSTRACT, "C", null, null, null, null));
   }
 
+  void test_visitClassDeclaration_abstractAugment() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        Keyword.ABSTRACT, "C", null, null, null, null,
+        isAugmentation: true);
+    _assertSource("abstract augment class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_abstractMacro() {
     ClassDeclaration declaration = AstTestFactory.classDeclaration(
         Keyword.ABSTRACT, "C", null, null, null, null,
@@ -218,6 +225,13 @@
     _assertSource("abstract macro class C {}", declaration);
   }
 
+  void test_visitClassDeclaration_augment() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        null, "C", null, null, null, null,
+        isAugmentation: true);
+    _assertSource("augment class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_empty() {
     _assertSource("class C {}",
         AstTestFactory.classDeclaration(null, "C", null, null, null, null));
@@ -406,6 +420,19 @@
             AstTestFactory.implementsClause([AstTestFactory.namedType4("I")])));
   }
 
+  void test_visitClassTypeAlias_abstractAugment() {
+    _assertSource(
+        "abstract augment class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            Keyword.ABSTRACT,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isAugmentation: true));
+  }
+
   void test_visitClassTypeAlias_abstractMacro() {
     _assertSource(
         "abstract macro class C = S with M1;",
@@ -419,6 +446,19 @@
             isMacro: true));
   }
 
+  void test_visitClassTypeAlias_augment() {
+    _assertSource(
+        "augment class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            null,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isAugmentation: true));
+  }
+
   void test_visitClassTypeAlias_generic() {
     _assertSource(
         "class C<E> = S<E> with M1<E>;",
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 758b070..c807337 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -62,6 +62,8 @@
 
   bool get isMacro;
 
+  bool get isAugmentation;
+
   bool get declaresConstConstructor;
 
   bool get isMixin;
@@ -124,11 +126,7 @@
       {bool isSetter: false, bool isSuper: false});
 
   /// Calls [f] for each constructor declared in this class.
-  ///
-  /// If [includeInjectedConstructors] is `true`, constructors only declared in
-  /// the patch class, if any, are included.
-  void forEachConstructor(void Function(String, MemberBuilder) f,
-      {bool includeInjectedConstructors: false});
+  void forEachConstructor(void Function(String, MemberBuilder) f);
 }
 
 abstract class ClassBuilderImpl extends DeclarationBuilderImpl
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index d8e6d6a..03a982b 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -59,6 +59,9 @@
   bool get isMacro => cls.isMacro;
 
   @override
+  bool get isAugmentation => false;
+
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     List<TypeVariableBuilder>? typeVariables = super.typeVariables;
     if (typeVariables == null && cls.typeParameters.isNotEmpty) {
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 3e10ccd..74902b3 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1749,6 +1749,7 @@
         loader: lastGoodKernelTarget.loader,
         nameOrigin: libraryBuilder,
         isUnsupported: libraryBuilder.isUnsupported,
+        isAugmentation: false,
       );
       libraryBuilder.scope.forEachLocalMember((name, member) {
         debugLibrary.scope.addLocalMember(name, member, setter: false);
@@ -1803,6 +1804,7 @@
         scope: debugLibrary.scope.createNestedScope("expression"),
         nameOrigin: libraryBuilder,
         isUnsupported: libraryBuilder.isUnsupported,
+        isAugmentation: false,
       );
 
       HybridFileSystem hfs =
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 755208c..1e2e07c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -427,12 +427,25 @@
   Future<void> _buildForPhase1(
       Iterable<SourceLibraryBuilder> augmentationLibraries) async {
     await loader.buildOutlines();
+    // Normally patch libraries are applied in [SourceLoader.resolveParts].
+    // For augmentation libraries we instead apply them directly here.
+    for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) {
+      augmentationLibrary.applyPatches();
+    }
     loader.computeLibraryScopes(augmentationLibraries);
     // TODO(johnniwinther): Support computation of macro applications in
     // augmentation libraries?
     loader.resolveTypes(augmentationLibraries);
   }
 
+  /// Builds [augmentationLibrary] to the state expected after applying phase
+  /// 2 macros.
+  void _buildForPhase2(SourceLibraryBuilder augmentationLibrary) {
+    augmentationLibrary.finishTypeVariables(objectClassBuilder, dynamicType);
+    augmentationLibrary.build(loader.coreLibrary, modifyTarget: false);
+    augmentationLibrary.resolveConstructors();
+  }
+
   Future<BuildResult> buildOutlines({CanonicalName? nameRoot}) async {
     if (loader.first == null) return new BuildResult();
     return withCrashReporting<BuildResult>(() async {
@@ -483,7 +496,8 @@
           loader.checkSemantics(objectClassBuilder);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_finishTypeVariables);
-      loader.finishTypeVariables(objectClassBuilder, dynamicType);
+      loader.finishTypeVariables(
+          loader.sourceLibraryBuilders, objectClassBuilder, dynamicType);
 
       benchmarker
           ?.enterPhase(BenchmarkPhases.outline_createTypeInferenceEngine);
@@ -500,7 +514,7 @@
       installSyntheticConstructors(sourceClassBuilders);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_resolveConstructors);
-      loader.resolveConstructors();
+      loader.resolveConstructors(loader.sourceLibraryBuilders);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_link);
       component =
@@ -517,8 +531,11 @@
 
       if (macroApplications != null) {
         benchmarker?.enterPhase(BenchmarkPhases.outline_applyDeclarationMacros);
-        await macroApplications
-            .applyDeclarationsMacros(loader.hierarchyBuilder);
+        await macroApplications.applyDeclarationsMacros(loader.hierarchyBuilder,
+            (SourceLibraryBuilder augmentationLibrary) async {
+          await _buildForPhase1([augmentationLibrary]);
+          _buildForPhase2(augmentationLibrary);
+        });
       }
 
       benchmarker
@@ -959,8 +976,7 @@
         }
       }
 
-      superclassBuilder.forEachConstructor(addSyntheticConstructor,
-          includeInjectedConstructors: true);
+      superclassBuilder.forEachConstructor(addSyntheticConstructor);
 
       if (!isConstructorAdded) {
         builder.addSyntheticConstructor(_makeDefaultConstructor(
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro.dart
index c4a34b3..c81a969 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro.dart
@@ -116,6 +116,7 @@
   final macro.MacroExecutor _macroExecutor;
   final Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData;
   final MacroApplicationDataForTesting? dataForTesting;
+  List<_ApplicationData>? _applicationDataCache;
 
   MacroApplications(
       this._macroExecutor, this.libraryData, this.dataForTesting) {
@@ -272,60 +273,57 @@
     }
   }
 
-  Future<Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>>>
-      _applyMacros(
-          Future<List<macro.MacroExecutionResult>> Function(
-                  Builder, macro.Declaration, List<MacroApplication>)
-              applyMacros) async {
-    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> libraryResults =
-        {};
-    for (MapEntry<SourceLibraryBuilder,
-        LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
-      SourceLibraryBuilder libraryBuilder = libraryEntry.key;
-      List<macro.MacroExecutionResult> results = [];
-      LibraryMacroApplicationData libraryMacroApplicationData =
-          libraryEntry.value;
-      for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
-          in libraryMacroApplicationData.memberApplications.entries) {
-        MemberBuilder memberBuilder = memberEntry.key;
-        macro.Declaration? declaration = _getMemberDeclaration(memberBuilder);
-        if (declaration != null) {
-          results.addAll(
-              await applyMacros(memberBuilder, declaration, memberEntry.value));
-        }
-      }
-      for (MapEntry<SourceClassBuilder, ClassMacroApplicationData> classEntry
-          in libraryMacroApplicationData.classData.entries) {
-        SourceClassBuilder classBuilder = classEntry.key;
-        ClassMacroApplicationData classData = classEntry.value;
-        List<MacroApplication>? classApplications = classData.classApplications;
-        if (classApplications != null) {
-          macro.ClassDeclaration classDeclaration =
-              _getClassDeclaration(classBuilder);
-          results.addAll(await applyMacros(
-              classBuilder, classDeclaration, classApplications));
-        }
+  Iterable<_ApplicationData> get _applicationData {
+    if (_applicationDataCache == null) {
+      List<_ApplicationData> data = _applicationDataCache = [];
+      for (MapEntry<SourceLibraryBuilder,
+          LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
+        SourceLibraryBuilder libraryBuilder = libraryEntry.key;
+        LibraryMacroApplicationData libraryMacroApplicationData =
+            libraryEntry.value;
         for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
-            in classData.memberApplications.entries) {
+            in libraryMacroApplicationData.memberApplications.entries) {
           MemberBuilder memberBuilder = memberEntry.key;
           macro.Declaration? declaration = _getMemberDeclaration(memberBuilder);
           if (declaration != null) {
-            results.addAll(await applyMacros(
-                memberBuilder, declaration, memberEntry.value));
+            data.add(new _ApplicationData(
+                libraryBuilder, memberBuilder, declaration, memberEntry.value));
+          }
+        }
+        for (MapEntry<SourceClassBuilder, ClassMacroApplicationData> classEntry
+            in libraryMacroApplicationData.classData.entries) {
+          SourceClassBuilder classBuilder = classEntry.key;
+          ClassMacroApplicationData classData = classEntry.value;
+          List<MacroApplication>? classApplications =
+              classData.classApplications;
+          if (classApplications != null) {
+            macro.ClassDeclaration classDeclaration =
+                _getClassDeclaration(classBuilder);
+            data.add(new _ApplicationData(libraryBuilder, classBuilder,
+                classDeclaration, classApplications));
+          }
+          for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
+              in classData.memberApplications.entries) {
+            MemberBuilder memberBuilder = memberEntry.key;
+            macro.Declaration? declaration =
+                _getMemberDeclaration(memberBuilder);
+            if (declaration != null) {
+              data.add(new _ApplicationData(libraryBuilder, memberBuilder,
+                  declaration, memberEntry.value));
+            }
           }
         }
       }
-      libraryResults[libraryBuilder] = results;
     }
-    return libraryResults;
+    return _applicationDataCache!;
   }
 
   Future<List<macro.MacroExecutionResult>> _applyTypeMacros(
-      Builder builder,
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications) async {
+      _ApplicationData applicationData) async {
+    macro.Declaration declaration = applicationData.declaration;
     List<macro.MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
       if (macroApplication.instanceIdentifier
           .shouldExecute(_declarationKind(declaration), macro.Phase.types)) {
         macro.MacroExecutionResult result =
@@ -336,6 +334,7 @@
     }
 
     if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
       if (builder is SourceClassBuilder) {
         dataForTesting?.classTypesResults[builder] = results;
       } else {
@@ -347,8 +346,13 @@
 
   Future<List<SourceLibraryBuilder>> applyTypeMacros() async {
     List<SourceLibraryBuilder> augmentationLibraries = [];
-    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results =
-        await _applyMacros(_applyTypeMacros);
+    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
+    for (_ApplicationData macroApplication in _applicationData) {
+      List<macro.MacroExecutionResult> executionResults =
+          await _applyTypeMacros(macroApplication);
+      (results[macroApplication.libraryBuilder] ??= [])
+          .addAll(executionResults);
+    }
     for (MapEntry<SourceLibraryBuilder, List<macro.MacroExecutionResult>> entry
         in results.entries) {
       SourceLibraryBuilder sourceLibraryBuilder = entry.key;
@@ -363,12 +367,12 @@
     return augmentationLibraries;
   }
 
-  Future<List<macro.MacroExecutionResult>> _applyDeclarationsMacros(
-      Builder builder,
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications) async {
+  Future<void> _applyDeclarationsMacros(_ApplicationData applicationData,
+      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
     List<macro.MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
+    macro.Declaration declaration = applicationData.declaration;
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
       if (macroApplication.instanceIdentifier.shouldExecute(
           _declarationKind(declaration), macro.Phase.declarations)) {
         macro.MacroExecutionResult result =
@@ -377,10 +381,19 @@
                 declaration,
                 typeResolver,
                 classIntrospector);
-        results.add(result);
+        String source = _macroExecutor
+            .buildAugmentationLibrary([result], _resolveIdentifier);
+        SourceLibraryBuilder augmentationLibrary = await applicationData
+            .libraryBuilder
+            .createAugmentationLibrary(source);
+        await onAugmentationLibrary(augmentationLibrary);
+        if (retainDataForTesting) {
+          results.add(result);
+        }
       }
     }
     if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
       if (builder is SourceClassBuilder) {
         dataForTesting?.classDeclarationsResults[builder] = results;
       } else {
@@ -388,27 +401,28 @@
             results;
       }
     }
-    return results;
   }
 
   late Types types;
   late macro.TypeResolver typeResolver;
   late macro.ClassIntrospector classIntrospector;
 
-  Future<void> applyDeclarationsMacros(
-      ClassHierarchyBase classHierarchy) async {
+  Future<void> applyDeclarationsMacros(ClassHierarchyBase classHierarchy,
+      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
     types = new Types(classHierarchy);
     typeResolver = new _TypeResolver(this);
     classIntrospector = new _ClassIntrospector(this);
-    await _applyMacros(_applyDeclarationsMacros);
+    for (_ApplicationData macroApplication in _applicationData) {
+      await _applyDeclarationsMacros(macroApplication, onAugmentationLibrary);
+    }
   }
 
   Future<List<macro.MacroExecutionResult>> _applyDefinitionMacros(
-      Builder builder,
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications) async {
+      _ApplicationData applicationData) async {
     List<macro.MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
+    macro.Declaration declaration = applicationData.declaration;
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
       if (macroApplication.instanceIdentifier.shouldExecute(
           _declarationKind(declaration), macro.Phase.definitions)) {
         macro.MacroExecutionResult result =
@@ -422,6 +436,7 @@
       }
     }
     if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
       if (builder is SourceClassBuilder) {
         dataForTesting?.classDefinitionsResults[builder] = results;
       } else {
@@ -436,13 +451,16 @@
 
   Future<void> applyDefinitionMacros() async {
     typeDeclarationResolver = new _TypeDeclarationResolver();
-    await _applyMacros(_applyDefinitionMacros);
+    for (_ApplicationData macroApplication in _applicationData) {
+      await _applyDefinitionMacros(macroApplication);
+    }
   }
 
   void close() {
     _macroExecutor.close();
     _staticTypeCache.clear();
     _typeAnnotationCache.clear();
+    _applicationDataCache?.clear();
   }
 
   macro.ClassDeclaration _createClassDeclaration(SourceClassBuilder builder) {
@@ -951,3 +969,14 @@
   throw new UnsupportedError(
       "Unexpected declaration ${declaration} (${declaration.runtimeType})");
 }
+
+/// Data needed to apply a list of macro applications to a class or member.
+class _ApplicationData {
+  final SourceLibraryBuilder libraryBuilder;
+  final Builder builder;
+  final macro.Declaration declaration;
+  final List<MacroApplication> macroApplications;
+
+  _ApplicationData(this.libraryBuilder, this.builder, this.declaration,
+      this.macroApplications);
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
index 02b0dc4..8105873 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
@@ -321,8 +321,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     _unexpected();
   }
 
@@ -599,8 +599,8 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     _unexpected();
   }
 
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index f1b940b..ef90973 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -6,6 +6,7 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/type_environment.dart';
 
 import 'builder/builder.dart';
 import 'builder/class_builder.dart';
@@ -26,6 +27,7 @@
 import 'kernel/hierarchy/class_member.dart' show ClassMember;
 import 'kernel/kernel_helper.dart';
 import 'problems.dart' show internalProblem, unsupported;
+import 'source/source_class_builder.dart';
 import 'source/source_library_builder.dart';
 import 'source/source_member_builder.dart';
 import 'util/helpers.dart' show DelayedActionPerformer;
@@ -847,6 +849,18 @@
 
   @override
   List<ClassMember> get localSetters => const <ClassMember>[];
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    assert(false, "Unexpected call to $runtimeType.checkVariance.");
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    assert(false, "Unexpected call to $runtimeType.checkVariance.");
+  }
 }
 
 class AmbiguousMemberBuilder extends AmbiguousBuilder
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index fd09e4e..2de10ba 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -916,8 +916,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginClassDeclaration");
     push(begin);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 47620d5..c51ff0c 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -795,8 +795,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginClassDeclaration");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -809,18 +809,32 @@
     libraryBuilder.setCurrentClassName(name.lexeme);
     inAbstractClass = abstractToken != null;
     push(abstractToken != null ? abstractMask : 0);
-    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
-      // TODO(johnniwinther): We should emit a different message when the
-      // experiment is not released yet. The current message indicates that
-      // changing the sdk version can solve the problem.
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-          macroToken.next!.charOffset,
-          macroToken.next!.length);
-      macroToken = null;
+    if (!libraryBuilder.enableMacrosInLibrary) {
+      if (macroToken != null) {
+        // TODO(johnniwinther): We should emit a different message when the
+        // experiment is not released yet. The current message indicates that
+        // changing the sdk version can solve the problem.
+        addProblem(
+            templateExperimentNotEnabled.withArguments(
+                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+            macroToken.next!.charOffset,
+            macroToken.next!.length);
+        macroToken = null;
+      }
+      if (augmentToken != null) {
+        // TODO(johnniwinther): We should emit a different message when the
+        // experiment is not released yet. The current message indicates that
+        // changing the sdk version can solve the problem.
+        addProblem(
+            templateExperimentNotEnabled.withArguments(
+                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+            augmentToken.next!.charOffset,
+            augmentToken.next!.length);
+        augmentToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -892,8 +906,8 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginNamedMixinApplication");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -904,15 +918,26 @@
     libraryBuilder.currentTypeParameterScopeBuilder.markAsNamedMixinApplication(
         name.lexeme, name.charOffset, typeVariables);
     push(abstractToken != null ? abstractMask : 0);
-    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-          macroToken.next!.charOffset,
-          macroToken.next!.length);
-      macroToken = null;
+    if (!libraryBuilder.enableMacrosInLibrary) {
+      if (macroToken != null) {
+        addProblem(
+            templateExperimentNotEnabled.withArguments(
+                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+            macroToken.next!.charOffset,
+            macroToken.next!.length);
+        macroToken = null;
+      }
+      if (augmentToken != null) {
+        addProblem(
+            templateExperimentNotEnabled.withArguments(
+                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+            augmentToken.next!.charOffset,
+            augmentToken.next!.length);
+        augmentToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -1052,6 +1077,7 @@
         ValueKinds.TypeBuilderOrNull,
         ValueKinds.ParserRecovery,
       ]),
+      /* augment token */ ValueKinds.TokenOrNull,
       /* macro token */ ValueKinds.TokenOrNull,
       /* modifiers */ ValueKinds.Integer,
       /* type variables */ ValueKinds.TypeVariableListOrNull,
@@ -1064,6 +1090,7 @@
         pop(NullValue.TypeBuilderList) as List<TypeBuilder>?;
     int supertypeOffset = popCharOffset();
     TypeBuilder? supertype = nullIfParserRecovery(pop()) as TypeBuilder?;
+    Token? augmentToken = pop(NullValue.Token) as Token?;
     Token? macroToken = pop(NullValue.Token) as Token?;
     int modifiers = pop() as int;
     List<TypeVariableBuilder>? typeVariables =
@@ -1142,7 +1169,8 @@
           nameOffset,
           endToken.charOffset,
           supertypeOffset,
-          isMacro: macroToken != null);
+          isMacro: macroToken != null,
+          isAugmentation: augmentToken != null);
     }
     libraryBuilder.setCurrentClassName(null);
     popDeclarationContext(DeclarationContext.Class);
@@ -1916,6 +1944,7 @@
         ValueKinds.ParserRecovery,
         ValueKinds.TypeBuilder,
       ]),
+      /* augment token */ ValueKinds.TokenOrNull,
       /* macro token */ ValueKinds.TokenOrNull,
       /* modifiers */ ValueKinds.Integer,
       /* type variables */ ValueKinds.TypeVariableListOrNull,
@@ -1927,6 +1956,7 @@
     List<TypeBuilder>? interfaces =
         popIfNotNull(implementsKeyword) as List<TypeBuilder>?;
     Object? mixinApplication = pop();
+    Token? augmentToken = pop(NullValue.Token) as Token?;
     Token? macroToken = pop(NullValue.Token) as Token?;
     int modifiers = pop() as int;
     List<TypeVariableBuilder>? typeVariables =
@@ -1996,7 +2026,8 @@
           startCharOffset,
           charOffset,
           charEndOffset,
-          isMacro: macroToken != null);
+          isMacro: macroToken != null,
+          isAugmentation: augmentToken != null);
     }
     popDeclarationContext(DeclarationContext.NamedMixinApplication);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 0f930faf..102db7f 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -57,7 +57,6 @@
 import 'source_field_builder.dart';
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_member_builder.dart';
-import 'source_procedure_builder.dart';
 
 Class initializeClass(
     Class? cls,
@@ -103,7 +102,10 @@
   @override
   final bool isMacro;
 
-  SourceClassBuilder? _patchBuilder;
+  @override
+  final bool isAugmentation;
+
+  List<SourceClassBuilder>? _patches;
 
   SourceClassBuilder(
       List<MetadataBuilder>? metadata,
@@ -124,7 +126,8 @@
       {Class? cls,
       this.mixedInTypeBuilder,
       this.isMixinDeclaration = false,
-      this.isMacro: false})
+      this.isMacro = false,
+      this.isAugmentation = false})
       : actualCls = initializeClass(cls, typeVariables, name, parent,
             startCharOffset, nameOffset, charEndOffset, referencesFromIndexed),
         super(metadata, modifiers, name, typeVariables, supertype, interfaces,
@@ -132,7 +135,7 @@
     actualCls.hasConstConstructor = declaresConstConstructor;
   }
 
-  SourceClassBuilder? get patchForTesting => _patchBuilder;
+  List<SourceClassBuilder>? get patchesForTesting => _patches;
 
   SourceClassBuilder? actualOrigin;
 
@@ -349,20 +352,39 @@
   }
 
   @override
-  void forEachConstructor(void Function(String, MemberBuilder) f,
-      {bool includeInjectedConstructors: false}) {
+  void forEach(void f(String name, Builder builder)) {
     if (isPatch) {
-      actualOrigin!.forEachConstructor(f,
-          includeInjectedConstructors: includeInjectedConstructors);
+      actualOrigin!.forEach(f);
+    } else {
+      scope.forEach(f);
+      List<SourceClassBuilder>? patchClasses = _patches;
+      if (patchClasses != null) {
+        for (SourceClassBuilder patchClass in patchClasses) {
+          patchClass.scope.forEach((String name, Builder builder) {
+            if (!builder.isPatch) {
+              f(name, builder);
+            }
+          });
+        }
+      }
+    }
+  }
+
+  @override
+  void forEachConstructor(void Function(String, MemberBuilder) f) {
+    if (isPatch) {
+      actualOrigin!.forEachConstructor(f);
     } else {
       constructors.forEach(f);
-      if (includeInjectedConstructors) {
-        _patchBuilder?.constructors
-            .forEach((String name, MemberBuilder builder) {
-          if (!builder.isPatch) {
-            f(name, builder);
-          }
-        });
+      List<SourceClassBuilder>? patchClasses = _patches;
+      if (patchClasses != null) {
+        for (SourceClassBuilder patchClass in patchClasses) {
+          patchClass.constructors.forEach((String name, MemberBuilder builder) {
+            if (!builder.isPatch) {
+              f(name, builder);
+            }
+          });
+        }
       }
     }
   }
@@ -382,8 +404,8 @@
     // assert checks that the names of the fields from the original declaration
     // and from the patch don't intersect.
     assert(
-        _patchBuilder == null ||
-            _patchBuilder!.scope.localMembers
+        _patches == null ||
+            _patches!.every((patchClass) => patchClass.scope.localMembers
                 .where((b) => b is SourceFieldBuilder)
                 .map((b) => (b as SourceFieldBuilder).name)
                 .toSet()
@@ -391,9 +413,14 @@
                     .where((b) => b is SourceFieldBuilder)
                     .map((b) => (b as SourceFieldBuilder).name)
                     .toSet())
-                .isEmpty,
+                .isEmpty),
         "Detected an attempt to patch a field.");
-    _patchBuilder?.scope.forEach(callbackFilteringFieldBuilders);
+    List<SourceClassBuilder>? patchClasses = _patches;
+    if (patchClasses != null) {
+      for (SourceClassBuilder patchClass in patchClasses) {
+        patchClass.scope.forEach(callbackFilteringFieldBuilders);
+      }
+    }
     scope.forEach(callbackFilteringFieldBuilders);
   }
 
@@ -412,7 +439,12 @@
     // Constructors can be patched, so iterate first over constructors in the
     // patch, and then over constructors in the original declaration skipping
     // those with the names that are in the patch.
-    _patchBuilder?.constructors.forEach(callbackFilteringFieldBuilders);
+    List<SourceClassBuilder>? patchClasses = _patches;
+    if (patchClasses != null) {
+      for (SourceClassBuilder patchClass in patchClasses) {
+        patchClass.constructors.forEach(callbackFilteringFieldBuilders);
+      }
+    }
     constructors.forEach(callbackFilteringFieldBuilders);
   }
 
@@ -569,7 +601,7 @@
   void applyPatch(Builder patch) {
     if (patch is SourceClassBuilder) {
       patch.actualOrigin = this;
-      _patchBuilder = patch;
+      (_patches ??= []).add(patch);
       // TODO(ahe): Complain if `patch.supertype` isn't null.
       scope.forEachLocalMember((String name, Builder member) {
         Builder? memberPatch =
@@ -614,8 +646,11 @@
     }
   }
 
-  void checkSupertypes(CoreTypes coreTypes,
-      ClassHierarchyBuilder hierarchyBuilder, Class enumClass) {
+  void checkSupertypes(
+      CoreTypes coreTypes,
+      ClassHierarchyBuilder hierarchyBuilder,
+      Class enumClass,
+      Class? macroClass) {
     // This method determines whether the class (that's being built) its super
     // class appears both in 'extends' and 'implements' clauses and whether any
     // interface appears multiple times in the 'implements' clause.
@@ -675,6 +710,27 @@
         }
       }
     }
+    if (macroClass != null && !cls.isMacro && !cls.isAbstract) {
+      // TODO(johnniwinther): Merge this check with the loop above.
+      bool isMacroFound = false;
+      List<Supertype> interfaces =
+          hierarchyBuilder.getNodeFromClass(cls).superclasses;
+      for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == macroClass) {
+          isMacroFound = true;
+        }
+      }
+      interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+      for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == macroClass) {
+          isMacroFound = true;
+        }
+      }
+      if (isMacroFound) {
+        addProblem(templateMacroClassNotDeclaredMacro.withArguments(name),
+            charOffset, noLength);
+      }
+    }
 
     void fail(NamedTypeBuilder target, Message message,
         TypeAliasBuilder? aliasBuilder) {
@@ -1274,38 +1330,25 @@
     }
 
     forEach((String name, Builder builder) {
-      if (builder is SourceFieldBuilder) {
-        // Check fields.
-        checkVarianceInField(builder, typeEnvironment, cls.typeParameters);
-        library.checkTypesInField(builder, typeEnvironment);
-      } else if (builder is SourceProcedureBuilder) {
-        // Check procedures
-        checkVarianceInFunction(
-            builder.procedure, typeEnvironment, cls.typeParameters);
-        library.checkTypesInFunctionBuilder(builder, typeEnvironment);
+      if (builder is SourceMemberBuilder) {
+        builder.checkVariance(this, typeEnvironment);
+        builder.checkTypes(library, typeEnvironment);
       } else {
         assert(
-            builder is _RedirectingConstructorsFieldBuilder &&
-                builder.name == redirectingName,
-            "Unexpected member: $builder.");
+            false,
+            "Unexpected class member builder $builder "
+            "(${builder.runtimeType})");
       }
     });
 
     forEachConstructor((String name, MemberBuilder builder) {
-      if (builder is DeclaredSourceConstructorBuilder) {
-        library.checkTypesInConstructorBuilder(builder, typeEnvironment);
-      } else if (builder is RedirectingFactoryBuilder) {
-        library.checkTypesInRedirectingFactoryBuilder(builder, typeEnvironment);
-      } else if (builder is SourceFactoryBuilder) {
-        assert(builder.isFactory, "Unexpected constructor $builder.");
-        library.checkTypesInFunctionBuilder(builder, typeEnvironment);
+      if (builder is SourceMemberBuilder) {
+        builder.checkTypes(library, typeEnvironment);
       } else {
-        assert(
-            // This is a synthesized constructor.
-            builder is SyntheticSourceConstructorBuilder,
-            "Unexpected constructor: $builder.");
+        assert(false,
+            "Unexpected constructor builder $builder (${builder.runtimeType})");
       }
-    }, includeInjectedConstructors: true);
+    });
   }
 
   void addSyntheticConstructor(
@@ -2710,4 +2753,12 @@
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     // Do nothing.
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 2cf43f9..1b39c45 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -6,6 +6,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
@@ -74,6 +75,8 @@
 
   Constructor get actualConstructor => _constructor;
 
+  List<DeclaredSourceConstructorBuilder>? _patches;
+
   bool _hasFormalsInferred = false;
 
   final bool _hasSuperInitializingFormals;
@@ -151,8 +154,7 @@
   @override
   DeclaredSourceConstructorBuilder get origin => actualOrigin ?? this;
 
-  ConstructorBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as ConstructorBuilder?;
+  List<SourceConstructorBuilder>? get patchForTesting => _patches;
 
   @override
   bool get isDeclarationInstanceMember => false;
@@ -671,6 +673,8 @@
     return 1;
   }
 
+  List<DeclaredSourceConstructorBuilder>? get patchesForTesting => _patches;
+
   @override
   void becomeNative(SourceLoader loader) {
     _constructor.isExternal = true;
@@ -682,7 +686,7 @@
     if (patch is DeclaredSourceConstructorBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -739,6 +743,22 @@
       formals = <FormalParameterBuilder>[];
     }
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInConstructorBuilder(this, typeEnvironment);
+    List<DeclaredSourceConstructorBuilder>? patches = _patches;
+    if (patches != null) {
+      for (DeclaredSourceConstructorBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class SyntheticSourceConstructorBuilder extends DillConstructorBuilder
@@ -813,4 +833,12 @@
       _synthesizedFunctionNode = null;
     }
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index 5d02635..03bae33 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -5,6 +5,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/constructor_reference_builder.dart';
@@ -28,6 +29,7 @@
 import '../type_inference/type_schema.dart';
 import '../util/helpers.dart';
 import 'name_scheme.dart';
+import 'source_class_builder.dart';
 import 'source_function_builder.dart';
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_loader.dart' show SourceLoader;
@@ -46,6 +48,8 @@
 
   SourceFactoryBuilder? actualOrigin;
 
+  List<SourceFactoryBuilder>? _patches;
+
   SourceFactoryBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -80,8 +84,7 @@
     this.asyncModifier = asyncModifier;
   }
 
-  SourceFactoryBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as SourceFactoryBuilder?;
+  List<SourceFactoryBuilder>? get patchesForTesting => _patches;
 
   @override
   AsyncMarker get asyncModifier => actualAsyncModifier;
@@ -215,7 +218,7 @@
     if (patch is SourceFactoryBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -246,6 +249,22 @@
     _finishPatch();
     return 1;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInFunctionBuilder(this, typeEnvironment);
+    List<SourceFactoryBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceFactoryBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class RedirectingFactoryBuilder extends SourceFactoryBuilder {
@@ -466,4 +485,14 @@
   List<DartType>? getTypeArguments() {
     return getRedirectingFactoryBody(_procedure)!.typeArguments;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInRedirectingFactoryBuilder(this, typeEnvironment);
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index 5a71d1b..0f2b052 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -10,6 +10,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/class_builder.dart';
 import '../builder/field_builder.dart';
@@ -35,6 +36,7 @@
 import '../type_inference/type_inference_engine.dart'
     show IncludesTypeParametersNonCovariantly;
 import '../util/helpers.dart' show DelayedActionPerformer;
+import 'source_class_builder.dart';
 import 'source_member_builder.dart';
 
 class SourceFieldBuilder extends SourceMemberBuilderImpl
@@ -496,6 +498,19 @@
   @override
   List<ClassMember> get localSetters =>
       _localSetters ??= _fieldEncoding.getLocalSetters(this);
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    sourceClassBuilder.checkVarianceInField(
+        this, typeEnvironment, sourceClassBuilder.cls.typeParameters);
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInField(this, typeEnvironment);
+  }
 }
 
 /// Strategy pattern for creating different encodings of a declared field.
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 70e9378..3df221f 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -243,6 +243,9 @@
 
   List<SourceLibraryBuilder>? _patchLibraries;
 
+  /// `true` if this is an augmentation library.
+  final bool isAugmentation;
+
   SourceLibraryBuilder.internal(
       SourceLoader loader,
       Uri fileUri,
@@ -253,8 +256,9 @@
       Library library,
       LibraryBuilder? nameOrigin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner,
-      bool isUnsupported)
+      {bool? referenceIsPartOwner,
+      required bool isUnsupported,
+      required bool isAugmentation})
       : this.fromScopes(
             loader,
             fileUri,
@@ -266,7 +270,8 @@
             library,
             nameOrigin,
             referencesFrom,
-            isUnsupported);
+            isUnsupported: isUnsupported,
+            isAugmentation: isAugmentation);
 
   SourceLibraryBuilder.fromScopes(
       this.loader,
@@ -279,7 +284,8 @@
       this.library,
       this._nameOrigin,
       this.referencesFrom,
-      this.isUnsupported)
+      {required this.isUnsupported,
+      required this.isAugmentation})
       : _languageVersion = packageLanguageVersion,
         currentTypeParameterScopeBuilder = _libraryTypeParameterScopeBuilder,
         referencesFromIndexed =
@@ -469,7 +475,8 @@
       LibraryBuilder? nameOrigin,
       Library? referencesFrom,
       bool? referenceIsPartOwner,
-      required bool isUnsupported})
+      required bool isUnsupported,
+      required bool isAugmentation})
       : this.internal(
             loader,
             fileUri,
@@ -487,8 +494,9 @@
                   ..setLanguageVersion(packageLanguageVersion.version)),
             nameOrigin,
             referencesFrom,
-            referenceIsPartOwner,
-            isUnsupported);
+            referenceIsPartOwner: referenceIsPartOwner,
+            isUnsupported: isUnsupported,
+            isAugmentation: isAugmentation);
 
   @override
   bool get isPart => partOfName != null || partOfUri != null;
@@ -520,7 +528,8 @@
         loader: loader,
         isUnsupported: false,
         target: library,
-        origin: this);
+        origin: this,
+        isAugmentation: true);
     addPatchLibrary(augmentationLibrary);
     loader.registerUnparsedLibrarySource(augmentationLibrary, source);
     return augmentationLibrary;
@@ -1758,7 +1767,8 @@
       int nameOffset,
       int endOffset,
       int supertypeOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     _addClass(
         TypeParameterScopeKind.classDeclaration,
         metadata,
@@ -1771,7 +1781,8 @@
         nameOffset,
         endOffset,
         supertypeOffset,
-        isMacro: isMacro);
+        isMacro: isMacro,
+        isAugmentation: isAugmentation);
   }
 
   void addMixinDeclaration(
@@ -1797,7 +1808,8 @@
         nameOffset,
         endOffset,
         supertypeOffset,
-        isMacro: false);
+        isMacro: false,
+        isAugmentation: false);
   }
 
   void _addClass(
@@ -1812,7 +1824,8 @@
       int nameOffset,
       int endOffset,
       int supertypeOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     _checkBadFunctionDeclUse(className, kind, nameOffset);
     _checkBadFunctionParameter(typeVariables);
     // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
@@ -1850,7 +1863,9 @@
         typeVariables,
         applyMixins(supertype, startOffset, nameOffset, endOffset, className,
             isMixinDeclaration,
-            typeVariables: typeVariables, isMacro: false),
+            typeVariables: typeVariables,
+            isMacro: false,
+            isAugmentation: false),
         interfaces,
         // TODO(johnniwinther): Add the `on` clause types of a mixin declaration
         // here.
@@ -1864,7 +1879,8 @@
         endOffset,
         _currentClassReferencesFromIndexed,
         isMixinDeclaration: isMixinDeclaration,
-        isMacro: isMacro);
+        isMacro: isMacro,
+        isAugmentation: isAugmentation);
 
     constructorReferences.clear();
     Map<String, TypeVariableBuilder>? typeVariablesByName =
@@ -2125,7 +2141,8 @@
       List<TypeVariableBuilder>? typeVariables,
       int modifiers: 0,
       List<TypeBuilder>? interfaces,
-      required bool isMacro}) {
+      required bool isMacro,
+      required bool isAugmentation}) {
     if (name == null) {
       // The following parameters should only be used when building a named
       // mixin application.
@@ -2344,7 +2361,8 @@
             charEndOffset,
             referencesFromIndexedClass,
             mixedInTypeBuilder: isMixinDeclaration ? null : mixin,
-            isMacro: isNamedMixinApplication && isMacro);
+            isMacro: isNamedMixinApplication && isMacro,
+            isAugmentation: isNamedMixinApplication && isAugmentation);
         // TODO(ahe, kmillikin): Should always be true?
         // pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
         // handle that :(
@@ -2372,7 +2390,8 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name)
         .resolveNamedTypes(typeVariables, this);
@@ -2383,7 +2402,8 @@
         typeVariables: typeVariables,
         modifiers: modifiers,
         interfaces: interfaces,
-        isMacro: isMacro)!;
+        isMacro: isMacro,
+        isAugmentation: isAugmentation)!;
     checkTypeVariables(typeVariables, supertype.declaration);
   }
 
@@ -2838,7 +2858,9 @@
         typeVariables,
         applyMixins(supertypeBuilder, startCharOffset, charOffset,
             charEndOffset, name, /* isMixinDeclaration = */ false,
-            typeVariables: typeVariables, isMacro: false),
+            typeVariables: typeVariables,
+            isMacro: false,
+            isAugmentation: false),
         interfaceBuilders,
         enumConstantInfos,
         this,
@@ -3883,9 +3905,11 @@
       Builder member = patchDeclarations.current;
       // We need to inject all non-patch members into the origin library. This
       // should only apply to private members.
+      // For augmentation libraries, all members are injected into the origin
+      // library, regardless of privacy.
       if (member.isPatch) {
         // Ignore patches.
-      } else if (name.startsWith("_")) {
+      } else if (name.startsWith("_") || isAugmentation) {
         origin.injectMemberFromPatch(name, member);
       } else {
         origin.exportMemberFromPatch(name, member);
@@ -4560,9 +4584,9 @@
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceFieldBuilder) {
-        checkTypesInField(declaration, typeEnvironment);
+        declaration.checkTypes(this, typeEnvironment);
       } else if (declaration is SourceProcedureBuilder) {
-        checkTypesInFunctionBuilder(declaration, typeEnvironment);
+        declaration.checkTypes(this, typeEnvironment);
         if (declaration.isGetter) {
           Builder? setterDeclaration =
               scope.lookupLocalMember(declaration.name, setter: true);
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index a429ef0..cd4c326 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -328,7 +328,8 @@
         referenceIsPartOwner: referenceIsPartOwner,
         isUnsupported: origin?.library.isUnsupported ??
             importUri.isScheme('dart') &&
-                !target.uriTranslator.isLibrarySupported(importUri.path));
+                !target.uriTranslator.isLibrarySupported(importUri.path),
+        isAugmentation: false);
   }
 
   /// Return `"true"` if the [dottedName] is a 'dart.library.*' qualifier for a
@@ -1689,9 +1690,9 @@
     ticker.logMs("Finished forwarders for $count procedures");
   }
 
-  void resolveConstructors() {
+  void resolveConstructors(List<SourceLibraryBuilder> libraryBuilders) {
     int count = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       count += library.resolveConstructors();
     }
     ticker.logMs("Resolved $count constructors");
@@ -1705,9 +1706,10 @@
     }
   }
 
-  void finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
+  void finishTypeVariables(Iterable<SourceLibraryBuilder> libraryBuilders,
+      ClassBuilder object, TypeBuilder dynamicType) {
     int count = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       count += library.finishTypeVariables(object, dynamicType);
     }
     ticker.logMs("Resolved $count type-variable bounds");
@@ -2065,7 +2067,8 @@
       List<SourceClassBuilder> sourceClasses, Class enumClass) {
     for (SourceClassBuilder builder in sourceClasses) {
       if (builder.library.loader == this && !builder.isPatch) {
-        builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass);
+        builder.checkSupertypes(
+            coreTypes, hierarchyBuilder, enumClass, _macroClassBuilder?.cls);
       }
     }
     ticker.logMs("Checked supertypes");
@@ -2585,7 +2588,7 @@
 
 _asyncThenWrapperHelper(continuation) {}
 
-_awaitHelper(object, thenCallback, errorCallback, awaiter) {}
+_awaitHelper(object, thenCallback, errorCallback) {}
 
 _completeOnAsyncReturn(_future, value, async_jump_var) {}
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_member_builder.dart b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
index edfb1a1..fcdfb76 100644
--- a/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
@@ -6,6 +6,7 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../../base/common.dart';
 import '../builder/builder.dart';
@@ -18,6 +19,7 @@
 import '../type_inference/type_inference_engine.dart'
     show InferenceDataForTesting;
 import '../util/helpers.dart' show DelayedActionPerformer;
+import 'source_class_builder.dart';
 
 abstract class SourceMemberBuilder implements MemberBuilder {
   MemberDataForTesting? get dataForTesting;
@@ -31,6 +33,15 @@
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes);
+
+  /// Checks the variance of type parameters [sourceClassBuilder] used in the
+  /// signature of this member.
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
+
+  /// Checks the signature types of this member.
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment);
 }
 
 mixin SourceMemberBuilderMixin implements SourceMemberBuilder {
@@ -114,8 +125,6 @@
 
 class MemberDataForTesting {
   final InferenceDataForTesting inferenceData = new InferenceDataForTesting();
-
-  MemberBuilder? patchForTesting;
 }
 
 /// If the name of [member] is private, update it to use the library reference
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 44af31f..5695450 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -4,6 +4,7 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/extension_builder.dart';
@@ -19,6 +20,7 @@
 import '../source/name_scheme.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../source/source_loader.dart' show SourceLoader;
+import 'source_class_builder.dart';
 import 'source_function_builder.dart';
 import 'source_member_builder.dart';
 
@@ -52,6 +54,8 @@
 
   SourceProcedureBuilder? actualOrigin;
 
+  List<SourceProcedureBuilder>? _patches;
+
   SourceProcedureBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -104,8 +108,7 @@
     }
   }
 
-  ProcedureBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as ProcedureBuilder?;
+  List<SourceProcedureBuilder>? get patchesForTesting => _patches;
 
   @override
   AsyncMarker get asyncModifier => actualAsyncModifier;
@@ -456,7 +459,7 @@
     if (patch is SourceProcedureBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -483,6 +486,31 @@
     origin.procedure.isRedirectingFactory = _procedure.isRedirectingFactory;
     return 1;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    sourceClassBuilder.checkVarianceInFunction(
+        procedure, typeEnvironment, sourceClassBuilder.cls.typeParameters);
+    List<SourceProcedureBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceProcedureBuilder patch in patches) {
+        patch.checkVariance(sourceClassBuilder, typeEnvironment);
+      }
+    }
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInFunctionBuilder(this, typeEnvironment);
+    List<SourceProcedureBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceProcedureBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class SourceProcedureMember extends BuilderClassMember {
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index d7140cd..a88ff23 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -165,12 +165,13 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     ClassDeclarationBegin data = new ClassDeclarationBegin(ParserAstType.BEGIN,
         begin: begin,
         abstractToken: abstractToken,
         macroToken: macroToken,
+        augmentToken: augmentToken,
         name: name);
     seen(data);
   }
@@ -920,13 +921,14 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     NamedMixinApplicationBegin data = new NamedMixinApplicationBegin(
         ParserAstType.BEGIN,
         begin: begin,
         abstractToken: abstractToken,
         macroToken: macroToken,
+        augmentToken: augmentToken,
         name: name);
     seen(data);
   }
@@ -2831,12 +2833,14 @@
   final Token begin;
   final Token? abstractToken;
   final Token? macroToken;
+  final Token? augmentToken;
   final Token name;
 
   ClassDeclarationBegin(ParserAstType type,
       {required this.begin,
       this.abstractToken,
       this.macroToken,
+      this.augmentToken,
       required this.name})
       : super("ClassDeclaration", type);
 
@@ -2845,6 +2849,7 @@
         "begin": begin,
         "abstractToken": abstractToken,
         "macroToken": macroToken,
+        "augmentToken": augmentToken,
         "name": name,
       };
 }
@@ -4199,12 +4204,14 @@
   final Token begin;
   final Token? abstractToken;
   final Token? macroToken;
+  final Token? augmentToken;
   final Token name;
 
   NamedMixinApplicationBegin(ParserAstType type,
       {required this.begin,
       this.abstractToken,
       this.macroToken,
+      this.augmentToken,
       required this.name})
       : super("NamedMixinApplication", type);
 
@@ -4213,6 +4220,7 @@
         "begin": begin,
         "abstractToken": abstractToken,
         "macroToken": macroToken,
+        "augmentToken": augmentToken,
         "name": name,
       };
 }
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 0e1957f..b2e67dc 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -578,6 +578,8 @@
 LibraryDirectiveNotFirst/script3: Fail
 ListLiteralTooManyTypeArguments/example: Fail
 LoadLibraryTakesNoArguments/example: Fail
+MacroClassNotDeclaredMacro/analyzerCode: Fail
+MacroClassNotDeclaredMacro/example: Fail
 MainNotFunctionDeclaration/analyzerCode: Fail
 MainNotFunctionDeclarationExported/analyzerCode: Fail
 MainNotFunctionDeclarationExported/part_wrapped_script: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 043a64d..72c975a 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5479,3 +5479,7 @@
 
 EnumImplementerContainsValuesDeclaration:
   problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'."
+
+MacroClassNotDeclaredMacro:
+  problemMessage: "Non-abstract class '#name' implements 'Macro' but isn't declared as a macro class."
+  correctionMessage: "Try adding the 'macro' class modifier."
diff --git a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
index 2403c22..272dfb5 100644
--- a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(enum)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, enum, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, enum)
       parseEnum(enum)
         listener: beginUncategorizedTopLevelDeclaration(enum)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
index 315d899..f82251f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -114,7 +114,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, D)
+    beginClassDeclaration(class, null, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
index f075fef..09f91b9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -258,14 +258,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, D)
+        listener: beginClassDeclaration(class, null, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
index df50087..23e1d5d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
@@ -126,7 +126,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
index 06d293d..4c6e830 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
index ddc254b..24af11c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
index 3f0d02a..927fcd5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
index c5b9ca5..1f2918a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
index 510034d..5678e88 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
index 49cb540..413fa9a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
index fdc9ae0..7dd414e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
index affdbb5..37bd2b8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
index 3e8ea041..7438400 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
index 3353b3f..685dbf9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
index fbd18be..a01601a0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
index 9ecbeda..bf658f7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
@@ -78,7 +78,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
index 06cf3f0..6a5900b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
index a93fe07..ab6b6c8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
index 148639d..b072c20 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
index e78880d..0f7ad37 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
index d1bd6a8..89458dc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
index c951cb0..fe4a38c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
index 3caae1e..9a0072b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
index 32d89ec..0267bd5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
index cfcdd2e..b572628 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -41,7 +41,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -56,7 +56,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(,)
       handleType(A, null)
@@ -92,7 +92,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables(extend)
-    beginClassDeclaration(class, null, null, Bar)
+    beginClassDeclaration(class, null, null, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Baz, classOrMixinDeclaration)
     handleNoTypeVariables(on)
-    beginClassDeclaration(class, null, null, Baz)
+    beginClassDeclaration(class, null, null, null, Baz)
       handleNoType(Baz)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
index 0c27622..f0f0ce6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -62,14 +62,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -130,14 +130,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extend)
-        listener: beginClassDeclaration(class, null, null, Bar)
+        listener: beginClassDeclaration(class, null, null, null, Bar)
         parseClass(Bar, class, class, Bar)
           parseClassHeaderOpt(Bar, class, class)
             parseClassExtendsOpt(Bar)
@@ -214,14 +214,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Baz, classOrMixinDeclaration)
         listener: handleNoTypeVariables(on)
-        listener: beginClassDeclaration(class, null, null, Baz)
+        listener: beginClassDeclaration(class, null, null, null, Baz)
         parseClass(Baz, class, class, Baz)
           parseClassHeaderOpt(Baz, class, class)
             parseClassExtendsOpt(Baz)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
index 50def6f..1313ed6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Annotation, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Annotation)
+    beginClassDeclaration(class, null, null, null, Annotation)
       handleNoType(Annotation)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -80,7 +80,7 @@
         handleNoType(E)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -95,7 +95,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
index 8d39ca9..8826b80 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
@@ -28,14 +28,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Annotation, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Annotation)
+        listener: beginClassDeclaration(class, null, null, null, Annotation)
         parseClass(Annotation, class, class, Annotation)
           parseClassHeaderOpt(Annotation, class, class)
             parseClassExtendsOpt(Annotation)
@@ -112,9 +112,9 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -127,7 +127,7 @@
         listener: handleNoType(E)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -148,14 +148,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
index d081a84..10ddbdb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -44,7 +44,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -79,7 +79,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -120,7 +120,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -158,7 +158,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -203,7 +203,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -249,7 +249,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -306,7 +306,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -386,7 +386,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -458,7 +458,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -476,7 +476,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
index 2ac0d92..1f9d7e5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
index b1c109a..08cc15d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
index 0316b5f..65e0e92 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
index 91ece53..4dfa6f2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
index c5a4273..59c238c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
index f8f7500..d7c2cfa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
index abe79a6..0deeeac 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
index 19f4ce1..becebb3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
index ecd1166..256e9d9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
index 6329811..8b1083d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
index 8b108c7..dcd3f1d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
index e533d5c..dc0e852 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
index 87cebd9..d1667e3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
index c9eff1a..a9912eb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
@@ -18,7 +18,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -54,7 +54,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(DND1, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, DND1)
+    beginClassDeclaration(class, null, null, null, DND1)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
index 32477fe..1cddebb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -42,7 +42,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(mixin)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, mixin, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, mixin, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, mixin)
       parseMixin(mixin)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
@@ -74,14 +74,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(DND1, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, DND1)
+        listener: beginClassDeclaration(class, null, null, null, DND1)
         parseClass(DND1, class, class, DND1)
           parseClassHeaderOpt(DND1, class, class)
             parseClassExtendsOpt(DND1)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
index fdef824..b6a4348 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
index 4c19f5b..73dba53 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
index b8f453d..f2ed397 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
index 9a36032..d60c06a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
index 46c74ad..352312d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
index 548af9c..c78bdb7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
index 04648ed..b5959b9a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
index fc0194c..38fbcab8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
index 78a0d51..88127ee 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
index 143a90d..d005a9d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
index 5602483..c912bcf 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
index 9792fa7..13ae759 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
index eba032d..c504081 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
index 88ac7ed..f3d58ae 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
index ccc11a0..7c8208e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
index 9138896..f8d5f4f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
index 498b48a..e13a694 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
index a2bf1e5..c664b70 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
index b2e7f3e..6d7d079 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
index a62bd2c..f534b0d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
index dabdaef..bd41963 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
index aaf3524..e811ec9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
@@ -22,7 +22,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
index 4cba827..c2de767 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar(UnmatchedToken(())
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(UnmatchedToken((), class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(UnmatchedToken((), class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(UnmatchedToken((), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(>, class, class, Foo)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
index 3bc1986..de46ff9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, abstract)
+    beginClassDeclaration(class, null, null, null, abstract)
       handleNoType(abstract)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -243,7 +243,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, as)
+    beginClassDeclaration(class, null, null, null, as)
       handleNoType(as)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -259,7 +259,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, assert)
+    beginClassDeclaration(class, null, null, null, assert)
       handleNoType(assert)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -274,7 +274,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, async)
+    beginClassDeclaration(class, null, null, null, async)
       handleNoType(async)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -289,7 +289,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, await)
+    beginClassDeclaration(class, null, null, null, await)
       handleNoType(await)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -305,7 +305,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, break)
+    beginClassDeclaration(class, null, null, null, break)
       handleNoType(break)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -321,7 +321,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, case)
+    beginClassDeclaration(class, null, null, null, case)
       handleNoType(case)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -337,7 +337,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, catch)
+    beginClassDeclaration(class, null, null, null, catch)
       handleNoType(catch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -353,7 +353,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, class)
+    beginClassDeclaration(class, null, null, null, class)
       handleNoType(class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -369,7 +369,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, const)
+    beginClassDeclaration(class, null, null, null, const)
       handleNoType(const)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -385,7 +385,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, continue)
+    beginClassDeclaration(class, null, null, null, continue)
       handleNoType(continue)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -401,7 +401,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, covariant)
+    beginClassDeclaration(class, null, null, null, covariant)
       handleNoType(covariant)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -417,7 +417,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, default)
+    beginClassDeclaration(class, null, null, null, default)
       handleNoType(default)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -433,7 +433,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, deferred)
+    beginClassDeclaration(class, null, null, null, deferred)
       handleNoType(deferred)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -449,7 +449,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, do)
+    beginClassDeclaration(class, null, null, null, do)
       handleNoType(do)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -465,7 +465,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, dynamic)
+    beginClassDeclaration(class, null, null, null, dynamic)
       handleNoType(dynamic)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -481,7 +481,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, else)
+    beginClassDeclaration(class, null, null, null, else)
       handleNoType(else)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -497,7 +497,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, enum)
+    beginClassDeclaration(class, null, null, null, enum)
       handleNoType(enum)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -513,7 +513,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, export)
+    beginClassDeclaration(class, null, null, null, export)
       handleNoType(export)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -529,7 +529,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, extends)
+    beginClassDeclaration(class, null, null, null, extends)
       handleNoType(extends)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -545,7 +545,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, extension)
+    beginClassDeclaration(class, null, null, null, extension)
       handleNoType(extension)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -561,7 +561,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, external)
+    beginClassDeclaration(class, null, null, null, external)
       handleNoType(external)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -577,7 +577,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, factory)
+    beginClassDeclaration(class, null, null, null, factory)
       handleNoType(factory)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -593,7 +593,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, false)
+    beginClassDeclaration(class, null, null, null, false)
       handleNoType(false)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -609,7 +609,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, final)
+    beginClassDeclaration(class, null, null, null, final)
       handleNoType(final)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -625,7 +625,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, finally)
+    beginClassDeclaration(class, null, null, null, finally)
       handleNoType(finally)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -641,7 +641,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, for)
+    beginClassDeclaration(class, null, null, null, for)
       handleNoType(for)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -656,7 +656,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Function)
+    beginClassDeclaration(class, null, null, null, Function)
       handleNoType(Function)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -672,7 +672,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, get)
+    beginClassDeclaration(class, null, null, null, get)
       handleNoType(get)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -687,7 +687,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, hide)
+    beginClassDeclaration(class, null, null, null, hide)
       handleNoType(hide)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -703,7 +703,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, if)
+    beginClassDeclaration(class, null, null, null, if)
       handleNoType(if)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -719,7 +719,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, implements)
+    beginClassDeclaration(class, null, null, null, implements)
       handleNoType(implements)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -735,7 +735,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, import)
+    beginClassDeclaration(class, null, null, null, import)
       handleNoType(import)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -751,7 +751,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, in)
+    beginClassDeclaration(class, null, null, null, in)
       handleNoType(in)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -766,7 +766,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, inout)
+    beginClassDeclaration(class, null, null, null, inout)
       handleNoType(inout)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -782,7 +782,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, interface)
+    beginClassDeclaration(class, null, null, null, interface)
       handleNoType(interface)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -798,7 +798,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, is)
+    beginClassDeclaration(class, null, null, null, is)
       handleNoType(is)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -814,7 +814,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, late)
+    beginClassDeclaration(class, null, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -830,7 +830,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, library)
+    beginClassDeclaration(class, null, null, null, library)
       handleNoType(library)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -846,7 +846,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, mixin)
+    beginClassDeclaration(class, null, null, null, mixin)
       handleNoType(mixin)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -861,7 +861,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, native)
+    beginClassDeclaration(class, null, null, null, native)
       handleNoType(native)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -877,7 +877,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, new)
+    beginClassDeclaration(class, null, null, null, new)
       handleNoType(new)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -893,7 +893,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, null)
+    beginClassDeclaration(class, null, null, null, null)
       handleNoType(null)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -908,7 +908,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, of)
+    beginClassDeclaration(class, null, null, null, of)
       handleNoType(of)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -923,7 +923,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, on)
+    beginClassDeclaration(class, null, null, null, on)
       handleNoType(on)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, operator)
+    beginClassDeclaration(class, null, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -954,7 +954,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, out)
+    beginClassDeclaration(class, null, null, null, out)
       handleNoType(out)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -970,7 +970,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, part)
+    beginClassDeclaration(class, null, null, null, part)
       handleNoType(part)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -985,7 +985,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, patch)
+    beginClassDeclaration(class, null, null, null, patch)
       handleNoType(patch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1001,7 +1001,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, required)
+    beginClassDeclaration(class, null, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1017,7 +1017,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, rethrow)
+    beginClassDeclaration(class, null, null, null, rethrow)
       handleNoType(rethrow)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1033,7 +1033,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, return)
+    beginClassDeclaration(class, null, null, null, return)
       handleNoType(return)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1049,7 +1049,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, set)
+    beginClassDeclaration(class, null, null, null, set)
       handleNoType(set)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1064,7 +1064,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, show)
+    beginClassDeclaration(class, null, null, null, show)
       handleNoType(show)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1079,7 +1079,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, source)
+    beginClassDeclaration(class, null, null, null, source)
       handleNoType(source)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1095,7 +1095,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, static)
+    beginClassDeclaration(class, null, null, null, static)
       handleNoType(static)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1111,7 +1111,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, super)
+    beginClassDeclaration(class, null, null, null, super)
       handleNoType(super)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1127,7 +1127,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, switch)
+    beginClassDeclaration(class, null, null, null, switch)
       handleNoType(switch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1142,7 +1142,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, sync)
+    beginClassDeclaration(class, null, null, null, sync)
       handleNoType(sync)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1158,7 +1158,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, this)
+    beginClassDeclaration(class, null, null, null, this)
       handleNoType(this)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1174,7 +1174,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, throw)
+    beginClassDeclaration(class, null, null, null, throw)
       handleNoType(throw)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1190,7 +1190,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, true)
+    beginClassDeclaration(class, null, null, null, true)
       handleNoType(true)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1206,7 +1206,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, try)
+    beginClassDeclaration(class, null, null, null, try)
       handleNoType(try)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1222,7 +1222,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, typedef)
+    beginClassDeclaration(class, null, null, null, typedef)
       handleNoType(typedef)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1238,7 +1238,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, var)
+    beginClassDeclaration(class, null, null, null, var)
       handleNoType(var)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1254,7 +1254,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, void)
+    beginClassDeclaration(class, null, null, null, void)
       handleNoType(void)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1270,7 +1270,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, while)
+    beginClassDeclaration(class, null, null, null, while)
       handleNoType(while)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1286,7 +1286,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, with)
+    beginClassDeclaration(class, null, null, null, with)
       handleNoType(with)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1301,7 +1301,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, yield)
+    beginClassDeclaration(class, null, null, null, yield)
       handleNoType(yield)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
index 6c9c866..d873666 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, abstract)
+        listener: beginClassDeclaration(class, null, null, null, abstract)
         parseClass(abstract, class, class, abstract)
           parseClassHeaderOpt(abstract, class, class)
             parseClassExtendsOpt(abstract)
@@ -36,16 +36,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, as)
+        listener: beginClassDeclaration(class, null, null, null, as)
         parseClass(as, class, class, as)
           parseClassHeaderOpt(as, class, class)
             parseClassExtendsOpt(as)
@@ -66,16 +66,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
           listener: handleIdentifier(assert, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, assert)
+        listener: beginClassDeclaration(class, null, null, null, assert)
         parseClass(assert, class, class, assert)
           parseClassHeaderOpt(assert, class, class)
             parseClassExtendsOpt(assert)
@@ -96,14 +96,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, async)
+        listener: beginClassDeclaration(class, null, null, null, async)
         parseClass(async, class, class, async)
           parseClassHeaderOpt(async, class, class)
             parseClassExtendsOpt(async)
@@ -124,14 +124,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, await)
+        listener: beginClassDeclaration(class, null, null, null, await)
         parseClass(await, class, class, await)
           parseClassHeaderOpt(await, class, class)
             parseClassExtendsOpt(await)
@@ -152,16 +152,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
           listener: handleIdentifier(break, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, break)
+        listener: beginClassDeclaration(class, null, null, null, break)
         parseClass(break, class, class, break)
           parseClassHeaderOpt(break, class, class)
             parseClassExtendsOpt(break)
@@ -182,16 +182,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
           listener: handleIdentifier(case, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, case)
+        listener: beginClassDeclaration(class, null, null, null, case)
         parseClass(case, class, class, case)
           parseClassHeaderOpt(case, class, class)
             parseClassExtendsOpt(case)
@@ -212,16 +212,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
           listener: handleIdentifier(catch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, catch)
+        listener: beginClassDeclaration(class, null, null, null, catch)
         parseClass(catch, class, class, catch)
           parseClassHeaderOpt(catch, class, class)
             parseClassExtendsOpt(catch)
@@ -242,16 +242,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
           listener: handleIdentifier(class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, class)
+        listener: beginClassDeclaration(class, null, null, null, class)
         parseClass(class, class, class, class)
           parseClassHeaderOpt(class, class, class)
             parseClassExtendsOpt(class)
@@ -272,16 +272,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
           listener: handleIdentifier(const, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, const)
+        listener: beginClassDeclaration(class, null, null, null, const)
         parseClass(const, class, class, const)
           parseClassHeaderOpt(const, class, class)
             parseClassExtendsOpt(const)
@@ -302,16 +302,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
           listener: handleIdentifier(continue, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, continue)
+        listener: beginClassDeclaration(class, null, null, null, continue)
         parseClass(continue, class, class, continue)
           parseClassHeaderOpt(continue, class, class)
             parseClassExtendsOpt(continue)
@@ -332,16 +332,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, covariant)
+        listener: beginClassDeclaration(class, null, null, null, covariant)
         parseClass(covariant, class, class, covariant)
           parseClassHeaderOpt(covariant, class, class)
             parseClassExtendsOpt(covariant)
@@ -362,16 +362,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           listener: handleIdentifier(default, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, default)
+        listener: beginClassDeclaration(class, null, null, null, default)
         parseClass(default, class, class, default)
           parseClassHeaderOpt(default, class, class)
             parseClassExtendsOpt(default)
@@ -392,16 +392,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, deferred)
+        listener: beginClassDeclaration(class, null, null, null, deferred)
         parseClass(deferred, class, class, deferred)
           parseClassHeaderOpt(deferred, class, class)
             parseClassExtendsOpt(deferred)
@@ -422,16 +422,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
           listener: handleIdentifier(do, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, do)
+        listener: beginClassDeclaration(class, null, null, null, do)
         parseClass(do, class, class, do)
           parseClassHeaderOpt(do, class, class)
             parseClassExtendsOpt(do)
@@ -452,16 +452,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, dynamic)
+        listener: beginClassDeclaration(class, null, null, null, dynamic)
         parseClass(dynamic, class, class, dynamic)
           parseClassHeaderOpt(dynamic, class, class)
             parseClassExtendsOpt(dynamic)
@@ -482,16 +482,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
           listener: handleIdentifier(else, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, else)
+        listener: beginClassDeclaration(class, null, null, null, else)
         parseClass(else, class, class, else)
           parseClassHeaderOpt(else, class, class)
             parseClassExtendsOpt(else)
@@ -512,16 +512,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
           listener: handleIdentifier(enum, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, enum)
+        listener: beginClassDeclaration(class, null, null, null, enum)
         parseClass(enum, class, class, enum)
           parseClassHeaderOpt(enum, class, class)
             parseClassExtendsOpt(enum)
@@ -542,16 +542,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, export)
+        listener: beginClassDeclaration(class, null, null, null, export)
         parseClass(export, class, class, export)
           parseClassHeaderOpt(export, class, class)
             parseClassExtendsOpt(export)
@@ -572,16 +572,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
           listener: handleIdentifier(extends, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, extends)
+        listener: beginClassDeclaration(class, null, null, null, extends)
         parseClass(extends, class, class, extends)
           parseClassHeaderOpt(extends, class, class)
             parseClassExtendsOpt(extends)
@@ -602,16 +602,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, extension)
+        listener: beginClassDeclaration(class, null, null, null, extension)
         parseClass(extension, class, class, extension)
           parseClassHeaderOpt(extension, class, class)
             parseClassExtendsOpt(extension)
@@ -632,16 +632,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, external)
+        listener: beginClassDeclaration(class, null, null, null, external)
         parseClass(external, class, class, external)
           parseClassHeaderOpt(external, class, class)
             parseClassExtendsOpt(external)
@@ -662,16 +662,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, factory)
+        listener: beginClassDeclaration(class, null, null, null, factory)
         parseClass(factory, class, class, factory)
           parseClassHeaderOpt(factory, class, class)
             parseClassExtendsOpt(factory)
@@ -692,16 +692,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
           listener: handleIdentifier(false, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, false)
+        listener: beginClassDeclaration(class, null, null, null, false)
         parseClass(false, class, class, false)
           parseClassHeaderOpt(false, class, class)
             parseClassExtendsOpt(false)
@@ -722,16 +722,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
           listener: handleIdentifier(final, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, final)
+        listener: beginClassDeclaration(class, null, null, null, final)
         parseClass(final, class, class, final)
           parseClassHeaderOpt(final, class, class)
             parseClassExtendsOpt(final)
@@ -752,16 +752,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
           listener: handleIdentifier(finally, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, finally)
+        listener: beginClassDeclaration(class, null, null, null, finally)
         parseClass(finally, class, class, finally)
           parseClassHeaderOpt(finally, class, class)
             parseClassExtendsOpt(finally)
@@ -782,16 +782,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
           listener: handleIdentifier(for, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, for)
+        listener: beginClassDeclaration(class, null, null, null, for)
         parseClass(for, class, class, for)
           parseClassHeaderOpt(for, class, class)
             parseClassExtendsOpt(for)
@@ -812,14 +812,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Function)
+        listener: beginClassDeclaration(class, null, null, null, Function)
         parseClass(Function, class, class, Function)
           parseClassHeaderOpt(Function, class, class)
             parseClassExtendsOpt(Function)
@@ -840,16 +840,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, get)
+        listener: beginClassDeclaration(class, null, null, null, get)
         parseClass(get, class, class, get)
           parseClassHeaderOpt(get, class, class)
             parseClassExtendsOpt(get)
@@ -870,14 +870,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, hide)
+        listener: beginClassDeclaration(class, null, null, null, hide)
         parseClass(hide, class, class, hide)
           parseClassHeaderOpt(hide, class, class)
             parseClassExtendsOpt(hide)
@@ -898,16 +898,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
           listener: handleIdentifier(if, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, if)
+        listener: beginClassDeclaration(class, null, null, null, if)
         parseClass(if, class, class, if)
           parseClassHeaderOpt(if, class, class)
             parseClassExtendsOpt(if)
@@ -928,16 +928,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, implements)
+        listener: beginClassDeclaration(class, null, null, null, implements)
         parseClass(implements, class, class, implements)
           parseClassHeaderOpt(implements, class, class)
             parseClassExtendsOpt(implements)
@@ -958,16 +958,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, import)
+        listener: beginClassDeclaration(class, null, null, null, import)
         parseClass(import, class, class, import)
           parseClassHeaderOpt(import, class, class)
             parseClassExtendsOpt(import)
@@ -988,16 +988,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
           listener: handleIdentifier(in, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, in)
+        listener: beginClassDeclaration(class, null, null, null, in)
         parseClass(in, class, class, in)
           parseClassHeaderOpt(in, class, class)
             parseClassExtendsOpt(in)
@@ -1018,14 +1018,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, inout)
+        listener: beginClassDeclaration(class, null, null, null, inout)
         parseClass(inout, class, class, inout)
           parseClassHeaderOpt(inout, class, class)
             parseClassExtendsOpt(inout)
@@ -1046,16 +1046,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, interface)
+        listener: beginClassDeclaration(class, null, null, null, interface)
         parseClass(interface, class, class, interface)
           parseClassHeaderOpt(interface, class, class)
             parseClassExtendsOpt(interface)
@@ -1076,16 +1076,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
           listener: handleIdentifier(is, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, is)
+        listener: beginClassDeclaration(class, null, null, null, is)
         parseClass(is, class, class, is)
           parseClassHeaderOpt(is, class, class)
             parseClassExtendsOpt(is)
@@ -1106,16 +1106,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, late)
+        listener: beginClassDeclaration(class, null, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -1136,16 +1136,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, library)
+        listener: beginClassDeclaration(class, null, null, null, library)
         parseClass(library, class, class, library)
           parseClassHeaderOpt(library, class, class)
             parseClassExtendsOpt(library)
@@ -1166,16 +1166,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, mixin)
+        listener: beginClassDeclaration(class, null, null, null, mixin)
         parseClass(mixin, class, class, mixin)
           parseClassHeaderOpt(mixin, class, class)
             parseClassExtendsOpt(mixin)
@@ -1196,14 +1196,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, native)
+        listener: beginClassDeclaration(class, null, null, null, native)
         parseClass(native, class, class, native)
           parseClassHeaderOpt(native, class, class)
             parseClassExtendsOpt(native)
@@ -1224,16 +1224,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
           listener: handleIdentifier(new, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, new)
+        listener: beginClassDeclaration(class, null, null, null, new)
         parseClass(new, class, class, new)
           parseClassHeaderOpt(new, class, class)
             parseClassExtendsOpt(new)
@@ -1254,16 +1254,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
           listener: handleIdentifier(null, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, null)
+        listener: beginClassDeclaration(class, null, null, null, null)
         parseClass(null, class, class, null)
           parseClassHeaderOpt(null, class, class)
             parseClassExtendsOpt(null)
@@ -1284,14 +1284,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, of)
+        listener: beginClassDeclaration(class, null, null, null, of)
         parseClass(of, class, class, of)
           parseClassHeaderOpt(of, class, class)
             parseClassExtendsOpt(of)
@@ -1312,14 +1312,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, on)
+        listener: beginClassDeclaration(class, null, null, null, on)
         parseClass(on, class, class, on)
           parseClassHeaderOpt(on, class, class)
             parseClassExtendsOpt(on)
@@ -1340,16 +1340,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, operator)
+        listener: beginClassDeclaration(class, null, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
@@ -1370,14 +1370,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, out)
+        listener: beginClassDeclaration(class, null, null, null, out)
         parseClass(out, class, class, out)
           parseClassHeaderOpt(out, class, class)
             parseClassExtendsOpt(out)
@@ -1398,16 +1398,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, part)
+        listener: beginClassDeclaration(class, null, null, null, part)
         parseClass(part, class, class, part)
           parseClassHeaderOpt(part, class, class)
             parseClassExtendsOpt(part)
@@ -1428,14 +1428,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, patch)
+        listener: beginClassDeclaration(class, null, null, null, patch)
         parseClass(patch, class, class, patch)
           parseClassHeaderOpt(patch, class, class)
             parseClassExtendsOpt(patch)
@@ -1456,16 +1456,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, required)
+        listener: beginClassDeclaration(class, null, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -1486,16 +1486,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
           listener: handleIdentifier(rethrow, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, rethrow)
+        listener: beginClassDeclaration(class, null, null, null, rethrow)
         parseClass(rethrow, class, class, rethrow)
           parseClassHeaderOpt(rethrow, class, class)
             parseClassExtendsOpt(rethrow)
@@ -1516,16 +1516,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
           listener: handleIdentifier(return, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, return)
+        listener: beginClassDeclaration(class, null, null, null, return)
         parseClass(return, class, class, return)
           parseClassHeaderOpt(return, class, class)
             parseClassExtendsOpt(return)
@@ -1546,16 +1546,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, set)
+        listener: beginClassDeclaration(class, null, null, null, set)
         parseClass(set, class, class, set)
           parseClassHeaderOpt(set, class, class)
             parseClassExtendsOpt(set)
@@ -1576,14 +1576,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, show)
+        listener: beginClassDeclaration(class, null, null, null, show)
         parseClass(show, class, class, show)
           parseClassHeaderOpt(show, class, class)
             parseClassExtendsOpt(show)
@@ -1604,14 +1604,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, source)
+        listener: beginClassDeclaration(class, null, null, null, source)
         parseClass(source, class, class, source)
           parseClassHeaderOpt(source, class, class)
             parseClassExtendsOpt(source)
@@ -1632,16 +1632,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, static)
+        listener: beginClassDeclaration(class, null, null, null, static)
         parseClass(static, class, class, static)
           parseClassHeaderOpt(static, class, class)
             parseClassExtendsOpt(static)
@@ -1662,16 +1662,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, super)
+        listener: beginClassDeclaration(class, null, null, null, super)
         parseClass(super, class, class, super)
           parseClassHeaderOpt(super, class, class)
             parseClassExtendsOpt(super)
@@ -1692,16 +1692,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
           listener: handleIdentifier(switch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, switch)
+        listener: beginClassDeclaration(class, null, null, null, switch)
         parseClass(switch, class, class, switch)
           parseClassHeaderOpt(switch, class, class)
             parseClassExtendsOpt(switch)
@@ -1722,14 +1722,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, sync)
+        listener: beginClassDeclaration(class, null, null, null, sync)
         parseClass(sync, class, class, sync)
           parseClassHeaderOpt(sync, class, class)
             parseClassExtendsOpt(sync)
@@ -1750,16 +1750,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
           listener: handleIdentifier(this, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, this)
+        listener: beginClassDeclaration(class, null, null, null, this)
         parseClass(this, class, class, this)
           parseClassHeaderOpt(this, class, class)
             parseClassExtendsOpt(this)
@@ -1780,16 +1780,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
           listener: handleIdentifier(throw, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, throw)
+        listener: beginClassDeclaration(class, null, null, null, throw)
         parseClass(throw, class, class, throw)
           parseClassHeaderOpt(throw, class, class)
             parseClassExtendsOpt(throw)
@@ -1810,16 +1810,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
           listener: handleIdentifier(true, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, true)
+        listener: beginClassDeclaration(class, null, null, null, true)
         parseClass(true, class, class, true)
           parseClassHeaderOpt(true, class, class)
             parseClassExtendsOpt(true)
@@ -1840,16 +1840,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
           listener: handleIdentifier(try, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, try)
+        listener: beginClassDeclaration(class, null, null, null, try)
         parseClass(try, class, class, try)
           parseClassHeaderOpt(try, class, class)
             parseClassExtendsOpt(try)
@@ -1870,16 +1870,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, typedef)
+        listener: beginClassDeclaration(class, null, null, null, typedef)
         parseClass(typedef, class, class, typedef)
           parseClassHeaderOpt(typedef, class, class)
             parseClassExtendsOpt(typedef)
@@ -1900,16 +1900,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
           listener: handleIdentifier(var, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, var)
+        listener: beginClassDeclaration(class, null, null, null, var)
         parseClass(var, class, class, var)
           parseClassHeaderOpt(var, class, class)
             parseClassExtendsOpt(var)
@@ -1930,16 +1930,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
           listener: handleIdentifier(void, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, void)
+        listener: beginClassDeclaration(class, null, null, null, void)
         parseClass(void, class, class, void)
           parseClassHeaderOpt(void, class, class)
             parseClassExtendsOpt(void)
@@ -1960,16 +1960,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
           listener: handleIdentifier(while, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, while)
+        listener: beginClassDeclaration(class, null, null, null, while)
         parseClass(while, class, class, while)
           parseClassHeaderOpt(while, class, class)
             parseClassExtendsOpt(while)
@@ -1990,16 +1990,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
           listener: handleIdentifier(with, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, with)
+        listener: beginClassDeclaration(class, null, null, null, with)
         parseClass(with, class, class, with)
           parseClassHeaderOpt(with, class, class)
             parseClassExtendsOpt(with)
@@ -2020,14 +2020,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, yield)
+        listener: beginClassDeclaration(class, null, null, null, yield)
         parseClass(yield, class, class, yield)
           parseClassHeaderOpt(yield, class, class)
             parseClassExtendsOpt(yield)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
index b29582c..c9c3900 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, abstract)
+    beginNamedMixinApplication(class, null, null, null, abstract)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -245,7 +245,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, as)
+    beginNamedMixinApplication(class, null, null, null, as)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -263,7 +263,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, assert)
+    beginNamedMixinApplication(class, null, null, null, assert)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -280,7 +280,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, async)
+    beginNamedMixinApplication(class, null, null, null, async)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -297,7 +297,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, await)
+    beginNamedMixinApplication(class, null, null, null, await)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -315,7 +315,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, break)
+    beginNamedMixinApplication(class, null, null, null, break)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -333,7 +333,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, case)
+    beginNamedMixinApplication(class, null, null, null, case)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -351,7 +351,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, catch)
+    beginNamedMixinApplication(class, null, null, null, catch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -369,7 +369,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, class)
+    beginNamedMixinApplication(class, null, null, null, class)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -387,7 +387,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, const)
+    beginNamedMixinApplication(class, null, null, null, const)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -405,7 +405,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, continue)
+    beginNamedMixinApplication(class, null, null, null, continue)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -423,7 +423,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, covariant)
+    beginNamedMixinApplication(class, null, null, null, covariant)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -441,7 +441,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, default)
+    beginNamedMixinApplication(class, null, null, null, default)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -459,7 +459,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, deferred)
+    beginNamedMixinApplication(class, null, null, null, deferred)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -477,7 +477,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, do)
+    beginNamedMixinApplication(class, null, null, null, do)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -495,7 +495,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, dynamic)
+    beginNamedMixinApplication(class, null, null, null, dynamic)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -513,7 +513,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, else)
+    beginNamedMixinApplication(class, null, null, null, else)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -531,7 +531,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, enum)
+    beginNamedMixinApplication(class, null, null, null, enum)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -549,7 +549,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, export)
+    beginNamedMixinApplication(class, null, null, null, export)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -567,7 +567,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, extends)
+    beginNamedMixinApplication(class, null, null, null, extends)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -585,7 +585,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, extension)
+    beginNamedMixinApplication(class, null, null, null, extension)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -603,7 +603,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, external)
+    beginNamedMixinApplication(class, null, null, null, external)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -621,7 +621,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, factory)
+    beginNamedMixinApplication(class, null, null, null, factory)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -639,7 +639,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, false)
+    beginNamedMixinApplication(class, null, null, null, false)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -657,7 +657,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, final)
+    beginNamedMixinApplication(class, null, null, null, final)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -675,7 +675,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, finally)
+    beginNamedMixinApplication(class, null, null, null, finally)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -693,7 +693,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, for)
+    beginNamedMixinApplication(class, null, null, null, for)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -710,7 +710,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, Function)
+    beginNamedMixinApplication(class, null, null, null, Function)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -728,7 +728,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, get)
+    beginNamedMixinApplication(class, null, null, null, get)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -745,7 +745,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, hide)
+    beginNamedMixinApplication(class, null, null, null, hide)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -763,7 +763,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, if)
+    beginNamedMixinApplication(class, null, null, null, if)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -781,7 +781,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, implements)
+    beginNamedMixinApplication(class, null, null, null, implements)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -799,7 +799,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, import)
+    beginNamedMixinApplication(class, null, null, null, import)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -817,7 +817,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, in)
+    beginNamedMixinApplication(class, null, null, null, in)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -834,7 +834,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, inout)
+    beginNamedMixinApplication(class, null, null, null, inout)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -852,7 +852,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, interface)
+    beginNamedMixinApplication(class, null, null, null, interface)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -870,7 +870,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, is)
+    beginNamedMixinApplication(class, null, null, null, is)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -888,7 +888,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, late)
+    beginNamedMixinApplication(class, null, null, null, late)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -906,7 +906,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, library)
+    beginNamedMixinApplication(class, null, null, null, library)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -924,7 +924,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, mixin)
+    beginNamedMixinApplication(class, null, null, null, mixin)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -941,7 +941,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, native)
+    beginNamedMixinApplication(class, null, null, null, native)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -959,7 +959,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, new)
+    beginNamedMixinApplication(class, null, null, null, new)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -977,7 +977,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, null)
+    beginNamedMixinApplication(class, null, null, null, null)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -994,7 +994,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, of)
+    beginNamedMixinApplication(class, null, null, null, of)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1011,7 +1011,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, on)
+    beginNamedMixinApplication(class, null, null, null, on)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1029,7 +1029,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, operator)
+    beginNamedMixinApplication(class, null, null, null, operator)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1046,7 +1046,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, out)
+    beginNamedMixinApplication(class, null, null, null, out)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1064,7 +1064,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, part)
+    beginNamedMixinApplication(class, null, null, null, part)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1081,7 +1081,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, patch)
+    beginNamedMixinApplication(class, null, null, null, patch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1099,7 +1099,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, required)
+    beginNamedMixinApplication(class, null, null, null, required)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1117,7 +1117,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, rethrow)
+    beginNamedMixinApplication(class, null, null, null, rethrow)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1135,7 +1135,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, return)
+    beginNamedMixinApplication(class, null, null, null, return)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1153,7 +1153,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, set)
+    beginNamedMixinApplication(class, null, null, null, set)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1170,7 +1170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, show)
+    beginNamedMixinApplication(class, null, null, null, show)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1187,7 +1187,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, source)
+    beginNamedMixinApplication(class, null, null, null, source)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1205,7 +1205,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, static)
+    beginNamedMixinApplication(class, null, null, null, static)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1223,7 +1223,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, super)
+    beginNamedMixinApplication(class, null, null, null, super)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1241,7 +1241,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, switch)
+    beginNamedMixinApplication(class, null, null, null, switch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1258,7 +1258,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, sync)
+    beginNamedMixinApplication(class, null, null, null, sync)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1276,7 +1276,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, this)
+    beginNamedMixinApplication(class, null, null, null, this)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1294,7 +1294,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, throw)
+    beginNamedMixinApplication(class, null, null, null, throw)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1312,7 +1312,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, true)
+    beginNamedMixinApplication(class, null, null, null, true)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1330,7 +1330,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, try)
+    beginNamedMixinApplication(class, null, null, null, try)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1348,7 +1348,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, typedef)
+    beginNamedMixinApplication(class, null, null, null, typedef)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1366,7 +1366,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, var)
+    beginNamedMixinApplication(class, null, null, null, var)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1384,7 +1384,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, void)
+    beginNamedMixinApplication(class, null, null, null, void)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1402,7 +1402,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, while)
+    beginNamedMixinApplication(class, null, null, null, while)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1420,7 +1420,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, with)
+    beginNamedMixinApplication(class, null, null, null, with)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1437,7 +1437,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, yield)
+    beginNamedMixinApplication(class, null, null, null, yield)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
index 732268f..2ae1f5a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, abstract)
+        listener: beginNamedMixinApplication(class, null, null, null, abstract)
         parseNamedMixinApplication(abstract, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -35,16 +35,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, as)
+        listener: beginNamedMixinApplication(class, null, null, null, as)
         parseNamedMixinApplication(as, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -64,16 +64,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
           listener: handleIdentifier(assert, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, assert)
+        listener: beginNamedMixinApplication(class, null, null, null, assert)
         parseNamedMixinApplication(assert, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -93,14 +93,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, async)
+        listener: beginNamedMixinApplication(class, null, null, null, async)
         parseNamedMixinApplication(async, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -120,14 +120,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, await)
+        listener: beginNamedMixinApplication(class, null, null, null, await)
         parseNamedMixinApplication(await, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -147,16 +147,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
           listener: handleIdentifier(break, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, break)
+        listener: beginNamedMixinApplication(class, null, null, null, break)
         parseNamedMixinApplication(break, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -176,16 +176,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
           listener: handleIdentifier(case, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, case)
+        listener: beginNamedMixinApplication(class, null, null, null, case)
         parseNamedMixinApplication(case, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -205,16 +205,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
           listener: handleIdentifier(catch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, catch)
+        listener: beginNamedMixinApplication(class, null, null, null, catch)
         parseNamedMixinApplication(catch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -234,16 +234,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
           listener: handleIdentifier(class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, class)
+        listener: beginNamedMixinApplication(class, null, null, null, class)
         parseNamedMixinApplication(class, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -263,16 +263,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
           listener: handleIdentifier(const, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, const)
+        listener: beginNamedMixinApplication(class, null, null, null, const)
         parseNamedMixinApplication(const, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -292,16 +292,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
           listener: handleIdentifier(continue, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, continue)
+        listener: beginNamedMixinApplication(class, null, null, null, continue)
         parseNamedMixinApplication(continue, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -321,16 +321,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, covariant)
+        listener: beginNamedMixinApplication(class, null, null, null, covariant)
         parseNamedMixinApplication(covariant, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -350,16 +350,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           listener: handleIdentifier(default, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, default)
+        listener: beginNamedMixinApplication(class, null, null, null, default)
         parseNamedMixinApplication(default, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -379,16 +379,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, deferred)
+        listener: beginNamedMixinApplication(class, null, null, null, deferred)
         parseNamedMixinApplication(deferred, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -408,16 +408,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
           listener: handleIdentifier(do, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, do)
+        listener: beginNamedMixinApplication(class, null, null, null, do)
         parseNamedMixinApplication(do, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -437,16 +437,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, dynamic)
+        listener: beginNamedMixinApplication(class, null, null, null, dynamic)
         parseNamedMixinApplication(dynamic, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -466,16 +466,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
           listener: handleIdentifier(else, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, else)
+        listener: beginNamedMixinApplication(class, null, null, null, else)
         parseNamedMixinApplication(else, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -495,16 +495,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
           listener: handleIdentifier(enum, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, enum)
+        listener: beginNamedMixinApplication(class, null, null, null, enum)
         parseNamedMixinApplication(enum, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -524,16 +524,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, export)
+        listener: beginNamedMixinApplication(class, null, null, null, export)
         parseNamedMixinApplication(export, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -553,16 +553,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
           listener: handleIdentifier(extends, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, extends)
+        listener: beginNamedMixinApplication(class, null, null, null, extends)
         parseNamedMixinApplication(extends, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -582,16 +582,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, extension)
+        listener: beginNamedMixinApplication(class, null, null, null, extension)
         parseNamedMixinApplication(extension, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -611,16 +611,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, external)
+        listener: beginNamedMixinApplication(class, null, null, null, external)
         parseNamedMixinApplication(external, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -640,16 +640,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, factory)
+        listener: beginNamedMixinApplication(class, null, null, null, factory)
         parseNamedMixinApplication(factory, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -669,16 +669,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
           listener: handleIdentifier(false, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, false)
+        listener: beginNamedMixinApplication(class, null, null, null, false)
         parseNamedMixinApplication(false, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -698,16 +698,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
           listener: handleIdentifier(final, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, final)
+        listener: beginNamedMixinApplication(class, null, null, null, final)
         parseNamedMixinApplication(final, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -727,16 +727,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
           listener: handleIdentifier(finally, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, finally)
+        listener: beginNamedMixinApplication(class, null, null, null, finally)
         parseNamedMixinApplication(finally, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -756,16 +756,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
           listener: handleIdentifier(for, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, for)
+        listener: beginNamedMixinApplication(class, null, null, null, for)
         parseNamedMixinApplication(for, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -785,14 +785,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, Function)
+        listener: beginNamedMixinApplication(class, null, null, null, Function)
         parseNamedMixinApplication(Function, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -812,16 +812,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, get)
+        listener: beginNamedMixinApplication(class, null, null, null, get)
         parseNamedMixinApplication(get, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -841,14 +841,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, hide)
+        listener: beginNamedMixinApplication(class, null, null, null, hide)
         parseNamedMixinApplication(hide, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -868,16 +868,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
           listener: handleIdentifier(if, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, if)
+        listener: beginNamedMixinApplication(class, null, null, null, if)
         parseNamedMixinApplication(if, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -897,16 +897,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, implements)
+        listener: beginNamedMixinApplication(class, null, null, null, implements)
         parseNamedMixinApplication(implements, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -926,16 +926,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, import)
+        listener: beginNamedMixinApplication(class, null, null, null, import)
         parseNamedMixinApplication(import, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -955,16 +955,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
           listener: handleIdentifier(in, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, in)
+        listener: beginNamedMixinApplication(class, null, null, null, in)
         parseNamedMixinApplication(in, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -984,14 +984,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, inout)
+        listener: beginNamedMixinApplication(class, null, null, null, inout)
         parseNamedMixinApplication(inout, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1011,16 +1011,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, interface)
+        listener: beginNamedMixinApplication(class, null, null, null, interface)
         parseNamedMixinApplication(interface, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1040,16 +1040,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
           listener: handleIdentifier(is, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, is)
+        listener: beginNamedMixinApplication(class, null, null, null, is)
         parseNamedMixinApplication(is, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1069,16 +1069,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, late)
+        listener: beginNamedMixinApplication(class, null, null, null, late)
         parseNamedMixinApplication(late, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1098,16 +1098,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, library)
+        listener: beginNamedMixinApplication(class, null, null, null, library)
         parseNamedMixinApplication(library, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1127,16 +1127,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, mixin)
+        listener: beginNamedMixinApplication(class, null, null, null, mixin)
         parseNamedMixinApplication(mixin, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1156,14 +1156,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, native)
+        listener: beginNamedMixinApplication(class, null, null, null, native)
         parseNamedMixinApplication(native, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1183,16 +1183,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
           listener: handleIdentifier(new, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, new)
+        listener: beginNamedMixinApplication(class, null, null, null, new)
         parseNamedMixinApplication(new, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1212,16 +1212,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
           listener: handleIdentifier(null, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, null)
+        listener: beginNamedMixinApplication(class, null, null, null, null)
         parseNamedMixinApplication(null, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1241,14 +1241,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, of)
+        listener: beginNamedMixinApplication(class, null, null, null, of)
         parseNamedMixinApplication(of, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1268,14 +1268,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, on)
+        listener: beginNamedMixinApplication(class, null, null, null, on)
         parseNamedMixinApplication(on, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1295,16 +1295,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, operator)
+        listener: beginNamedMixinApplication(class, null, null, null, operator)
         parseNamedMixinApplication(operator, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1324,14 +1324,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, out)
+        listener: beginNamedMixinApplication(class, null, null, null, out)
         parseNamedMixinApplication(out, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1351,16 +1351,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, part)
+        listener: beginNamedMixinApplication(class, null, null, null, part)
         parseNamedMixinApplication(part, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1380,14 +1380,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, patch)
+        listener: beginNamedMixinApplication(class, null, null, null, patch)
         parseNamedMixinApplication(patch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1407,16 +1407,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, required)
+        listener: beginNamedMixinApplication(class, null, null, null, required)
         parseNamedMixinApplication(required, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1436,16 +1436,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
           listener: handleIdentifier(rethrow, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, rethrow)
+        listener: beginNamedMixinApplication(class, null, null, null, rethrow)
         parseNamedMixinApplication(rethrow, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1465,16 +1465,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
           listener: handleIdentifier(return, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, return)
+        listener: beginNamedMixinApplication(class, null, null, null, return)
         parseNamedMixinApplication(return, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1494,16 +1494,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, set)
+        listener: beginNamedMixinApplication(class, null, null, null, set)
         parseNamedMixinApplication(set, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1523,14 +1523,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, show)
+        listener: beginNamedMixinApplication(class, null, null, null, show)
         parseNamedMixinApplication(show, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1550,14 +1550,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, source)
+        listener: beginNamedMixinApplication(class, null, null, null, source)
         parseNamedMixinApplication(source, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1577,16 +1577,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, static)
+        listener: beginNamedMixinApplication(class, null, null, null, static)
         parseNamedMixinApplication(static, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1606,16 +1606,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, super)
+        listener: beginNamedMixinApplication(class, null, null, null, super)
         parseNamedMixinApplication(super, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1635,16 +1635,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
           listener: handleIdentifier(switch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, switch)
+        listener: beginNamedMixinApplication(class, null, null, null, switch)
         parseNamedMixinApplication(switch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1664,14 +1664,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, sync)
+        listener: beginNamedMixinApplication(class, null, null, null, sync)
         parseNamedMixinApplication(sync, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1691,16 +1691,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
           listener: handleIdentifier(this, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, this)
+        listener: beginNamedMixinApplication(class, null, null, null, this)
         parseNamedMixinApplication(this, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1720,16 +1720,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
           listener: handleIdentifier(throw, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, throw)
+        listener: beginNamedMixinApplication(class, null, null, null, throw)
         parseNamedMixinApplication(throw, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1749,16 +1749,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
           listener: handleIdentifier(true, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, true)
+        listener: beginNamedMixinApplication(class, null, null, null, true)
         parseNamedMixinApplication(true, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1778,16 +1778,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
           listener: handleIdentifier(try, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, try)
+        listener: beginNamedMixinApplication(class, null, null, null, try)
         parseNamedMixinApplication(try, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1807,16 +1807,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, typedef)
+        listener: beginNamedMixinApplication(class, null, null, null, typedef)
         parseNamedMixinApplication(typedef, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1836,16 +1836,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
           listener: handleIdentifier(var, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, var)
+        listener: beginNamedMixinApplication(class, null, null, null, var)
         parseNamedMixinApplication(var, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1865,16 +1865,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
           listener: handleIdentifier(void, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, void)
+        listener: beginNamedMixinApplication(class, null, null, null, void)
         parseNamedMixinApplication(void, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1894,16 +1894,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
           listener: handleIdentifier(while, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, while)
+        listener: beginNamedMixinApplication(class, null, null, null, while)
         parseNamedMixinApplication(while, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1923,16 +1923,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
           listener: handleIdentifier(with, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, with)
+        listener: beginNamedMixinApplication(class, null, null, null, with)
         parseNamedMixinApplication(with, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1952,14 +1952,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, yield)
+        listener: beginNamedMixinApplication(class, null, null, null, yield)
         parseNamedMixinApplication(yield, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
index 4d447d1..2e8af5e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -20,7 +20,7 @@
     // WARNING: Reporting at eof for .
     handleIdentifier(, classOrMixinDeclaration)
     handleNoTypeVariables()
-    beginClassDeclaration(class, null, null, )
+    beginClassDeclaration(class, null, null, null, )
       handleNoType()
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
index 64a2d2b..d6e9761 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
@@ -18,7 +18,7 @@
             rewriter()
           listener: handleIdentifier(, classOrMixinDeclaration)
         listener: handleNoTypeVariables()
-        listener: beginClassDeclaration(class, null, null, )
+        listener: beginClassDeclaration(class, null, null, null, )
         parseClass(, class, class, )
           parseClassHeaderOpt(, class, class)
             parseClassExtendsOpt()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
index 63e8b06..b3a0c42 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -67,7 +67,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
index 08cfe6a..de02c36 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -73,14 +73,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
index a9ee40d..5833237 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
index 4ee602f..d014071 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
index 78cd4a8..bfba3a4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
index f5178bd..7c4babb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
index dad6879..9bd5718 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
index 058793d..7feff58 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
index fc06fb1..16793c9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
index 0f37588..8caa8f6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
index e10973c..5dbe0ee 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -82,7 +82,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -127,7 +127,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -199,7 +199,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
index fc2c4c6..31dd50e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -83,14 +83,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -197,14 +197,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
index 151c812..daa104d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
index 4c286fe..abf0da2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
index 673d794..bcdcfab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
@@ -138,7 +138,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
index c6060ad..c0bccc3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
index 34b8bbc..748134a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -478,7 +478,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 9e74712..afc8d96 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
index 5b96bf3..678fa33 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
index 0b284d4..2c4030a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
@@ -49,14 +49,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
index 68d9dd8..9f13282 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -28,7 +28,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -53,7 +53,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -75,7 +75,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -100,7 +100,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -122,7 +122,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -147,7 +147,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -167,7 +167,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -190,7 +190,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -210,7 +210,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -233,7 +233,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -255,7 +255,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -280,7 +280,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -302,7 +302,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -327,7 +327,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -349,7 +349,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -374,7 +374,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -396,7 +396,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -421,7 +421,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -443,7 +443,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -468,7 +468,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -490,7 +490,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -515,7 +515,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -537,7 +537,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -562,7 +562,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -584,7 +584,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -609,7 +609,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -631,7 +631,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -656,7 +656,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -678,7 +678,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -703,7 +703,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -725,7 +725,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -750,7 +750,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -772,7 +772,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -797,7 +797,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -819,7 +819,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -844,7 +844,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -866,7 +866,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -891,7 +891,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -913,7 +913,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -938,7 +938,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -960,7 +960,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -985,7 +985,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1007,7 +1007,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1032,7 +1032,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1054,7 +1054,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1079,7 +1079,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1101,7 +1101,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1126,7 +1126,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1148,7 +1148,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1173,7 +1173,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1195,7 +1195,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1220,7 +1220,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1242,7 +1242,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1267,7 +1267,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1289,7 +1289,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1314,7 +1314,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1336,7 +1336,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1361,7 +1361,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1381,7 +1381,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1404,7 +1404,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1426,7 +1426,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1451,7 +1451,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1473,7 +1473,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1498,7 +1498,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1520,7 +1520,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1545,7 +1545,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1567,7 +1567,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1592,7 +1592,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1612,7 +1612,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1635,7 +1635,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1657,7 +1657,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1682,7 +1682,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1704,7 +1704,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1729,7 +1729,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1751,7 +1751,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1776,7 +1776,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1798,7 +1798,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1823,7 +1823,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1845,7 +1845,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1870,7 +1870,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1890,7 +1890,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1913,7 +1913,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1935,7 +1935,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1960,7 +1960,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1982,7 +1982,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2007,7 +2007,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2027,7 +2027,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2050,7 +2050,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2070,7 +2070,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2093,7 +2093,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2115,7 +2115,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2140,7 +2140,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2160,7 +2160,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2183,7 +2183,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2205,7 +2205,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2230,7 +2230,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2250,7 +2250,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2273,7 +2273,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2295,7 +2295,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2320,7 +2320,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2342,7 +2342,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2367,7 +2367,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2389,7 +2389,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2414,7 +2414,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2436,7 +2436,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2461,7 +2461,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2481,7 +2481,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2504,7 +2504,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2524,7 +2524,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2547,7 +2547,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2569,7 +2569,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2594,7 +2594,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2616,7 +2616,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2641,7 +2641,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2663,7 +2663,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2688,7 +2688,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2708,7 +2708,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2731,7 +2731,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2753,7 +2753,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2778,7 +2778,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2800,7 +2800,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2825,7 +2825,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2847,7 +2847,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2872,7 +2872,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2894,7 +2894,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2919,7 +2919,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2941,7 +2941,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2966,7 +2966,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2988,7 +2988,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3013,7 +3013,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3035,7 +3035,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3103,7 +3103,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3125,7 +3125,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3150,7 +3150,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3172,7 +3172,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3197,7 +3197,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3217,7 +3217,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
index 38ec0b6..c39b30f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
index eaf2a2d..b0a3a8c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
index ce905c8..10aff81 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
index 74b3c11..5288b66 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
index fe1e36e..62126ec 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -52,7 +52,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(M1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, M1)
+    beginClassDeclaration(class, null, null, null, M1)
       handleNoType(M1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
index 86fc4d7..abde46a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -57,14 +57,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(M1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, M1)
+        listener: beginClassDeclaration(class, null, null, null, M1)
         parseClass(M1, class, class, M1)
           parseClassHeaderOpt(M1, class, class)
             parseClassExtendsOpt(M1)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
index 3f37bf0..e225c198 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
index 39d1b6c..34a44f1 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,7 +34,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.expect b/pkg/front_end/parser_testcases/extension_type.dart.expect
index 2eb3be8..316dfd7 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
index e59e494..8b81ba4 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,7 +34,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index 01e24a9..db73130 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
index 1394b80..ae84ff5 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
index 9f907a0..acf77e1 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
index fa98447..1632b2d 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index cb69c93..e697392 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
index ac55bc5..0148f29 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
index 8efa048..39a6f90 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
index ef95892..04b0090f 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
index c8d6b3b..6d8c4b0 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
index 1ec01c0..b1246df 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
index b89c4ab..3176b23 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
index 375106c..d938765 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
index 1615902..e5525f37 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -37,7 +37,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -72,7 +72,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -113,7 +113,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -158,7 +158,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -203,7 +203,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -248,7 +248,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -279,7 +279,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -314,7 +314,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -355,7 +355,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -400,7 +400,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -445,7 +445,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -490,7 +490,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -533,7 +533,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -580,7 +580,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -643,7 +643,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -710,7 +710,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -767,7 +767,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -824,7 +824,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -871,7 +871,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -922,7 +922,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -979,7 +979,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1040,7 +1040,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1101,7 +1101,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
index 9132fd3..98af14a 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(ConfigurationService, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, ConfigurationService)
+    beginClassDeclaration(class, null, null, null, ConfigurationService)
       handleNoType(ConfigurationService)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -275,7 +275,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Configuration, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Configuration)
+    beginClassDeclaration(class, null, null, null, Configuration)
       handleNoType(Configuration)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
index d392486..98f1cbf 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(ConfigurationService, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, ConfigurationService)
+        listener: beginClassDeclaration(class, null, null, null, ConfigurationService)
         parseClass(ConfigurationService, class, class, ConfigurationService)
           parseClassHeaderOpt(ConfigurationService, class, class)
             parseClassExtendsOpt(ConfigurationService)
@@ -511,14 +511,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Configuration, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Configuration)
+        listener: beginClassDeclaration(class, null, null, null, Configuration)
         parseClass(Configuration, class, class, Configuration)
           parseClassHeaderOpt(Configuration, class, class)
             parseClassExtendsOpt(Configuration)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
index 94b8325..ae4e0793 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
@@ -28,7 +28,7 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, null, typedef)
       listener: endMetadataStar(1)
-    parseTopLevelKeywordDeclaration(), typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(), typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
index b86186a..6e3fbf8d 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -107,7 +107,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
index 3432673..eedd4f5 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -228,14 +228,14 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(10)
-    parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -256,7 +256,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -343,7 +343,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -442,7 +442,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -547,7 +547,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -664,7 +664,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -796,7 +796,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -934,7 +934,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1063,7 +1063,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1201,7 +1201,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1342,7 +1342,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1713,14 +1713,14 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(9)
-    parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
index 419693a..3a2172f 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -147,7 +147,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, D)
+    beginClassDeclaration(class, null, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
index 5976ef9..1ffccf3 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -233,14 +233,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, D)
+        listener: beginClassDeclaration(class, null, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
index 5c996b6..bc4a1a8 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
index 21ad05a..74b0981 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
index 52352ee..3cbd7e4 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
@@ -11,7 +11,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, operator)
+    beginClassDeclaration(class, null, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
index 710f8db..bade773 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, operator)
+        listener: beginClassDeclaration(class, null, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart b/pkg/front_end/parser_testcases/macros/augment_class.dart
new file mode 100644
index 0000000..5164686
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart
@@ -0,0 +1,4 @@
+augment class Class {}
+abstract augment class Class {}
+augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.expect
new file mode 100644
index 0000000..58bcf95
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.expect
@@ -0,0 +1,66 @@
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(abstract, abstract, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(abstract, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(abstract, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(abstract, class, =, null, ;)
+  endTopLevelDeclaration()
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect
new file mode 100644
index 0000000..3fde810
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect
@@ -0,0 +1,118 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, augment, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, augment)
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, augment, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, augment, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, augment)
+        parseTopLevelKeywordModifiers(abstract, augment)
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(abstract, abstract, null, augment, Class)
+        parseClass(Class, abstract, class, Class)
+          parseClassHeaderOpt(Class, abstract, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(abstract, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(abstract, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, augment, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, augment)
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null, augment, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, augment, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, augment)
+        parseTopLevelKeywordModifiers(abstract, augment)
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+        parseNamedMixinApplication(Class, abstract, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(abstract, class, =, null, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect
new file mode 100644
index 0000000..7808f04
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect
@@ -0,0 +1,9 @@
+augment class Class {}
+abstract augment class Class {}
+augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect
new file mode 100644
index 0000000..7808f04
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect
@@ -0,0 +1,9 @@
+augment class Class {}
+abstract augment class Class {}
+augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
index 3198253..ddf0d81 100644
--- a/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, macro, Class)
+    beginClassDeclaration(class, null, macro, null, Class)
       handleNoType(Class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, macro, Class)
+    beginClassDeclaration(abstract, abstract, macro, null, Class)
       handleNoType(Class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, macro, Class)
+    beginNamedMixinApplication(class, null, macro, null, Class)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
@@ -51,7 +51,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(abstract, abstract, macro, Class)
+    beginNamedMixinApplication(abstract, abstract, macro, null, Class)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
index 08e38d8..4974091 100644
--- a/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(macro)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, macro, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, macro, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, macro)
-      parseClassOrNamedMixinApplication(null, macro, class)
+      parseClassOrNamedMixinApplication(null, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, macro, Class)
+        listener: beginClassDeclaration(class, null, macro, null, Class)
         parseClass(Class, class, class, Class)
           parseClassHeaderOpt(Class, class, class)
             parseClassExtendsOpt(Class)
@@ -34,15 +34,15 @@
     parseMetadataStar(})
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, macro, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, macro)
         parseTopLevelKeywordModifiers(abstract, macro)
-      parseClassOrNamedMixinApplication(abstract, macro, class)
+      parseClassOrNamedMixinApplication(abstract, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, macro, Class)
+        listener: beginClassDeclaration(abstract, abstract, macro, null, Class)
         parseClass(Class, abstract, class, Class)
           parseClassHeaderOpt(Class, abstract, class)
             parseClassExtendsOpt(Class)
@@ -63,14 +63,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(macro)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, macro, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, macro)
-      parseClassOrNamedMixinApplication(null, macro, class)
+      parseClassOrNamedMixinApplication(null, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, macro, Class)
+        listener: beginNamedMixinApplication(class, null, macro, null, Class)
         parseNamedMixinApplication(Class, class, class)
           listener: handleIdentifier(Object, typeReference)
           listener: handleNoTypeArguments(with)
@@ -90,15 +90,15 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, macro, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, macro, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, macro)
         parseTopLevelKeywordModifiers(abstract, macro)
-      parseClassOrNamedMixinApplication(abstract, macro, class)
+      parseClassOrNamedMixinApplication(abstract, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(abstract, abstract, macro, Class)
+        listener: beginNamedMixinApplication(abstract, abstract, macro, null, Class)
         parseNamedMixinApplication(Class, abstract, class)
           listener: handleIdentifier(Object, typeReference)
           listener: handleNoTypeArguments(with)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
index 048ba71..ba5aea7 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
@@ -58,7 +58,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, C)
+    beginClassDeclaration(abstract, abstract, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -170,7 +170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Bar)
+    beginClassDeclaration(abstract, abstract, null, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
index 525c27c..2025a5f 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, C)
+        listener: beginClassDeclaration(abstract, abstract, null, null, C)
         parseClass(C, abstract, class, C)
           parseClassHeaderOpt(C, abstract, class)
             parseClassExtendsOpt(C)
@@ -199,15 +199,15 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Bar)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Bar)
         parseClass(Bar, abstract, class, Bar)
           parseClassHeaderOpt(Bar, abstract, class)
             parseClassExtendsOpt(Bar)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
index 1542fd5..67ded7a9 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
@@ -64,7 +64,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
index 23beab2..b916c91 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
@@ -42,14 +42,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
index d9f84e6..7652df3 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
@@ -60,7 +60,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
index c5b6907..0a7ae0a 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
@@ -73,14 +73,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
index 9d5ae52..0a76358 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
index 4271b3d..5305604 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
index c583b3c..9827a7a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
index 4124e8f..6aa9c44 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
index 174b591..af79d78 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
index 281f0c0..6e787be 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
index 33dcf4a..281368d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
index 167db06..cfe6892 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
index 507ba0a..6a6108b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
index 2c7dd9e..a97196b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
index dc9c09c..3a21148 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
index b8addec..0ff88f6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
index b3f7815..8b9f461 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
index 884d7c4..0810c19 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
index 483e3af..813e919 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
index 1b44701..eb580a1 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
index a5a1d9f..ef765a7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
index a2fe16d..7d6fb48 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
index 151beb8..7a1ab34 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
index ea077fe..5fabee9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
index 3a0663e..19a89b2 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -72,7 +72,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
index 6ade11d..3164440 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
@@ -186,14 +186,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
index c107cbf..69cb262 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -308,7 +308,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Order, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Order)
+    beginClassDeclaration(class, null, null, null, Order)
       handleNoType(Order)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
index 263bcd9..e24d47e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
@@ -634,14 +634,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Order, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Order)
+        listener: beginClassDeclaration(class, null, null, null, Order)
         parseClass(Order, class, class, Order)
           parseClassHeaderOpt(Order, class, class)
             parseClassExtendsOpt(Order)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
index ec45784..971ab60 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
index 8fb9358..68fb06e 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
@@ -325,14 +325,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -417,14 +417,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
index 7d1c8bd..6cdeef3d 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -141,7 +141,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -179,7 +179,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
index 7c01aa3..e56b220 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
@@ -374,14 +374,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -466,14 +466,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
index 92ef663..0a7ab2c 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Class1)
+    beginClassDeclaration(class, null, null, null, Class1)
       handleNoType(Class1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
index d9b1e75..6e5e187 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Class1)
+        listener: beginClassDeclaration(class, null, null, null, Class1)
         parseClass(Class1, class, class, Class1)
           parseClassHeaderOpt(Class1, class, class)
             parseClassExtendsOpt(Class1)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
index 8f3bab8..c6c7235 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
index 8506b7e..3720001 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
@@ -325,14 +325,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -417,14 +417,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
index 9bd3e32..e5047d9 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -172,7 +172,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
index 7523c1c..ff4806f 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
@@ -341,14 +341,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -433,14 +433,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
index ded8c58..635226a 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
index e396b6a..f2bac28 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
index 5f001f3..5120ea6 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
index 6f0f152..8f13eb7 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
index 80b04fe..e3531de 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
@@ -94,7 +94,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(abstract, abstract, null, Foo)
+    beginClassDeclaration(abstract, abstract, null, null, Foo)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
index 3a379e4..24203cf 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, extension, null, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
@@ -206,15 +206,15 @@
     parseMetadataStar(})
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(abstract, abstract, null, Foo)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Foo)
         parseClass(Foo, abstract, class, Foo)
           parseClassHeaderOpt(Foo, abstract, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
index 667962a..ba8b0bb 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, late)
+    beginClassDeclaration(class, null, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, required)
+    beginClassDeclaration(class, null, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
index c89a6b0..9ddff86 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, late)
+        listener: beginClassDeclaration(class, null, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -71,14 +71,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, required)
+        listener: beginClassDeclaration(class, null, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -136,14 +136,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
index d54d704..369e04b 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xlate, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Xlate)
+    beginClassDeclaration(class, null, null, null, Xlate)
       handleNoType(Xlate)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xrequired, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Xrequired)
+    beginClassDeclaration(class, null, null, null, Xrequired)
       handleNoType(Xrequired)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
index b03a234..0b0d21f 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xlate, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Xlate)
+        listener: beginClassDeclaration(class, null, null, null, Xlate)
         parseClass(Xlate, class, class, Xlate)
           parseClassHeaderOpt(Xlate, class, class)
             parseClassExtendsOpt(Xlate)
@@ -71,14 +71,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xrequired, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Xrequired)
+        listener: beginClassDeclaration(class, null, null, null, Xrequired)
         parseClass(Xrequired, class, class, Xrequired)
           parseClassHeaderOpt(Xrequired, class, class)
             parseClassExtendsOpt(Xrequired)
@@ -136,14 +136,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
index 5c1d956..5cee3c6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
@@ -12,7 +12,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -27,7 +27,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables(implements)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
index 16f17a7..6930e59 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -42,14 +42,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables(implements)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
index 285a104..0b8fbe1 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
@@ -246,7 +246,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
index 3841fa7..80ccd4a 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
@@ -335,14 +335,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
index fb681d6..11a0ddd 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
@@ -125,7 +125,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
index f214652..bfc0623 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
@@ -253,14 +253,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 787ad86..9db87a4 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -95,7 +95,8 @@
                     new NoneTarget(new TargetFlags())),
                 uriTranslator)
             .loader,
-        isUnsupported: false);
+        isUnsupported: false,
+        isAugmentation: false);
     libraryBuilder.markLanguageVersionFinal();
     LoadLibraryBuilder loadLibraryBuilder =
         new LoadLibraryBuilder(libraryBuilder, dummyLibraryDependency, -1);
diff --git a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
index 5f4db94..d1a5810 100644
--- a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
+++ b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
@@ -51,7 +51,8 @@
         name, new DeclarationCode.fromParts(['''
 class $name {
   external ''', function.returnType.code, ''' method();
-}''']));
+}'''
+    ]));
   }
 }
 
@@ -129,8 +130,14 @@
     if (method.isSetter) {
       sb.write('s');
     }
+    String name;
+    if (method.isOperator) {
+      name = 'operator';
+    } else {
+      name = method.identifier.name;
+    }
     builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${method.definingClass.name}_${method.identifier.name}GeneratedMethod_${sb}() {}
+void ${method.definingClass.name}_${name}GeneratedMethod_${sb}() {}
 '''));
   }
 }
@@ -288,3 +295,49 @@
 '''));
   }
 }
+
+macro
+
+class ToStringMacro implements ClassDeclarationsMacro {
+  const ToStringMacro();
+
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    if (!methods.any((m) => m.identifier.name == 'toString')) {
+      Iterable<FieldDeclaration> fields = await builder.fieldsOf(clazz);
+      List<Object> parts = ['''
+  toString() {
+    return "${clazz.identifier.name}('''];
+      String comma = '';
+      for (FieldDeclaration field in fields) {
+        parts.add(comma);
+        parts.add('${field.identifier.name}=\${');
+        parts.add(field.identifier.name);
+        parts.add('}');
+        comma = ',';
+    }
+    parts.add(''')";
+  }''');
+      builder.declareInClass(new DeclarationCode.fromParts(parts));
+    }
+  }
+}
+
+macro
+class SequenceMacro implements ClassDeclarationsMacro {
+  const SequenceMacro();
+
+  FutureOr<void> buildDeclarationsForClass(
+      ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    int index = 0;
+    String suffix = '';
+    while (methods.any((m) => m.identifier.name == 'method$suffix')) {
+      index++;
+      suffix = '$index';
+    }
+    builder.declareInClass(new DeclarationCode.fromString('''
+  method$suffix() {}'''));
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macro_application/data/tests/declarations.dart b/pkg/front_end/test/macro_application/data/tests/declarations.dart
index dfed26d..7a69a25 100644
--- a/pkg/front_end/test/macro_application/data/tests/declarations.dart
+++ b/pkg/front_end/test/macro_application/data/tests/declarations.dart
@@ -112,7 +112,7 @@
   void set instanceSetter1(int? value) {}
 
   /*member: Class1.[]:
-void Class1_[]GeneratedMethod_o() {}
+void Class1_operatorGeneratedMethod_o() {}
 */
   @MethodDeclarationsMacro1()
   int operator [](int i) => i;
diff --git a/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect b/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect
index 786028f..dfe99d0 100644
--- a/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect
+++ b/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect
@@ -19,6 +19,9 @@
   constructor •() → self::Class1
     : super core::Object::•()
     ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-18 */ Class1_GeneratedMethod_() → void {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-19 */ Class1_redirectGeneratedMethod_f() → void {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-20 */ Class1_factGeneratedMethod_f() → void {}
   @#C5
   static factory redirect() → self::Class1
     return new self::Class1::•();
@@ -68,6 +71,35 @@
   return null;
 @#C8
 static set topLevelSetter1(core::int? value) → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ topLevelFunction1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ topLevelFunction2GeneratedMethod_e() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ topLevelField1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelField2GeneratedMethod_e() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ topLevelField3GeneratedMethod_f() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ topLevelField4GeneratedMethod_l() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-7 */ topLevelGetter1GeneratedMethod_g() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-8 */ topLevelSetter1GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-9 */ Class1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-10 */ Class1Introspection() → void {
+  core::print("constructors=''");
+  core::print("fields='instanceField1','instanceField2','instanceField3'");
+  core::print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1'");
+}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ Class1_instanceMethod1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-12 */ Class1_instanceGetter1GeneratedMethod_g() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-13 */ Class1_operatorGeneratedMethod_o() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-14 */ Class1_instanceField1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-15 */ Class1_instanceField2GeneratedMethod_f() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-16 */ Class1_instanceField3GeneratedMethod_fl() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ Class1_instanceSetter1GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-21 */ Class2GeneratedMethod_a() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-22 */ Class2Introspection() → void {
+  core::print("constructors=");
+  core::print("fields='instanceField1'");
+  core::print("methods='instanceMethod1'");
+}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-23 */ Class2_instanceMethod1GeneratedMethod_a() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-24 */ Class2_instanceField1GeneratedMethod_() → void {}
 
 constants  {
   #C1 = mac::ClassDeclarationsMacro1 {}
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart b/pkg/front_end/test/macro_application/data/tests/sequence.dart
new file mode 100644
index 0000000..785b423
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/sequence.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+
+
+*/
+
+import 'package:macro/macro.dart';
+
+@SequenceMacro()
+/*class: Class1:
+augment class Class1 {
+  method() {}
+}*/
+class Class1 {}
+
+@SequenceMacro()
+@SequenceMacro()
+/*class: Class2:
+augment class Class2 {
+  method() {}
+}
+augment class Class2 {
+  method1() {}
+}*/
+class Class2 {}
+
+@SequenceMacro()
+/*class: Class3:
+augment class Class3 {
+  method1() {}
+}*/
+class Class3 {
+  method() {}
+}
+
+@SequenceMacro()
+@SequenceMacro()
+@SequenceMacro()
+/*class: Class4:
+augment class Class4 {
+  method1() {}
+}
+augment class Class4 {
+  method3() {}
+}
+augment class Class4 {
+  method4() {}
+}*/
+class Class4 {
+  method() {}
+  method2() {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect b/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect
new file mode 100644
index 0000000..263cee0
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ method() → dynamic {}
+}
+@#C1
+@#C1
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ method() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ method1() → dynamic {}
+}
+@#C1
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ method1() → dynamic {}
+  method method() → dynamic {}
+}
+@#C1
+@#C1
+@#C1
+class Class4 extends core::Object {
+  synthetic constructor •() → self::Class4
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ method1() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ method3() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-7 */ method4() → dynamic {}
+  method method() → dynamic {}
+  method method2() → dynamic {}
+}
+
+constants  {
+  #C1 = mac::SequenceMacro {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect b/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect
index d428183..07374b2 100644
--- a/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect
+++ b/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect
@@ -52,6 +52,10 @@
 @#C1
 @#C2
 external static method topLevelFunction4(self::D1 a) → self::D2;
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ topLevelFunction1GeneratedMethod_es() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ topLevelFunction2GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ topLevelFunction3GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelFunction4GeneratedMethod_() → void {}
 
 constants  {
   #C1 = mac::FunctionDeclarationsMacro2 {}
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart b/pkg/front_end/test/macro_application/data/tests/to_string.dart
new file mode 100644
index 0000000..b5327e5
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/to_string.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+
+
+*/
+
+import 'package:macro/macro.dart';
+
+@ToStringMacro()
+/*class: A:
+augment class A {
+  toString() {
+    return "A(a=${a},b=${b})";
+  }
+}*/
+class A {
+  var a;
+  var b;
+}
+
+@ToStringMacro()
+/*class: B:
+augment class B {
+  toString() {
+    return "B(c=${c},d=${d},e=${e})";
+  }
+}*/
+class B {
+  var c, d;
+  var e;
+}
+
+@ToStringMacro()
+class C {
+  var f;
+
+  @override
+  String toString() => 'C()';
+}
+
+class D {
+  var g;
+  var h;
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect b/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect
new file mode 100644
index 0000000..431c8a2
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class A extends core::Object {
+  field dynamic a = null;
+  field dynamic b = null;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ toString() → dynamic {
+    return "A(a=${this.{self::A::a}{dynamic}},b=${this.{self::A::b}{dynamic}})";
+  }
+}
+@#C1
+class B extends core::Object {
+  field dynamic c = null;
+  field dynamic d = null;
+  field dynamic e = null;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ toString() → dynamic {
+    return "B(c=${this.{self::B::c}{dynamic}},d=${this.{self::B::d}{dynamic}},e=${this.{self::B::e}{dynamic}})";
+  }
+}
+@#C1
+class C extends core::Object {
+  field dynamic f = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  @#C2
+  method toString() → core::String
+    return "C()";
+}
+class D extends core::Object {
+  field dynamic g = null;
+  field dynamic h = null;
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = mac::ToStringMacro {}
+  #C2 = core::_Override {}
+}
diff --git a/pkg/front_end/test/macro_application/macro_application_test.dart b/pkg/front_end/test/macro_application/macro_application_test.dart
index fd317c7..647c544 100644
--- a/pkg/front_end/test/macro_application/macro_application_test.dart
+++ b/pkg/front_end/test/macro_application/macro_application_test.dart
@@ -184,7 +184,9 @@
         in macroApplicationData.classTypesResults.entries) {
       if (entry.key.cls == cls) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          if (result.augmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.augmentations.first)}');
+          }
         }
       }
     }
@@ -192,7 +194,9 @@
         in macroApplicationData.classDeclarationsResults.entries) {
       if (entry.key.cls == cls) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          if (result.augmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.augmentations.first)}');
+          }
         }
       }
     }
@@ -200,7 +204,9 @@
         in macroApplicationData.classDefinitionsResults.entries) {
       if (entry.key.cls == cls) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          if (result.augmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.augmentations.first)}');
+          }
         }
       }
     }
diff --git a/pkg/front_end/test/macros/data/tests/macro_declarations.dart b/pkg/front_end/test/macros/data/tests/macro_declarations.dart
index c780d61..1ddcfd5 100644
--- a/pkg/front_end/test/macros/data/tests/macro_declarations.dart
+++ b/pkg/front_end/test/macros/data/tests/macro_declarations.dart
@@ -38,20 +38,20 @@
 
 macro class MixinAlias with Alias {}
 
-class ExtendsNoKeyword extends Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/ExtendsNoKeyword extends Macro {}
 
-class ImplementsNoKeyword implements Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/ImplementsNoKeyword implements Macro {}
 
-class MixinNoKeyword with Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/MixinNoKeyword with Macro {}
 
-class ExtendsAliasNoKeyword extends Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/ExtendsAliasNoKeyword extends Alias {}
 
-class ImplementsAliasNoKeyword implements Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/ImplementsAliasNoKeyword implements Alias {}
 
-class MixinAliasNoKeyword with Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/MixinAliasNoKeyword with Alias {}
 
-class NamedMixin1NoKeyword = Macro with _Mixin;
+class /*error: error=MacroClassNotDeclaredMacro*/NamedMixin1NoKeyword = Macro with _Mixin;
 
-class NamedMixin2NoKeyword = Object with Macro;
+class /*error: error=MacroClassNotDeclaredMacro*/NamedMixin2NoKeyword = Object with Macro;
 
 void main() {}
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index e583b6b..a20eaf2 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -17,6 +17,7 @@
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/kernel/macro.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
+import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Arguments;
 
 Future<void> main(List<String> args) async {
@@ -78,6 +79,17 @@
   }
 
   @override
+  bool get supportsErrors => true;
+
+  @override
+  Features? computeErrorData(
+      TestResultData testResultData, Id id, List<FormattedMessage> errors) {
+    Features features = new Features();
+    features[Tags.error] = errorsToText(errors, useCodes: true);
+    return features;
+  }
+
+  @override
   DataInterpreter<Features> get dataValidator =>
       const FeaturesDataInterpreter();
 }
@@ -91,6 +103,7 @@
   static const String appliedMacros = 'appliedMacros';
   static const String macroClassIds = 'macroClassIds';
   static const String macroInstanceIds = 'macroInstanceIds';
+  static const String error = 'error';
 }
 
 String constructorNameToString(String constructorName) {
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 65979d9..15419a6 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -199,16 +199,18 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     seen(begin);
     seen(abstractToken);
     seen(macroToken);
+    seen(augmentToken);
     seen(name);
     doPrint('beginClassDeclaration('
         '$begin, '
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$name)');
     indent++;
   }
@@ -1022,16 +1024,18 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     seen(begin);
     seen(abstractToken);
     seen(macroToken);
+    seen(augmentToken);
     seen(name);
     doPrint('beginNamedMixinApplication('
         '$begin, '
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$name)');
     indent++;
   }
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index 61ba320..4fbb032 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -126,8 +126,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 9a545e4..633d008 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -189,16 +189,21 @@
   }
 
   @override
-  Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
-      Token? macroToken, DirectiveContext? directiveState) {
+  Token parseTopLevelKeywordDeclaration(
+      Token start,
+      Token keyword,
+      Token? macroToken,
+      Token? augmentToken,
+      DirectiveContext? directiveState) {
     doPrint('parseTopLevelKeywordDeclaration('
         '$start, '
         '$keyword, '
         '$macroToken, '
+        '$augmentToken, '
         '$directiveState)');
     indent++;
     var result = super.parseTopLevelKeywordDeclaration(
-        start, keyword, macroToken, directiveState);
+        start, keyword, macroToken, augmentToken, directiveState);
     indent--;
     return result;
   }
@@ -583,15 +588,16 @@
   }
 
   @override
-  Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token? macroToken, Token classKeyword) {
+  Token parseClassOrNamedMixinApplication(Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token classKeyword) {
     doPrint('parseClassOrNamedMixinApplication('
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$classKeyword)');
     indent++;
     var result = super.parseClassOrNamedMixinApplication(
-        abstractToken, macroToken, classKeyword);
+        abstractToken, macroToken, augmentToken, classKeyword);
     indent--;
     return result;
   }
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 37c6c0c..856d485 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -111,8 +111,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Parser") insideParserClass = true;
   }
 
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 9828fd4..e49039c 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -12,7 +12,10 @@
 import 'package:front_end/src/fasta/builder/builder.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/source/source_class_builder.dart';
+import 'package:front_end/src/fasta/source/source_constructor_builder.dart';
+import 'package:front_end/src/fasta/source/source_factory_builder.dart';
 import 'package:front_end/src/fasta/source/source_member_builder.dart';
+import 'package:front_end/src/fasta/source/source_procedure_builder.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
@@ -171,8 +174,17 @@
     SourceMemberBuilder? memberBuilder =
         lookupMemberBuilder(compilerResult, member, required: false)
             as SourceMemberBuilder?;
-    MemberBuilder? patchMember = memberBuilder?.dataForTesting?.patchForTesting;
-    if (patchMember != null) {
+    List<MemberBuilder>? patchMembers;
+    if (memberBuilder is SourceProcedureBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (memberBuilder is DeclaredSourceConstructorBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (memberBuilder is SourceFactoryBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (patchMembers != null) {
       features.add(Tags.patch);
     }
 
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 3230d25..e6964cd 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -45,6 +45,7 @@
 libraries.json
 list.filled
 loadlibrary
+macro
 migrate
 name.#name
 name.stack
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
index aaa0017..739da7f 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -45,7 +45,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -58,7 +58,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
index cda03dd..2aa57c8 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
@@ -23,12 +23,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
         self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
         self::expect(0, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
         self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in let final core::int* #t5 = 0 in let final core::int* #t6 = 42 in let final void #t7 = def::Extension|set#property(#t5, #t6) in #t6);
@@ -46,7 +46,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -100,4 +100,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:31 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
-Extra constant evaluation: evaluated: 92, effectively constant: 3
+Extra constant evaluation: evaluated: 91, effectively constant: 3
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
index 52535cd..f4d6fd7 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
@@ -15,12 +15,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
         self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
         self::expect(42, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
         self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
@@ -37,7 +37,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
index 4b96489..bba287b 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -30,7 +30,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -42,7 +42,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -57,7 +57,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -112,7 +112,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -125,8 +125,8 @@
             return null;
           else
             [yield] null;
-          [yield] let dynamic #t1 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error, :async_op) in null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::String*>(:result)){(core::String*) → core::bool})
+          [yield] let dynamic #t1 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
+          if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::String*>(:result_or_exception)){(core::String*) → core::bool})
             return null;
           else
             [yield] null;
@@ -154,7 +154,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -187,12 +187,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error, :async_op) in null;
-        core::String* str = _in::unsafeCast<core::String*>(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
+        core::String* str = _in::unsafeCast<core::String*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -202,7 +202,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
index 3100e06..2ccc693 100644
--- a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
@@ -15,30 +15,30 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnsString(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::String>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnsFutureOrString(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::String>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnsAwaitFutureOrString(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::String>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnsFutureString(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::String>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnsAwaitFutureString(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::String>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnsObject(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::Object>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnsFutureOrObject(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::Object>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnsAwaitFutureOrObject(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::Object>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnsFutureObject(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::Object>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnsAwaitFutureObject(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::Object>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnsString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnsFutureOrString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnsAwaitFutureOrString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnsFutureString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnsAwaitFutureString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnsObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnsFutureOrObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnsAwaitFutureOrObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnsFutureObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnsAwaitFutureObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -48,7 +48,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -60,7 +60,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -75,7 +75,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -87,7 +87,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -102,7 +102,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -115,12 +115,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::getFutureOr<core::String>("a"), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = _in::unsafeCast<core::String>(:result);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::getFutureOr<core::String>("a"), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
         break #L4;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -131,7 +131,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -143,7 +143,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -158,7 +158,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -171,12 +171,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::getFuture<core::String>("a"), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = _in::unsafeCast<core::String>(:result);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::getFuture<core::String>("a"), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
         break #L6;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -187,7 +187,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -199,7 +199,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -214,7 +214,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -226,7 +226,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L8:
       {
@@ -241,7 +241,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -254,12 +254,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L9:
       {
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::getFutureOr<core::Object>(new core::Object::•()), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = _in::unsafeCast<core::Object>(:result);
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::getFutureOr<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
         break #L9;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -270,7 +270,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -282,7 +282,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L10:
       {
@@ -297,7 +297,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -310,12 +310,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L11:
       {
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::getFuture<core::Object>(new core::Object::•()), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = _in::unsafeCast<core::Object>(:result);
+        [yield] let dynamic #t14 = asy::_awaitHelper(self::getFuture<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
         break #L11;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -326,7 +326,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -338,7 +338,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L12:
       {
@@ -353,7 +353,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -365,7 +365,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L13:
       {
@@ -380,7 +380,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
index 7e77550..ae5f661 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
index ef502e2..3a4b166 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
@@ -39,23 +39,23 @@
   self::Node* :async_temporary_0;
   self::Node* :async_temporary_1;
   self::Node* :async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         core::String* expected = "1 2 3 4 5 6 7 8 9 10";
         :async_temporary_2 = new self::Node::•("2", core::_GrowableList::•<self::Node*>(0));
-        [yield] let dynamic #t4 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("7", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t5 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result)))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_1 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("8", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("9", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t8 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node*>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_1), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result)))))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t9 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result)))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        self::Node* node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_2), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result)));
+        [yield] let dynamic #t4 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("7", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t5 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
+        :async_temporary_1 = _in::unsafeCast<self::Node*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("8", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("9", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t8 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node*>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_1), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result_or_exception)))))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t9 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error) in null;
+        self::Node* node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_2), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result_or_exception)));
         core::String* actual = node.{self::Node::toSimpleString}(){() →* dynamic} as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
@@ -70,7 +70,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
index 7fd936b..e7bee2f 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
@@ -13,12 +13,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper("Hello, World!", :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<core::String*>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper("Hello, World!", :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::String*>(:result_or_exception));
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -28,7 +28,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
index 22900f0..a29ca5f 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
@@ -71,33 +71,33 @@
   core::int* :async_temporary_3;
   core::int* :async_temporary_4;
   core::int* :async_temporary_5;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :async_temporary_0 = self::C::staticField;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* f = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num*) →* core::int*}.{core::num::+}(self::C::staticSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::C::staticFoo(1)){(core::num*) →* core::int*};
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_5).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_5).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -108,7 +108,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -126,29 +126,29 @@
   core::int* :async_temporary_2;
   core::int* :async_temporary_3;
   core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num*) →* core::int*}.{core::num::+}(self::topLevelSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::topLevelFoo(1)){(core::num*) →* core::int*};
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,7 +159,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -177,30 +177,30 @@
   core::int* :async_temporary_2;
   core::int* :async_temporary_3;
   core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field}{core::int*};
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter}{core::int*};
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1){(core::int*) →* core::int*};
-        [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}{core::int*}.{core::num::+}(inst.{self::C::getter}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::setter} = 1){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::foo}(1){(core::int*) →* core::int*}){(core::num*) →* core::int*};
-        [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -211,7 +211,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -229,30 +229,30 @@
   core::int* :async_temporary_2;
   core::List<core::int*>* :async_temporary_3;
   core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
         :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = "${_in::unsafeCast<core::int*>(:async_temporary_0)} ${:result} ";
-        [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error, :async_op) in null;
-        core::String* a = _in::unsafeCast<core::String*>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String*>(:result)){(core::String*) →* core::String*};
+        [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = "${_in::unsafeCast<core::int*>(:async_temporary_0)} ${:result_or_exception} ";
+        [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error) in null;
+        core::String* a = _in::unsafeCast<core::String*>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String*>(:result_or_exception)){(core::String*) →* core::String*};
         self::expect("1 1 someString", a);
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field}{core::int*};
-        [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         core::int* cnt = 2;
         core::List<core::int*>* b = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
-        [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::List<core::int*>*>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int*>(:async_temporary_2), :result as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
+        [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::List<core::int*>*>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int*>(:async_temporary_2), :result_or_exception as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
         self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
         :async_temporary_4 = b.{core::List::[]}(0){(core::int*) →* core::int*};
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, e);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -263,7 +263,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -281,7 +281,7 @@
   dynamic :async_temporary_1;
   dynamic :async_temporary_2;
   dynamic :async_temporary_3;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -291,8 +291,8 @@
         if(_in::unsafeCast<core::bool*>(:async_temporary_0))
           ;
         else {
-          [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = :result as{TypeError,ForDynamic} core::bool* =={core::Object::==}{(core::Object) → core::bool} true;
+          [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_0 = :result_or_exception as{TypeError,ForDynamic} core::bool* =={core::Object::==}{(core::Object) → core::bool} true;
         }
         core::bool* c = _in::unsafeCast<core::bool*>(:async_temporary_0);
         self::expect(true, c);
@@ -300,14 +300,14 @@
           :async_temporary_1 = a;
         }
         else {
-          [yield] let dynamic #t23 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = :result;
+          [yield] let dynamic #t23 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_1 = :result_or_exception;
         }
         dynamic d = :async_temporary_1;
         self::expect(false, d);
         if(a is core::int*) {
-          [yield] let dynamic #t24 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_2 = :result;
+          [yield] let dynamic #t24 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_2 = :result_or_exception;
         }
         else {
           :async_temporary_2 = 2;
@@ -316,8 +316,8 @@
         self::expect(2, e);
         try {
           if(a is core::int*) {
-            [yield] let dynamic #t25 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_3 = :result;
+            [yield] let dynamic #t25 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+            :async_temporary_3 = :result_or_exception;
           }
           else {
             :async_temporary_3 = 2;
@@ -335,7 +335,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -349,7 +349,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -360,34 +360,34 @@
             {
               final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t26 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
               assert {
-                [yield] let dynamic #t27 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                assert(_in::unsafeCast<core::bool*>(:result));
+                [yield] let dynamic #t27 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+                assert(_in::unsafeCast<core::bool*>(:result_or_exception));
               }
               assert {
                 if(self::id<core::bool*>(true) as{TypeError} core::bool*)
                   ;
                 else {
-                  [yield] let dynamic #t28 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  assert(false, _in::unsafeCast<core::String*>(:result));
+                  [yield] let dynamic #t28 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error) in null;
+                  assert(false, _in::unsafeCast<core::String*>(:result_or_exception));
                 }
               }
               assert {
-                [yield] let dynamic #t29 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool*>(:result))
+                [yield] let dynamic #t29 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool*>(:result_or_exception))
                   ;
                 else {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  assert(false, _in::unsafeCast<core::String*>(:result));
+                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error) in null;
+                  assert(false, _in::unsafeCast<core::String*>(:result_or_exception));
                 }
               }
               try {
                 assert {
-                  [yield] let dynamic #t31 = asy::_awaitHelper(func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  if(_in::unsafeCast<core::bool*>(:result))
+                  [yield] let dynamic #t31 = asy::_awaitHelper(func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+                  if(_in::unsafeCast<core::bool*>(:result_or_exception))
                     ;
                   else {
-                    [yield] let dynamic #t32 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    assert(false, _in::unsafeCast<core::String*>(:result));
+                    [yield] let dynamic #t32 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error) in null;
+                    assert(false, _in::unsafeCast<core::String*>(:result_or_exception));
                   }
                 }
                 if(self::assertStatementsEnabled)
@@ -408,7 +408,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -428,7 +428,7 @@
   dynamic :stack_trace0;
   core::List<dynamic>* :async_temporary_0;
   core::List<dynamic>* :async_temporary_1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -447,16 +447,16 @@
                   core::int* i;
                   if(#t34) {
                     #t34 = false;
-                    [yield] let dynamic #t36 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    i = _in::unsafeCast<core::int*>(:result);
+                    [yield] let dynamic #t36 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                    i = _in::unsafeCast<core::int*>(:result_or_exception);
                   }
                   else {
                     i = #t35;
-                    [yield] let dynamic #t37 = asy::_awaitHelper(func<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1){(core::num*) →* core::int*} in #t38){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    _in::unsafeCast<core::int*>(:result);
+                    [yield] let dynamic #t37 = asy::_awaitHelper(func<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1){(core::num*) →* core::int*} in #t38){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                    _in::unsafeCast<core::int*>(:result_or_exception);
                   }
-                  [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  if(_in::unsafeCast<core::bool*>(:result)) {
+                  [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+                  if(_in::unsafeCast<core::bool*>(:result_or_exception)) {
                     {
                       c = c.{core::num::+}(1){(core::num*) →* core::int*};
                     }
@@ -470,8 +470,8 @@
               c = 0;
               #L9:
               while (true) {
-                [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool*>(:result))
+                [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool*>(:result_or_exception))
                   c = c.{core::num::+}(1){(core::num*) →* core::int*};
                 else
                   break #L9;
@@ -480,26 +480,26 @@
               c = 0;
               do {
                 c = c.{core::num::+}(1){(core::num*) →* core::int*};
-                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
               }
-              while (_in::unsafeCast<core::bool*>(:result))
+              while (_in::unsafeCast<core::bool*>(:result_or_exception))
               self::expect(5, c);
-              [yield] let dynamic #t43 = asy::_awaitHelper(func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool*>(:result)) {
+              [yield] let dynamic #t43 = asy::_awaitHelper(func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool*>(:result_or_exception)) {
                 self::expect(5, c);
               }
               else {
                 throw "unreachable";
               }
               try {
-                [yield] let dynamic #t44 = asy::_awaitHelper(func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                throw _in::unsafeCast<core::String*>(:result);
+                [yield] let dynamic #t44 = asy::_awaitHelper(func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error) in null;
+                throw _in::unsafeCast<core::String*>(:result_or_exception);
               }
               on core::String* catch(no-exception-var) {
               }
               try {
-                [yield] let dynamic #t45 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<Never*>(:result);
+                [yield] let dynamic #t45 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error) in null;
+                _in::unsafeCast<Never*>(:result_or_exception);
               }
               on core::String* catch(no-exception-var) {
               }
@@ -511,28 +511,28 @@
                     }
                     on dynamic catch(final dynamic e) {
                       self::expect("string", e);
-                      [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                      self::expect(0, _in::unsafeCast<core::int*>(:result));
+                      [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                      self::expect(0, _in::unsafeCast<core::int*>(:result_or_exception));
                       rethrow;
                     }
                   finally {
-                    [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    self::expect(0, _in::unsafeCast<core::int*>(:result));
+                    [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                    self::expect(0, _in::unsafeCast<core::int*>(:result_or_exception));
                   }
                 }
                 on dynamic catch(final dynamic e) {
-                  [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  self::expect(0, _in::unsafeCast<core::int*>(:result));
+                  [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                  self::expect(0, _in::unsafeCast<core::int*>(:result_or_exception));
                   self::expect("string", e);
                 }
               finally {
-                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                self::expect(0, _in::unsafeCast<core::int*>(:result));
+                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                self::expect(0, _in::unsafeCast<core::int*>(:result_or_exception));
               }
               #L10:
               {
-                [yield] let dynamic #t50 = asy::_awaitHelper(func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                switch(_in::unsafeCast<core::int*>(:result)) {
+                [yield] let dynamic #t50 = asy::_awaitHelper(func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                switch(_in::unsafeCast<core::int*>(:result_or_exception)) {
                   #L11:
                   case #C3:
                     {
@@ -554,12 +554,12 @@
                 core::int* :await_jump_var = 0;
                 dynamic :await_ctx_var;
                 dynamic :saved_try_context_var0;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try {
                     #L13:
                     {
-                      [yield] let dynamic #t52 = asy::_awaitHelper(func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-                      :return_value = :result;
+                      [yield] let dynamic #t52 = asy::_awaitHelper(func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*}, :async_op_then, :async_op_error) in null;
+                      :return_value = :result_or_exception;
                       break #L13;
                     }
                     asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -570,11 +570,11 @@
                   }
                 :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
                 :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :async_op(){() →* dynamic};
+                :async_op(null, null){() →* dynamic};
                 :is_sync = true;
                 return :async_future;
-              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expect(42, :result);
+              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error) in null;
+              self::expect(42, :result_or_exception);
               [yield] let dynamic #t53 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
                 final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
                 core::bool* :is_sync = false;
@@ -583,7 +583,7 @@
                 (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
                 core::int* :await_jump_var = 0;
                 dynamic :await_ctx_var;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try {
                     #L14:
                     {
@@ -598,11 +598,11 @@
                   }
                 :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
                 :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :async_op(){() →* dynamic};
+                :async_op(null, null){() →* dynamic};
                 :is_sync = true;
                 return :async_future;
-              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expect(42, :result);
+              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error) in null;
+              self::expect(42, :result_or_exception);
               function testStream1() → asy::Stream<core::int*>* /* originally async* */ {
                 asy::_AsyncStarStreamController<core::int*>* :controller;
                 dynamic :controller_stream;
@@ -612,13 +612,13 @@
                 dynamic :await_ctx_var;
                 dynamic :saved_try_context_var0;
                 dynamic :saved_try_context_var1;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try
                     try {
                       #L15:
                       {
-                        [yield] let dynamic #t54 = asy::_awaitHelper(func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                        if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result)){(core::int*) → core::bool})
+                        [yield] let dynamic #t54 = asy::_awaitHelper(func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error) in null;
+                        if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result_or_exception)){(core::int*) → core::bool})
                           return null;
                         else
                           [yield] null;
@@ -638,8 +638,8 @@
                 return :controller_stream;
               }
               :async_temporary_0 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t55 = asy::_awaitHelper(testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_0), _in::unsafeCast<core::List<core::int*>*>(:result));
+              [yield] let dynamic #t55 = asy::_awaitHelper(testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_0), _in::unsafeCast<core::List<core::int*>*>(:result_or_exception));
               function testStream2() → asy::Stream<core::int*>* /* originally async* */ {
                 asy::_AsyncStarStreamController<core::int*>* :controller;
                 dynamic :controller_stream;
@@ -649,13 +649,13 @@
                 dynamic :await_ctx_var;
                 dynamic :saved_try_context_var0;
                 dynamic :saved_try_context_var1;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try
                     try {
                       #L16:
                       {
-                        [yield] let dynamic #t56 = asy::_awaitHelper(func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                        if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result)){(asy::Stream<core::int*>) → core::bool})
+                        [yield] let dynamic #t56 = asy::_awaitHelper(func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*}, :async_op_then, :async_op_error) in null;
+                        if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result_or_exception)){(asy::Stream<core::int*>) → core::bool})
                           return null;
                         else
                           [yield] null;
@@ -675,8 +675,8 @@
                 return :controller_stream;
               }
               :async_temporary_1 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t57 = asy::_awaitHelper(testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_1), _in::unsafeCast<core::List<core::int*>*>(:result));
+              [yield] let dynamic #t57 = asy::_awaitHelper(testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_1), _in::unsafeCast<core::List<core::int*>*>(:result_or_exception));
             }
           }
         }
@@ -689,7 +689,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -701,7 +701,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L17:
       {
@@ -716,7 +716,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -731,7 +731,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L18:
@@ -764,25 +764,25 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L19:
       {
         for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-          [yield] let dynamic #t58 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t59 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t60 = asy::_awaitHelper(self::instanceMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t61 = asy::_awaitHelper(self::conditionals(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t62 = asy::_awaitHelper(self::others(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t63 = asy::_awaitHelper(self::asserts(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t64 = asy::_awaitHelper(self::controlFlow(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t58 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t59 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t60 = asy::_awaitHelper(self::instanceMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t61 = asy::_awaitHelper(self::conditionals(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t62 = asy::_awaitHelper(self::others(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t63 = asy::_awaitHelper(self::asserts(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t64 = asy::_awaitHelper(self::controlFlow(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
         }
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -793,7 +793,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
index 3dce525..3587ac9 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
@@ -19,13 +19,13 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           final core::List<core::int*>* #t1 = core::_GrowableList::•<core::int*>(0);
-          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() →* asy::Future<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-          #t1.{core::List::add}(_in::unsafeCast<core::int*>(:result)){(core::int*) →* void};
+          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() →* asy::Future<core::int*>*}, :async_op_then, :async_op_error) in null;
+          #t1.{core::List::add}(_in::unsafeCast<core::int*>(:result_or_exception)){(core::int*) →* void};
           :return_value = block {} =>#t1;
           break #L1;
         }
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -49,7 +49,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -64,7 +64,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -88,12 +88,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-        self::expect(42, _in::unsafeCast<core::List<core::int*>*>(:result).{core::Iterable::first}{core::int*});
+        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error) in null;
+        self::expect(42, _in::unsafeCast<core::List<core::int*>*>(:result_or_exception).{core::Iterable::first}{core::int*});
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -103,7 +103,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
index 1345153..a10da8b 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
index 8f45939..1ea3b37 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
@@ -48,7 +48,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -63,7 +63,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -77,7 +77,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -92,7 +92,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -106,18 +106,18 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   self::Y* :async_temporary_0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         final self::Y* #t1 = new self::Y::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error, :async_op) in null;
-        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object*>*>(:result)){(dynamic) →* dynamic};
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error) in null;
+        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object*>*>(:result_or_exception)){(dynamic) →* dynamic};
         :async_temporary_0 = block {
           #t1.{self::Y::f}(self::f2()){(dynamic) →* dynamic};
         } =>#t1;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = new self::X::•(_in::unsafeCast<self::Y*>(:async_temporary_0), _in::unsafeCast<core::Object*>(:result));
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
+        :return_value = new self::X::•(_in::unsafeCast<self::Y*>(:async_temporary_0), _in::unsafeCast<core::Object*>(:result_or_exception));
         break #L3;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -128,7 +128,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -141,12 +141,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<self::X*>(:result));
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<self::X*>(:result_or_exception));
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -156,7 +156,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
index 5c69330..7779f8c 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
@@ -16,13 +16,13 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         final core::Object* #t1 = CheckLibraryIsLoaded(lib);
-        [yield] let dynamic #t2 = asy::_awaitHelper(LoadLibrary(lib), :async_op_then, :async_op_error, :async_op) in null;
-        def::m(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(LoadLibrary(lib), :async_op_then, :async_op_error) in null;
+        def::m(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
index e74ebe2..dfc514d 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
@@ -1955,7 +1955,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -2284,8 +2284,8 @@
             #L2:
             while (true) {
               dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
               }
@@ -2294,8 +2294,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::List<dynamic>* list30 = block {} =>#t264;
@@ -2310,8 +2310,8 @@
             #L3:
             while (true) {
               dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t268.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
               }
@@ -2320,8 +2320,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Set<dynamic>* set30 = block {
@@ -2338,8 +2338,8 @@
             #L4:
             while (true) {
               dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
               }
@@ -2348,8 +2348,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, dynamic>* map30 = block {
@@ -2367,8 +2367,8 @@
             #L5:
             while (true) {
               dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
               }
@@ -2377,8 +2377,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::List<core::int*>* list40 = block {} =>#t276;
@@ -2394,8 +2394,8 @@
             #L6:
             while (true) {
               dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t280.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
               }
@@ -2404,8 +2404,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Set<core::int*>* set40 = block {
@@ -2423,8 +2423,8 @@
             #L7:
             while (true) {
               dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
               }
@@ -2433,8 +2433,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, core::int*>* map40 = block {
@@ -2489,7 +2489,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
index cd22de9..e4e75cc 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -41,8 +41,8 @@
             #L2:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t3 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
@@ -55,8 +55,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -68,7 +68,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
index 946e531..0dcf16e 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
@@ -14,12 +14,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result_or_exception);
           self::TestMixin::T* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -122,12 +122,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result_or_exception);
           core::String* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::Response<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
@@ -154,7 +154,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -191,12 +191,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result_or_exception);
           core::String* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::PagingResponse<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
@@ -223,7 +223,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
index e61e567..f83341f 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -50,7 +50,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -78,7 +78,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -93,7 +93,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
index f0fb90b..33f08d6 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -77,7 +77,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -92,7 +92,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -104,7 +104,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -119,7 +119,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -131,7 +131,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -146,7 +146,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -158,7 +158,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -173,7 +173,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -185,7 +185,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -200,7 +200,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -212,7 +212,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -227,7 +227,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -239,7 +239,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L8:
       {
@@ -254,7 +254,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -266,7 +266,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L9:
       {
@@ -281,7 +281,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -293,7 +293,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L10:
       {
@@ -308,7 +308,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -320,7 +320,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L11:
       {
@@ -335,7 +335,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -347,7 +347,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L12:
       {
@@ -362,7 +362,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -375,34 +375,34 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L13:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnClassFromDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnFutureClassDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnFutureOrClassDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnFutureClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnFutureOrClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::returnFutureClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::returnFutureOrClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnClassFromDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnFutureClassDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnFutureOrClassDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnFutureClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnFutureOrClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::returnFutureClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::returnFutureOrClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -412,7 +412,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
index 6528bab..dc58e3d 100644
--- a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -48,8 +48,8 @@
             #L2:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 void v5 = :for-iterator.{asy::_StreamIterator::current}{void};
                 {}
               }
@@ -58,8 +58,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -69,8 +69,8 @@
             #L3:
             while (true) {
               dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 void v6 = :for-iterator.{asy::_StreamIterator::current}{void};
                 {}
               }
@@ -79,8 +79,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
index 9bfa6ab6..5073c13 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,7 +53,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
index ae34a36..d67c665 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {}
@@ -44,7 +44,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -61,7 +61,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -78,7 +78,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -92,12 +92,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -108,7 +108,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 };
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
index 90be483..4fef8f9 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   core::int* :async_temporary_1;
   core::List<core::int*>* :async_temporary_2;
   core::int* :async_temporary_3;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -29,8 +29,8 @@
         if(!(x == null)) {
           :async_temporary_1 = x.{core::num::+}(1){(core::num*) →* core::int*};
           :async_temporary_0 = x.{core::num::+}(2){(core::num*) →* core::int*};
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result));
+          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result_or_exception));
         }
         else {
           :async_temporary_2 = null;
@@ -46,7 +46,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -59,12 +59,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::foo(0), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::foo(0), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L2;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +75,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -88,4 +88,4 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:10:10 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:11:10 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 94, effectively constant: 2
+Extra constant evaluation: evaluated: 92, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
index b0ac024..3d98e0c 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   });
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
index be46445..184f658 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -35,7 +35,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -50,11 +50,11 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
-        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error, :async_op) in null;
-        final core::String? x = _in::unsafeCast<core::String?>(:result);
+        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error) in null;
+        final core::String? x = _in::unsafeCast<core::String?>(:result_or_exception);
         self::bar(x);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -77,7 +77,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -92,7 +92,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
index e2413bc..1e3ff27 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
index b10bc16..80b72a9 100644
--- a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -29,8 +29,8 @@
             #L2:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final void _ = :for-iterator.{asy::_StreamIterator::current}{void};
                 {}
               }
@@ -39,8 +39,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -52,7 +52,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index 983f3d4..ad020a3 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
@@ -17,12 +17,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          _in::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          _in::unsafeCast<Null>(:result_or_exception);
           core::print("hello");
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -33,7 +33,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
index 3c53c2b..a6a1585 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {}
@@ -28,7 +28,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -55,7 +55,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {}
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -93,16 +93,16 @@
   dynamic :saved_try_context_var0;
   self::B* :async_temporary_0;
   dynamic :async_temporary_1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         :async_temporary_1 = new self::A::•();
-        [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result)){(dynamic) →* asy::Future<void>*};
+        [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) →* asy::Future<void>*};
         :async_temporary_0 = new self::B::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = core::_GrowableList::_literal2<asy::Future<void>*>(_in::unsafeCast<asy::Future<void>*>(:async_temporary_1), _in::unsafeCast<self::B*>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result)){(dynamic) →* asy::Future<void>*});
+        [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+        :return_value = core::_GrowableList::_literal2<asy::Future<void>*>(_in::unsafeCast<asy::Future<void>*>(:async_temporary_1), _in::unsafeCast<self::B*>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) →* asy::Future<void>*});
         break #L3;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -113,7 +113,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
index df43e6d..522ac94 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   dynamic :saved_try_context_var2;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -36,8 +36,8 @@
               #L2:
               while (true) {
                 dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                   dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                   {
                     if(:controller.{asy::_AsyncStarStreamController::add}(x){(dynamic) → core::bool})
@@ -55,8 +55,8 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+                :result_or_exception;
               }
           }
         }
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
index 99d4140..7730f84 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -57,7 +57,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -69,7 +69,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -84,7 +84,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -97,7 +97,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -134,7 +134,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -178,7 +178,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -189,8 +189,8 @@
             #L6:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 FutureOr<self::Class*>* cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class*>*};
                 {
                   core::print(cls);
@@ -201,8 +201,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class*>*>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -214,7 +214,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
index 1bb3512..8967db1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
@@ -10,12 +10,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L1;
         }
@@ -27,7 +27,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -62,12 +62,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
         dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -78,7 +78,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
index 6a2982c..0cfec60 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
@@ -10,12 +10,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L1;
         }
@@ -27,7 +27,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -62,12 +62,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
           dart.core::print("Done");
         }
@@ -79,7 +79,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
index 9d83b08..da879b3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
@@ -28,12 +28,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
         dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -44,7 +44,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -57,12 +57,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L2;
         }
@@ -74,7 +74,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
index d0bec69..44e9e46 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
@@ -28,12 +28,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
         dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -44,7 +44,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -57,12 +57,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello!!!";
           break #L2;
         }
@@ -74,7 +74,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
index d9b9b9f..ca8efcb 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
@@ -28,12 +28,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
           dart.core::print("Done!");
         }
@@ -45,7 +45,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -58,12 +58,12 @@
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello!!!";
           break #L2;
         }
@@ -75,7 +75,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
index 7072277..1e14f9c 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -57,7 +57,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -72,7 +72,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -84,7 +84,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L3:
               {
@@ -99,7 +99,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -111,7 +111,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L4:
               {
@@ -126,7 +126,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -138,7 +138,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
@@ -153,7 +153,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -165,7 +165,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L6:
               {
@@ -180,7 +180,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -192,7 +192,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
@@ -207,7 +207,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -219,7 +219,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -234,7 +234,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -246,7 +246,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -261,7 +261,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -273,7 +273,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -288,7 +288,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -300,7 +300,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -315,30 +315,30 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(x0, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y0 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(x1, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y1 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(x2, :async_op_then, :async_op_error, :async_op) in null;
-        asy::Future<core::int*>* y2 = _in::unsafeCast<asy::Future<core::int*>*>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(x3, :async_op_then, :async_op_error, :async_op) in null;
-        FutureOr<core::int*>* y3 = _in::unsafeCast<FutureOr<core::int*>*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(x4, :async_op_then, :async_op_error, :async_op) in null;
-        self::MyFuture* y4 = _in::unsafeCast<self::MyFuture*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(x5, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y5 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(x6, :async_op_then, :async_op_error, :async_op) in null;
-        asy::Future<core::int*>* y6 = _in::unsafeCast<asy::Future<core::int*>*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(x7, :async_op_then, :async_op_error, :async_op) in null;
-        FutureOr<core::int*>* y7 = _in::unsafeCast<FutureOr<core::int*>*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(x8, :async_op_then, :async_op_error, :async_op) in null;
-        self::MyFuture* y8 = _in::unsafeCast<self::MyFuture*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(x9, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y9 = _in::unsafeCast<core::int*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(x0, :async_op_then, :async_op_error) in null;
+        core::int* y0 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(x1, :async_op_then, :async_op_error) in null;
+        core::int* y1 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(x2, :async_op_then, :async_op_error) in null;
+        asy::Future<core::int*>* y2 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(x3, :async_op_then, :async_op_error) in null;
+        FutureOr<core::int*>* y3 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(x4, :async_op_then, :async_op_error) in null;
+        self::MyFuture* y4 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(x5, :async_op_then, :async_op_error) in null;
+        core::int* y5 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(x6, :async_op_then, :async_op_error) in null;
+        asy::Future<core::int*>* y6 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(x7, :async_op_then, :async_op_error) in null;
+        FutureOr<core::int*>* y7 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(x8, :async_op_then, :async_op_error) in null;
+        self::MyFuture* y8 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(x9, :async_op_then, :async_op_error) in null;
+        core::int* y9 = _in::unsafeCast<core::int*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -348,7 +348,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
index faa27c6..15fb18d 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -30,7 +30,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
index d131af3..7e432e9 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -26,7 +26,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
index 516b135..de99cb2 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -30,7 +30,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
index ab84cab..c321e3e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
index 33452c2..81cc3b1 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
index 35febb4..e5f6a32 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
index 6e67dc6..2e127fbc 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L1:
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
index 1ca076e..2f60494 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -27,7 +27,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -42,14 +42,14 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         };
         asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
         asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<Null>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -59,7 +59,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
index 0b66184..6f20ea7 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L2:
@@ -54,8 +54,8 @@
         };
         asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
         asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<Null>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
index ef028bb..9b64f1c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
@@ -15,15 +15,15 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         dynamic d;
-        [yield] let dynamic #t1 = asy::_awaitHelper(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*), :async_op_then, :async_op_error) in null;
+        core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*)), :async_op_then, :async_op_error) in null;
+        core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
index f7624fe..70f5a69 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
@@ -71,7 +71,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -123,8 +123,8 @@
             #L2:
             while (true) {
               dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -133,8 +133,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -144,8 +144,8 @@
             #L3:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -154,8 +154,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -165,8 +165,8 @@
             #L4:
             while (true) {
               dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::Object* x = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
                 {}
               }
@@ -175,8 +175,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -186,8 +186,8 @@
             #L5:
             while (true) {
               dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t14 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   d = #t14;
@@ -198,8 +198,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -209,8 +209,8 @@
             #L6:
             while (true) {
               dynamic #t16 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final core::Object* #t18 = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
                 {
                   o = #t18;
@@ -221,8 +221,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -234,7 +234,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -250,7 +250,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -282,8 +282,8 @@
             #L8:
             while (true) {
               dynamic #t20 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t21 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t21 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 {}
               }
@@ -292,8 +292,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -303,8 +303,8 @@
             #L9:
             while (true) {
               dynamic #t23 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 {}
               }
@@ -313,8 +313,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t25 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t25 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -326,7 +326,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index 2c8befb..7f9840f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -92,7 +92,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
index b47ff66..d8e4b15 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -35,8 +35,8 @@
             #L2:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -45,8 +45,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::int* y;
@@ -66,8 +66,8 @@
             #L3:
             while (true) {
               dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   y = #t7 as{TypeError,ForDynamic} core::int*;
@@ -78,8 +78,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -91,7 +91,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index 6786a24..1b0b3a6 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 2f74e115..2945796 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index 7decc2d..d075aa1 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index 6bc3b03..ecea355 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index 4971cd6..4c59d38 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index 7cffed8..fdde079 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -44,12 +44,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -60,7 +60,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -73,12 +73,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -89,7 +89,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -101,7 +101,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -116,7 +116,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -128,7 +128,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index be1084c..ca269fc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index 4327ac5..d41c46d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index 477a406..353cbcc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index 0211604..fa9b07f 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index 6759525..862a146 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index 877ea634..51cd23d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,8 +53,8 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index 2716550..59febc8 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -45,14 +45,14 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           final core::int* #t1 = x;
           if(#t1 == null) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           else {
             :async_temporary_0 = #t1;
@@ -68,7 +68,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -81,12 +81,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result_or_exception) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index 2dc93c6..ea1b07f 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -55,7 +55,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -110,7 +110,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index e56689e..110e697 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -55,7 +55,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -110,7 +110,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 955a495..8d75a91 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -67,7 +67,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -79,7 +79,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index 9c426f7..c18f5d9 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -70,7 +70,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -85,7 +85,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index 09a8df9..e17a236 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -67,7 +67,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -79,7 +79,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 35a7372..87fe01a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -70,7 +70,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -85,7 +85,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
index e617289..719fe87 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
@@ -30,14 +30,14 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         asy::Future<core::List<self::A*>*>* f1 = null;
         asy::Future<core::List<self::A*>*>* f2 = null;
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error) in null;
+        core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -47,7 +47,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
index 241a603..289f3bf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
@@ -17,13 +17,13 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         asy::Future<core::String*>* f;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::id<FutureOr<core::String*>*>(f), :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<core::String*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::id<FutureOr<core::String*>*>(f), :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<core::String*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
index 3e7e7b1..0045a57 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
@@ -40,17 +40,17 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
         asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
         core::List<asy::Future<self::A*>*>* lll = core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c);
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<self::A*>(lll), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<self::A*>* result = _in::unsafeCast<core::List<self::A*>>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<self::A*>* result2 = _in::unsafeCast<core::List<self::A*>>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<self::A*>(lll), :async_op_then, :async_op_error) in null;
+        core::List<self::A*>* result = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c)), :async_op_then, :async_op_error) in null;
+        core::List<self::A*>* result2 = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
         core::List<self::A*>* list = result;
         list = result2;
       }
@@ -62,7 +62,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
index 304c78c..add860f 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L1:
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
index 9c54557..afb8f44 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -29,7 +29,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -44,7 +44,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -89,7 +89,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L3:
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index 8eee676..f060c75 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
     dynamic :saved_try_context_var1;
     dynamic :exception0;
     dynamic :stack_trace0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -78,8 +78,8 @@
               #L2:
               while (true) {
                 dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                   core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
                   {
                     core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -92,8 +92,8 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+                :result_or_exception;
               }
           }
         }
@@ -105,7 +105,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -136,7 +136,7 @@
     dynamic :saved_try_context_var1;
     dynamic :exception0;
     dynamic :stack_trace0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -147,8 +147,8 @@
               #L4:
               while (true) {
                 dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                   self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T*};
                   {
                     core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
@@ -162,8 +162,8 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null)) {
-                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+                :result_or_exception;
               }
           }
         }
@@ -175,7 +175,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -253,7 +253,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -265,8 +265,8 @@
             #L6:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -280,8 +280,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -291,8 +291,8 @@
             #L7:
             while (true) {
               dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::String* y = x as{TypeError,ForDynamic} core::String*;
@@ -303,8 +303,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -314,8 +314,8 @@
             #L8:
             while (true) {
               dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::Foo* #t15 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -331,8 +331,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         dynamic z;
@@ -343,8 +343,8 @@
             #L9:
             while (true) {
               dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::Foo* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   z = #t19;
@@ -356,8 +356,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         asy::Stream<dynamic>* stream = myStream;
@@ -368,8 +368,8 @@
             #L10:
             while (true) {
               dynamic #t21 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t23 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   self::Foo* x = #t23 as{TypeError,ForDynamic} self::Foo*;
@@ -381,8 +381,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         dynamic stream2 = myStream;
@@ -393,8 +393,8 @@
             #L11:
             while (true) {
               dynamic #t25 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   self::Foo* x = #t27 as{TypeError,ForDynamic} self::Foo*;
@@ -406,8 +406,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -423,8 +423,8 @@
             #L12:
             while (true) {
               dynamic #t29 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::String* y = x as{TypeError,ForDynamic} core::String*;
@@ -435,8 +435,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -448,7 +448,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 1b77665..285cb47 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -44,7 +44,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -91,7 +91,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L2:
@@ -124,7 +124,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L3:
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
index 9f7346a..d7f66be 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -43,7 +43,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -90,7 +90,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -123,7 +123,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
index dfc471b..2eaaf2a 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
@@ -39,7 +39,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -66,8 +66,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::int* x = #t4 as{TypeError,ForDynamic} core::int*;
@@ -78,8 +78,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::int* y;
@@ -105,8 +105,8 @@
             #L3:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t9 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   y = #t9 as{TypeError,ForDynamic} core::int*;
@@ -117,8 +117,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -130,7 +130,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
index 356e2de..703f7d8 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -80,8 +80,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::A* #t4 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   a = #t4;
@@ -92,8 +92,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -112,8 +112,8 @@
             #L3:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::A* #t9 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   b = #t9 as{TypeError} self::B*;
@@ -124,8 +124,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -148,8 +148,8 @@
             #L4:
             while (true) {
               dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::A* #t14 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
@@ -164,8 +164,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -184,8 +184,8 @@
             #L5:
             while (true) {
               dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final self::A* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   a = #t19;
@@ -196,8 +196,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
@@ -209,7 +209,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 5b963bf..5595103 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -148,7 +148,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -159,8 +159,8 @@
             #L2:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -171,8 +171,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
@@ -186,7 +186,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -198,7 +198,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -227,12 +227,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t12 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t12 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -243,7 +243,7 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           } : #t11{core::Function};
@@ -258,7 +258,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -270,4 +270,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///later.dart:46:18 -> IntConstant(42)
-Extra constant evaluation: evaluated: 204, effectively constant: 1
+Extra constant evaluation: evaluated: 201, effectively constant: 1
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index c376454..7d0a057 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -168,7 +168,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -179,8 +179,8 @@
             #L2:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -191,8 +191,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
@@ -206,7 +206,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -218,7 +218,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -265,12 +265,12 @@
               core::int :await_jump_var = 0;
               dynamic :await_ctx_var;
               dynamic :saved_try_context_var0;
-              function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+              function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                 try {
                   #L4:
                   {
-                    [yield] let dynamic #t9 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                    :return_value = :result;
+                    [yield] let dynamic #t9 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                    :return_value = :result_or_exception;
                     break #L4;
                   }
                   asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -281,7 +281,7 @@
                 }
               :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
               :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-              :async_op(){() → dynamic};
+              :async_op(null, null){() → dynamic};
               :is_sync = true;
               return :async_future;
             };
@@ -302,7 +302,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/macros/augment_class.dart b/pkg/front_end/testcases/macros/augment_class.dart
new file mode 100644
index 0000000..f347f88
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Super {}
+mixin Mixin {}
+
+augment class Class1 {}
+abstract augment class Class2 {}
+augment class Class3 = Super with Mixin;
+abstract augment class Class4 = Super with Mixin;
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.strong.expect b/pkg/front_end/testcases/macros/augment_class.dart.strong.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.strong.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect
new file mode 100644
index 0000000..1213172
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect b/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect
new file mode 100644
index 0000000..99323fe
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class Super {}
+mixin Mixin {}
+augment
+class Class1 {}
+abstract augment class Class2 {}
+augment
+class Class3 = Super with Mixin;
+abstract augment class Class4 = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect
new file mode 100644
index 0000000..982b26e
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect
new file mode 100644
index 0000000..1213172
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index 663f7f7..2b23c4c 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -280,7 +280,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -310,7 +310,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -414,7 +414,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -442,7 +442,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 374fc977..90f48aa 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -280,7 +280,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -310,7 +310,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -414,7 +414,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -442,7 +442,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 64a9400..2c07b45 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -14,12 +14,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -82,12 +82,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -114,7 +114,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -141,12 +141,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -173,7 +173,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index 64a9400..2c07b45 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -14,12 +14,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -82,12 +82,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -114,7 +114,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -141,12 +141,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -173,7 +173,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
index 1ecce4a..3911f56 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
@@ -21,15 +21,15 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
         core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
+           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result_or_exception) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -39,7 +39,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
index 1a6d93f..c8d68d4 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
@@ -21,15 +21,15 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
         core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^" in _in::unsafeCast<core::List<dynamic>?>(:result);
+           ^" in _in::unsafeCast<core::List<dynamic>?>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -39,7 +39,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
index ec795d3..5a8290a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
index ec795d3..5a8290a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index d45e990..8190be5 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -63,7 +63,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -78,7 +78,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -90,7 +90,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -104,7 +104,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -116,7 +116,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -131,7 +131,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -143,7 +143,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -158,7 +158,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -170,7 +170,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -184,7 +184,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -196,7 +196,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -211,7 +211,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -224,7 +224,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -276,7 +276,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -298,7 +298,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -310,7 +310,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -333,7 +333,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -345,7 +345,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -367,7 +367,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -379,7 +379,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -402,7 +402,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -415,7 +415,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index 90dabf3..69eb4d9 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -64,7 +64,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -79,7 +79,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -91,7 +91,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -105,7 +105,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -117,7 +117,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -132,7 +132,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -144,7 +144,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -159,7 +159,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -171,7 +171,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -185,7 +185,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -197,7 +197,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -212,7 +212,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -225,7 +225,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -277,7 +277,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -299,7 +299,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -311,7 +311,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -334,7 +334,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -346,7 +346,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -368,7 +368,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -380,7 +380,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -403,7 +403,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -416,7 +416,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index ed3a3ca..6e2c362 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -41,7 +41,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -56,7 +56,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -68,7 +68,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -83,7 +83,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -96,12 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -112,7 +112,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -129,12 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -145,7 +145,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -164,7 +164,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -179,7 +179,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -191,7 +191,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -204,12 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -220,7 +220,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -237,12 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,7 +253,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -272,7 +272,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -287,7 +287,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -303,12 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -319,7 +319,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -337,12 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -353,7 +353,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -370,7 +370,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L12:
               {
@@ -385,7 +385,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<core::bool>};
@@ -398,7 +398,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index ed3a3ca..6e2c362 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -56,7 +56,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -68,7 +68,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -83,7 +83,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -96,12 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -112,7 +112,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -129,12 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -145,7 +145,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -164,7 +164,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -179,7 +179,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -191,7 +191,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -204,12 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -220,7 +220,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -237,12 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,7 +253,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -272,7 +272,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -287,7 +287,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -303,12 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -319,7 +319,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -337,12 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -353,7 +353,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -370,7 +370,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L12:
               {
@@ -385,7 +385,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<core::bool>};
@@ -398,7 +398,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index 8b27a53..06df3f0 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -150,7 +150,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -292,7 +292,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index 8b27a53..06df3f0 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -150,7 +150,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -292,7 +292,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
index 995ecac..ce8b32e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -85,7 +85,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -118,7 +118,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -155,7 +155,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -198,7 +198,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L5:
@@ -230,7 +230,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -243,7 +243,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L7:
@@ -280,7 +280,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L8:
@@ -323,7 +323,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L9:
@@ -359,7 +359,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L10:
@@ -397,7 +397,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L11:
@@ -435,7 +435,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L12:
@@ -468,7 +468,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
index 995ecac..ce8b32e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -85,7 +85,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -118,7 +118,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -155,7 +155,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -198,7 +198,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L5:
@@ -230,7 +230,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -243,7 +243,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L7:
@@ -280,7 +280,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L8:
@@ -323,7 +323,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L9:
@@ -359,7 +359,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L10:
@@ -397,7 +397,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L11:
@@ -435,7 +435,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L12:
@@ -468,7 +468,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
index ec6e4be..675b14d 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -48,7 +48,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
@@ -60,7 +60,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -73,14 +73,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -90,7 +90,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -103,12 +103,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -118,7 +118,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
index ec6e4be..675b14d 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -48,7 +48,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
@@ -60,7 +60,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -73,14 +73,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -90,7 +90,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -103,12 +103,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -118,7 +118,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index b845eb9..1c73ad9 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -43,12 +43,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
+          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -79,14 +79,14 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
           :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index b845eb9..1c73ad9 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -43,12 +43,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
+          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -79,14 +79,14 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
           :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
index 2bb4719..2b136de 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -14,14 +14,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Object o = let dynamic #t2 = :result in #t2 == null ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = let dynamic #t4 = :result in #t4 == null ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        core::Object o = let dynamic #t2 = :result_or_exception in #t2 == null ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = let dynamic #t4 = :result_or_exception in #t4 == null ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
index 4d5ecd6..74c0365 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -14,14 +14,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Object o = :result;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        core::Object o = :result_or_exception;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
index fe3f074..e5489e1 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -45,7 +45,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -61,7 +61,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -80,7 +80,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
@@ -93,7 +93,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
index fe3f074..e5489e1 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -61,7 +61,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -80,7 +80,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
@@ -93,7 +93,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index ce05381..199ae9b 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -45,7 +45,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index ce05381..199ae9b 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -45,7 +45,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
index 83b083c..0bf212b 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -40,7 +40,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
index 83b083c..0bf212b 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -40,7 +40,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index 5d5407b..c26058b 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -135,7 +135,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -146,8 +146,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -158,8 +158,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
@@ -173,7 +173,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -185,7 +185,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -209,12 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -225,7 +225,7 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           };
@@ -239,7 +239,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index 5d5407b..c26058b 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -135,7 +135,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -146,8 +146,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -158,8 +158,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
@@ -173,7 +173,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -185,7 +185,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -209,12 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -225,7 +225,7 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           };
@@ -239,7 +239,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
index 49eec30..1a1e26d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
@@ -10,6 +10,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -30,11 +35,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index 765a694..8e3b2c1 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -18,14 +18,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -48,14 +48,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -78,12 +78,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         self::throwSync();
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -106,7 +106,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -120,12 +120,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<void>(:result);
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
+                _in::unsafeCast<void>(:result_or_exception);
                 completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
               asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -136,7 +136,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
@@ -153,7 +153,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index 765a694..8e3b2c1 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -18,14 +18,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -48,14 +48,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -78,12 +78,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         self::throwSync();
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -106,7 +106,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -120,12 +120,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<void>(:result);
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
+                _in::unsafeCast<void>(:result_or_exception);
                 completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
               asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -136,7 +136,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
@@ -153,7 +153,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 2bde6d6..f464a2f 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -99,7 +99,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -111,7 +111,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -123,7 +123,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
@@ -135,7 +135,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -147,7 +147,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -164,7 +164,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -176,7 +176,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {}
@@ -188,7 +188,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -200,7 +200,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {}
@@ -212,7 +212,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -224,7 +224,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -239,7 +239,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -251,7 +251,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {}
@@ -263,7 +263,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -286,7 +286,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L8:
@@ -367,7 +367,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L13:
         {}
@@ -379,7 +379,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -391,7 +391,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L14:
         {}
@@ -403,7 +403,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -415,7 +415,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L15:
         {
@@ -432,7 +432,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -444,7 +444,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L16:
         {}
@@ -456,7 +456,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -468,7 +468,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L17:
         {}
@@ -480,7 +480,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -492,7 +492,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L18:
         {
@@ -507,7 +507,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -519,7 +519,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L19:
         {}
@@ -531,7 +531,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -554,7 +554,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L20:
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 16befe0..09a90f2 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -100,7 +100,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -112,7 +112,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -124,7 +124,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
@@ -136,7 +136,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -148,7 +148,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -165,7 +165,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -177,7 +177,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {}
@@ -189,7 +189,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -201,7 +201,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {}
@@ -213,7 +213,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -225,7 +225,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -240,7 +240,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -252,7 +252,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {}
@@ -264,7 +264,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -287,7 +287,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L8:
@@ -371,7 +371,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L14:
         {}
@@ -383,7 +383,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -395,7 +395,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L15:
         {}
@@ -407,7 +407,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -419,7 +419,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L16:
         {
@@ -436,7 +436,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -448,7 +448,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L17:
         {}
@@ -460,7 +460,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -472,7 +472,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L18:
         {}
@@ -484,7 +484,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -496,7 +496,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L19:
         {
@@ -511,7 +511,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -523,7 +523,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L20:
         {}
@@ -535,7 +535,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -558,7 +558,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L21:
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
index 160716b..19c9552 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
@@ -24,7 +24,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -37,7 +37,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
@@ -49,7 +49,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -62,16 +62,16 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -81,7 +81,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
index 1f53e96..055f5af 100644
--- a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -30,7 +30,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
index b4b664d..4463725 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -109,7 +109,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -122,15 +122,15 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         core::print(self::f1());
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::f2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<invalid-type>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::f2(), :async_op_then, :async_op_error) in null;
+        core::print(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<invalid-type>(:result_or_exception));
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -140,7 +140,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
index 63a99de..2048398 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -43,7 +43,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -58,12 +58,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<core::int*>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::int*>(:result_or_exception));
         function f_async_star() → core::int* /* originally async* */ {
           asy::_AsyncStarStreamController<dynamic>* :controller;
           dynamic :controller_stream;
@@ -73,7 +73,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L3:
@@ -104,8 +104,8 @@
             #L4:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::print(x);
@@ -116,8 +116,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         function f_sync_star() → core::int* /* originally sync* */ {
@@ -155,7 +155,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
index 9262980..1578723 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
@@ -62,7 +62,7 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -87,26 +87,26 @@
 Change the type of the map literal or the context in which it is used.
   LinkedHashMap<int, bool> lhm = {};
                                  ^" in <dynamic, dynamic>{};
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -116,7 +116,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -128,7 +128,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -143,7 +143,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -155,7 +155,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -172,7 +172,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -184,7 +184,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -201,7 +201,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -213,7 +213,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -236,7 +236,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -248,7 +248,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -269,7 +269,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 9bd8949..ee2d5b8 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -159,6 +159,7 @@
 late_lowering/override_getter_setter: FormatterCrash
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
+macros/augment_class: FormatterCrash
 macros/macro_class: FormatterCrash
 nnbd/abstract_field_errors: FormatterCrash
 nnbd/covariant_late_field: FormatterCrash
diff --git a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
index ff1f22e..ce27c8a 100644
--- a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
@@ -103,8 +103,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 6481a4c..09a9e7f 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -834,6 +834,7 @@
       scope: libraryBuilder.scope.createNestedScope("dartdoctest"),
       nameOrigin: libraryBuilder,
       isUnsupported: false,
+      isAugmentation: false,
     );
 
     if (libraryBuilder is DillLibraryBuilder) {
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
index acca81a..a9d5f6a 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/kernel/lib/transformations/async.dart
@@ -76,7 +76,8 @@
   /// [nameIndex] may still account for names of subexpressions.
   int nameIndex = 0;
 
-  final VariableDeclaration asyncResult = new VariableDeclaration(':result');
+  final VariableDeclaration asyncResult =
+      new VariableDeclaration(':result_or_exception');
   final List<VariableDeclaration> variables = <VariableDeclaration>[];
 
   ExpressionLifter(this.continuationRewriter);
@@ -538,7 +539,6 @@
       expr.operand,
       new VariableGet(R.thenContinuationVariable),
       new VariableGet(R.catchErrorContinuationVariable),
-      new VariableGet(R.nestedClosureVariable),
     ]);
 
     // We are building
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index c0375c2..3fb6474 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -536,7 +536,7 @@
 }
 
 abstract class AsyncRewriterBase extends ContinuationRewriterBase {
-  // :async_op has type ([dynamic result, dynamic e, StackTrace? s]) -> dynamic
+  // :async_op has type (dynamic result_or_exception, StackTrace? s) -> dynamic
   final VariableDeclaration nestedClosureVariable;
 
   // :async_op_then has type (dynamic result) -> dynamic
@@ -551,14 +551,13 @@
 
   AsyncRewriterBase(HelperNodes helper, FunctionNode enclosingFunction,
       StatefulStaticTypeContext staticTypeContext)
-      : nestedClosureVariable = VariableDeclaration(
-            ContinuationVariables.asyncOp,
-            type: FunctionType([
-              const DynamicType(),
-              const DynamicType(),
-              helper.coreTypes.stackTraceRawType(staticTypeContext.nullable),
-            ], const DynamicType(), staticTypeContext.nonNullable,
-                requiredParameterCount: 0)),
+      : nestedClosureVariable =
+            VariableDeclaration(ContinuationVariables.asyncOp,
+                type: FunctionType([
+                  const DynamicType(),
+                  helper.coreTypes
+                      .stackTraceRawType(staticTypeContext.nullable),
+                ], const DynamicType(), staticTypeContext.nonNullable)),
         thenContinuationVariable = VariableDeclaration(
             ContinuationVariables.asyncOpThen,
             type: FunctionType(const [const DynamicType()], const DynamicType(),
@@ -581,12 +580,11 @@
     // var :async_op_error;
     statements.add(catchErrorContinuationVariable);
 
-    // :async_op([:result, :exception, :stack_trace]) {
+    // :async_op(:result_or_exception, :stack_trace) {
     //     modified <node.body>;
     // }
     final parameters = <VariableDeclaration>[
       expressionRewriter!.asyncResult,
-      new VariableDeclaration(ContinuationVariables.exceptionParam),
       new VariableDeclaration(ContinuationVariables.stackTraceParam),
     ];
 
@@ -595,7 +593,6 @@
     // Dart async marker to decide if functions are debuggable.)
     final function = new FunctionNode(buildWrappedBody(),
         positionalParameters: parameters,
-        requiredParameterCount: 0,
         asyncMarker: AsyncMarker.SyncYielding,
         dartAsyncMarker: AsyncMarker.Sync)
       ..fileOffset = enclosingFunction.fileOffset
@@ -1413,9 +1410,9 @@
           valueType.withDeclaredNullability(Nullability.nullable);
     }
 
-    // :async_op();
+    // :async_op(null, null);
     final startStatement = ExpressionStatement(LocalFunctionInvocation(
-        nestedClosureVariable, Arguments([]),
+        nestedClosureVariable, Arguments([NullLiteral(), NullLiteral()]),
         functionType: FunctionType(
             [], const DynamicType(), staticTypeContext.nonNullable))
       ..fileOffset = enclosingFunction.fileOffset);
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index e063504..a881185 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -53,7 +53,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -67,7 +67,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -84,7 +84,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -98,7 +98,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -117,13 +117,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           dart.core::print("I");
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(LoadLibrary(j), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(LoadLibrary(j), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t2 = CheckLibraryIsLoaded(j) in j::j();
           break #L3;
         }
@@ -135,7 +135,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -152,7 +152,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -166,7 +166,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -185,17 +185,17 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
           dart.core::print("F");
-          [yield] let dynamic #t3 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t3 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t4 = CheckLibraryIsLoaded(g) in g::g();
           break #L5;
-          [yield] let dynamic #t5 = dart.async::_awaitHelper(LoadLibrary(i), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t5 = dart.async::_awaitHelper(LoadLibrary(i), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t6 = CheckLibraryIsLoaded(i) in i::i();
           break #L5;
         }
@@ -207,7 +207,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -225,13 +225,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
           dart.core::print("E");
-          [yield] let dynamic #t7 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t7 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t8 = CheckLibraryIsLoaded(g) in g::g();
           break #L6;
         }
@@ -243,7 +243,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -262,13 +262,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L7:
         {
           dart.core::print("C");
-          [yield] let dynamic #t9 = dart.async::_awaitHelper(LoadLibrary(f), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t9 = dart.async::_awaitHelper(LoadLibrary(f), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t10 = CheckLibraryIsLoaded(f) in f::f();
           break #L7;
         }
@@ -280,7 +280,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -297,7 +297,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L8:
         {
@@ -313,7 +313,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -330,7 +330,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L9:
         {
@@ -346,7 +346,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -364,13 +364,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L10:
         {
           dart.core::print("A");
-          [yield] let dynamic #t11 = dart.async::_awaitHelper(LoadLibrary(d), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t11 = dart.async::_awaitHelper(LoadLibrary(d), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t12 = CheckLibraryIsLoaded(d) in d::d();
           break #L10;
         }
@@ -382,7 +382,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -401,14 +401,14 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L11:
         {
-          [yield] let dynamic #t13 = dart.async::_awaitHelper(a::a(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t14 = dart.async::_awaitHelper(b::b(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t13 = dart.async::_awaitHelper(a::a(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t14 = dart.async::_awaitHelper(b::b(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
         }
         dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
@@ -418,7 +418,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
index f72ce42..e098162 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
@@ -19,7 +19,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -50,15 +50,15 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           [yield] let dynamic #t1 = asy::_awaitHelper( block {
             final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
             _in::reachabilityFence(this);
-          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-          final core::int :expressionValueWrappedFinalizable = _in::unsafeCast<core::int>(:result);
+          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+          final core::int :expressionValueWrappedFinalizable = _in::unsafeCast<core::int>(:result_or_exception);
           :return_value = block {
             _in::reachabilityFence(this);
           } =>:expressionValueWrappedFinalizable;
@@ -72,7 +72,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -91,7 +91,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -106,7 +106,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -119,30 +119,30 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
         [yield] let dynamic #t2 = asy::_awaitHelper( block {
           final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
           _in::reachabilityFence(finalizable);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
         [yield] let dynamic #t3 = asy::_awaitHelper( block {
           final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 5);
           _in::reachabilityFence(finalizable);
           _in::reachabilityFence(finalizable2);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
         [yield] let dynamic #t4 = asy::_awaitHelper( block {
           final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 4);
           _in::reachabilityFence(finalizable);
           _in::reachabilityFence(finalizable2);
           _in::reachabilityFence(finalizable3);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         :return_value = block {
           final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
           _in::reachabilityFence(finalizable);
@@ -159,7 +159,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -172,7 +172,7 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -181,8 +181,8 @@
         [yield] let dynamic #t5 = asy::_awaitHelper( block {
           final asy::Future<core::int> :expressionValueWrappedFinalizable = asyncResult;
           _in::reachabilityFence(finalizable);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<core::int>(:result));
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::int>(:result_or_exception));
         _in::reachabilityFence(finalizable);
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -193,7 +193,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
index 01a6c61..18fae35 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
@@ -23,7 +23,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -43,8 +43,8 @@
             _in::reachabilityFence(finalizable);
             _in::reachabilityFence(finalizable2);
             _in::reachabilityFence(finalizable3);
-          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error, :async_op) in null;
-          _in::unsafeCast<core::int>(:result);
+          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+          _in::unsafeCast<core::int>(:result_or_exception);
           final self::MyFinalizable finalizable4 = new self::MyFinalizable::•();
           if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 4) {
             {
@@ -96,7 +96,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -109,8 +109,8 @@
             #L3:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final core::int element = :for-iterator.{asy::_StreamIterator::current}{core::int};
                 {
                   core::print(element);
@@ -121,8 +121,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         _in::reachabilityFence(finalizable);
@@ -135,7 +135,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
index 0f8f453..da5be5f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
@@ -15,7 +15,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -30,7 +30,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -50,7 +50,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -79,14 +79,14 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :async_temporary_0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         :async_temporary_0 = [@vm.inferred-type.metadata=#lib::A] self::foo();
-        [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] :async_temporary_0{dynamic}.bar(:result), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] :async_temporary_0{dynamic}.bar(:result_or_exception), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -96,7 +96,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/runtime/docs/pragmas.md b/runtime/docs/pragmas.md
index 77d6d8e..90eb126 100644
--- a/runtime/docs/pragmas.md
+++ b/runtime/docs/pragmas.md
@@ -11,6 +11,7 @@
 | `vm:prefer-inline` | [Inline a function or method when possible](compiler/pragmas_recognized_by_compiler.md#requesting-a-function-be-inlined) |
 | `vm:notify-debugger-on-exception` | Marks a function that catches exceptions, making the VM treat any caught exception as if they were uncaught. This can be used to notify an attached debugger during debugging, without pausing the app during regular execution. |
 | `vm:external-name` | Allows to specify an external (native) name for an `external` function. This name is used to lookup native implementation via native resolver associated with the current library through embedding APIs. This is a replacement for legacy VM specific `native "name"` syntax. |
+| `vm:invisible` | Allows to mark a function as invisible so it will not appear on stack traces. |
 
 ## Unsafe pragmas for general use
 
diff --git a/runtime/tests/vm/dart/invisible_function_pragma_test.dart b/runtime/tests/vm/dart/invisible_function_pragma_test.dart
new file mode 100644
index 0000000..dff913a
--- /dev/null
+++ b/runtime/tests/vm/dart/invisible_function_pragma_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'causal_stacks/utils.dart';
+
+main() async {
+  StackTrace trace = StackTrace.empty;
+
+  A.visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      new A.visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  A.invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visibleClosure.visibleInner',
+    r'^#2      visibleClosure',
+    r'^#3      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      invisibleClosure',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+}
+
+class A {
+  A.visible(void Function() fun) {
+    fun();
+  }
+
+  @pragma('vm:invisible')
+  A.invisible(void Function() fun) {
+    fun();
+  }
+}
+
+void visible(void Function() fun) => fun();
+
+@pragma('vm:invisible')
+void invisible(void Function() fun) => fun();
+
+void visibleClosure(void Function() fun) {
+  visibleInner() {
+    fun();
+  }
+
+  visibleInner();
+}
+
+void invisibleClosure(void Function() fun) {
+  @pragma('vm:invisible')
+  invisibleInner() {
+    fun();
+  }
+
+  invisibleInner();
+}
diff --git a/runtime/tests/vm/dart_2/invisible_function_pragma_test.dart b/runtime/tests/vm/dart_2/invisible_function_pragma_test.dart
new file mode 100644
index 0000000..6e0d7cf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/invisible_function_pragma_test.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.9
+
+import 'causal_stacks/utils.dart';
+
+main() async {
+  StackTrace trace = StackTrace.empty;
+
+  A.visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      new A.visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  A.invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visibleClosure.visibleInner',
+    r'^#2      visibleClosure',
+    r'^#3      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      invisibleClosure',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+}
+
+class A {
+  A.visible(void Function() fun) {
+    fun();
+  }
+
+  @pragma('vm:invisible')
+  A.invisible(void Function() fun) {
+    fun();
+  }
+}
+
+void visible(void Function() fun) => fun();
+
+@pragma('vm:invisible')
+void invisible(void Function() fun) => fun();
+
+void visibleClosure(void Function() fun) {
+  visibleInner() {
+    fun();
+  }
+
+  visibleInner();
+}
+
+void invisibleClosure(void Function() fun) {
+  @pragma('vm:invisible')
+  invisibleInner() {
+    fun();
+  }
+
+  invisibleInner();
+}
diff --git a/runtime/vm/compiler/backend/il_test_helper.cc b/runtime/vm/compiler/backend/il_test_helper.cc
index caa35ac..9523ad8 100644
--- a/runtime/vm/compiler/backend/il_test_helper.cc
+++ b/runtime/vm/compiler/backend/il_test_helper.cc
@@ -156,15 +156,15 @@
   SpeculativeInliningPolicy speculative_policy(/*enable_suppression=*/false);
 
 #if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
-  const bool use_far_branches = false;
+  const intptr_t far_branch_level = 0;
 #else
-  const bool use_far_branches = true;
+  const intptr_t far_branch_level = 1;
 #endif
 
   ASSERT(pass_state_->inline_id_to_function.length() ==
          pass_state_->caller_inline_id.length());
   compiler::ObjectPoolBuilder object_pool_builder;
-  compiler::Assembler assembler(&object_pool_builder, use_far_branches);
+  compiler::Assembler assembler(&object_pool_builder, far_branch_level);
   FlowGraphCompiler graph_compiler(
       &assembler, flow_graph_, *parsed_function_, optimized,
       &speculative_policy, pass_state_->inline_id_to_function,
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 00c2160..b20723b 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -5210,36 +5210,35 @@
   yield_continuations().Add(YieldContinuation(anchor, CurrentTryIndex()));
 
   Fragment continuation(instructions.entry, anchor);
-
   RELEASE_ASSERT(parsed_function()->function().IsAsyncClosure() ||
                  parsed_function()->function().IsAsyncGenClosure() ||
                  parsed_function()->function().IsSyncGenClosure());
 
   // TODO(43900): Only emit this when needed.
   {
-    // If function is {async, async gen, sync yielding} closure it takes three
-    // parameters where the second and the third are exception and stack_trace.
-    // Check if exception is non-null and rethrow it.
+    // Our sync-yielding functions can be invoked with either a yield result or
+    // with an non-null exception & stacktrace.
     //
-    //   :sync_op(:iterator, [:exception, :stack_trace]) {
+    // We detect the case we're in based on the nullability of stacktrace in
+    //
+    //   :sync_op(:iterator, [:exception, :stack_trace]) { }
+    //
     // or:
-    //   :async_op(:result, [:exception, :stack_trace]) {
-    //     ...
-    //     Continuation<index>:
-    //       if (:exception != null) rethrow(:exception, :stack_trace);
-    //     ...
-    //   }
     //
-    LocalVariable* exception_var = parsed_function()->ParameterVariable(2);
-    LocalVariable* stack_trace_var = parsed_function()->ParameterVariable(3);
-    ASSERT(exception_var->name().ptr() == Symbols::ExceptionParameter().ptr());
+    //   :async_op(:result_or_exception, :stack_trace) { }
+    //
+    const auto& fun = parsed_function()->function();
+    LocalVariable* exception_var =
+        parsed_function()->ParameterVariable(fun.IsSyncGenClosure() ? 2 : 1);
+    LocalVariable* stack_trace_var =
+        parsed_function()->ParameterVariable(fun.IsSyncGenClosure() ? 3 : 2);
     ASSERT(stack_trace_var->name().ptr() ==
            Symbols::StackTraceParameter().ptr());
 
     TargetEntryInstr* no_error;
     TargetEntryInstr* error;
 
-    continuation += LoadLocal(exception_var);
+    continuation += LoadLocal(stack_trace_var);
     continuation += BranchIfNull(&no_error, &error);
 
     Fragment rethrow(/*instruction=*/error);
@@ -5471,6 +5470,13 @@
         signature ^= ClassFinalizer::FinalizeType(signature);
         function.SetSignature(signature);
 
+        if (has_pragma) {
+          if (Library::FindPragma(thread(), /*only_core=*/false, function,
+                                  Symbols::vm_invisible())) {
+            function.set_is_visible(false);
+          }
+        }
+
         ClosureFunctionsCache::AddClosureFunctionLocked(function);
         break;
       }
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 778673b..6c67e4c 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -237,6 +237,7 @@
   V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40cdd9e1)  \
   V(::, _getNativeField, GetNativeField, 0xa0139b85)                           \
   V(::, reachabilityFence, ReachabilityFence, 0x730f2b7f)                      \
+  V(::, _asyncThenWrapperHelper, AsyncThenWrapperHelper, 0xd9974c34)           \
   V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x1dcaf73d)                          \
   V(_Future, timeout, FutureTimeout, 0x73041520)                               \
   V(Future, wait, FutureWait, 0x495c83cd)                                      \
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 0e97fbb..4e4f9a1 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1956,11 +1956,15 @@
 
   const intptr_t length = code_array.Length();
   bool async_frames = false;
+  bool skip_next_gap_marker = false;
   for (intptr_t i = 0; i < length; ++i) {
     code ^= code_array.At(i);
-
     if (code.ptr() == StubCode::AsynchronousGapMarker().ptr()) {
-      stack_trace->AddMarker(ActivationFrame::kAsyncSuspensionMarker);
+      if (!skip_next_gap_marker) {
+        stack_trace->AddMarker(ActivationFrame::kAsyncSuspensionMarker);
+      }
+      skip_next_gap_marker = false;
+
       // Once we reach a gap, the rest is async.
       async_frames = true;
       continue;
@@ -1978,6 +1982,7 @@
     // Skip invisible function frames.
     function ^= code.function();
     if (!function.is_visible()) {
+      skip_next_gap_marker = true;
       continue;
     }
 
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 0507227..0b1eb10 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -211,7 +211,7 @@
       inferred_type_metadata_helper_(&helper_, &constant_reader_),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)),
+      annotation_list_(GrowableObjectArray::Handle(Z)),
       potential_pragma_functions_(GrowableObjectArray::Handle(Z)),
       static_field_value_(Object::Handle(Z)),
       pragma_class_(Class::Handle(Z)),
@@ -483,7 +483,7 @@
       inferred_type_metadata_helper_(&helper_, &constant_reader_),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)),
+      annotation_list_(GrowableObjectArray::Handle(Z)),
       potential_pragma_functions_(GrowableObjectArray::Handle(Z)),
       static_field_value_(Object::Handle(Z)),
       pragma_class_(Class::Handle(Z)),
@@ -517,10 +517,10 @@
       GrowableObjectArray::Handle(Z));
 }
 
-void KernelLoader::AnnotateNativeProcedures() {
-  potential_natives_ = kernel_program_info_.potential_natives();
+void KernelLoader::AnnotateProcedures() {
+  annotation_list_ = kernel_program_info_.potential_natives();
   const intptr_t length =
-      !potential_natives_.IsNull() ? potential_natives_.Length() : 0;
+      !annotation_list_.IsNull() ? annotation_list_.Length() : 0;
   if (length == 0) return;
 
   // Prepare lazy constant reading.
@@ -540,11 +540,14 @@
   // attach the native name to it.
   Function& function = Function::Handle(Z);
   for (intptr_t i = 0; i < length; ++i) {
-    function ^= potential_natives_.At(i);
+    function ^= annotation_list_.At(i);
 
     helper_.SetOffset(function.KernelDataProgramOffset() +
                       function.kernel_offset());
-    {
+    if (function.IsGenerativeConstructor()) {
+      ConstructorHelper constructor_helper(&helper_);
+      constructor_helper.ReadUntilExcluding(ConstructorHelper::kAnnotations);
+    } else {
       ProcedureHelper procedure_helper(&helper_);
       procedure_helper.ReadUntilExcluding(ProcedureHelper::kAnnotations);
     }
@@ -570,21 +573,25 @@
           function.set_is_native(true);
           function.set_native_name(native_name);
           function.set_is_external(false);
-          break;
         } else if (constant_reader.IsInstanceConstant(constant_table_index,
                                                       pragma_class_)) {
           constant = constant_reader.ReadConstant(constant_table_index);
           ASSERT(constant.clazz() == pragma_class_.ptr());
+
+          pragma_name ^= constant.GetField(pragma_name_field_);
+
+          if (pragma_name.ptr() == Symbols::vm_invisible().ptr()) {
+            function.set_is_visible(false);
+          }
+
           // We found the annotation, let's flag the function as native and
           // set the native name!
-          pragma_name ^= constant.GetField(pragma_name_field_);
           if (pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
             pragma_options = constant.GetField(pragma_options_field_);
             if (pragma_options.IsString()) {
               function.set_is_native(true);
               function.set_native_name(String::Cast(pragma_options));
               function.set_is_external(false);
-              break;
             }
           }
         }
@@ -596,8 +603,8 @@
 
   // Clear out the list of [Function] objects which might need their native
   // name to be set after reading the constant table from the kernel blob.
-  potential_natives_ = GrowableObjectArray::null();
-  kernel_program_info_.set_potential_natives(potential_natives_);
+  annotation_list_ = GrowableObjectArray::null();
+  kernel_program_info_.set_potential_natives(annotation_list_);
 }
 
 bool KernelLoader::IsClassName(NameIndex name,
@@ -653,7 +660,7 @@
     }
     kernel_program_info_.set_constants(array);
     H.SetConstants(array);  // for caching
-    AnnotateNativeProcedures();
+    AnnotateProcedures();
     EvaluateDelayedPragmas();
 
     NameIndex main = program_->main_method();
@@ -1132,7 +1139,9 @@
     intptr_t annotation_count = helper_.ReadListLength();
     bool has_pragma_annotation;
     ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                      /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                      /*scan_annotations_lazy=*/nullptr,
+                      /*is_invisible_function=*/nullptr,
+                      &has_pragma_annotation);
     field_helper.SetJustRead(FieldHelper::kAnnotations);
 
     field_helper.ReadUntilExcluding(FieldHelper::kType);
@@ -1424,7 +1433,8 @@
   intptr_t annotation_count = helper_.ReadListLength();
   bool has_pragma_annotation = false;
   ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                    /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                    /*scan_annotations_lazy=*/nullptr,
+                    /*is_invisible_function=*/nullptr, &has_pragma_annotation);
   if (has_pragma_annotation) {
     out_class->set_has_pragma(true);
   }
@@ -1503,7 +1513,8 @@
       intptr_t annotation_count = helper_.ReadListLength();
       bool has_pragma_annotation;
       ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                        /*is_potential_native=*/nullptr,
+                        /*scan_annotations_lazy=*/nullptr,
+                        /*is_invisible_function=*/nullptr,
                         &has_pragma_annotation);
       field_helper.SetJustRead(FieldHelper::kAnnotations);
 
@@ -1628,9 +1639,12 @@
     ConstructorHelper constructor_helper(&helper_);
     constructor_helper.ReadUntilExcluding(ConstructorHelper::kAnnotations);
     intptr_t annotation_count = helper_.ReadListLength();
+    bool scan_annotations_lazy;
     bool has_pragma_annotation;
+    bool is_invisible_function;
     ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                      /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                      &scan_annotations_lazy, &is_invisible_function,
+                      &has_pragma_annotation);
     constructor_helper.SetJustRead(ConstructorHelper::kAnnotations);
     constructor_helper.ReadUntilExcluding(ConstructorHelper::kFunction);
 
@@ -1659,6 +1673,13 @@
     function.set_kernel_offset(constructor_offset);
     signature.set_result_type(T.ReceiverType(klass));
     function.set_has_pragma(has_pragma_annotation);
+    function.set_is_visible(!is_invisible_function);
+
+    if (scan_annotations_lazy) {
+      // Cannot be processed right now, so put on "pending" list.
+      EnsureAnnotationList();
+      annotation_list_.Add(function);
+    }
 
     FunctionNodeHelper function_node_helper(&helper_);
     function_node_helper.ReadUntilExcluding(
@@ -1778,21 +1799,28 @@
 //
 // Output parameters:
 //
-//   `native_name`: non-null if `@ExternalName(...)` was identified.
+//   `has_annotations_of_interest`: true if there may be annotations of
+//    interest and we need to re-try after reading the constants table.
 //
-//   `is_potential_native`: non-null if there may be an `@ExternalName(...)`
-//   annotation and we need to re-try after reading the constants table.
+//   `is_invisible_function`: if `@pragma('vm:invisible)` was found.
 //
-//   `has_pragma_annotation`: non-null if @pragma(...) was found (no information
+//   `native_name`: set if `@ExternalName(...)` / @pragma('vm:external-name)`
+//    was identified.
+//
+//   `has_pragma_annotation`: if `@pragma(...)` was found (no information
 //   is given on the kind of pragma directive).
 //
 void KernelLoader::ReadVMAnnotations(const Library& library,
                                      intptr_t annotation_count,
                                      String* native_name,
-                                     bool* is_potential_native,
+                                     bool* has_annotations_of_interest,
+                                     bool* is_invisible_function,
                                      bool* has_pragma_annotation) {
-  if (is_potential_native != nullptr) {
-    *is_potential_native = false;
+  if (has_annotations_of_interest != nullptr) {
+    *has_annotations_of_interest = false;
+  }
+  if (is_invisible_function != nullptr) {
+    *is_invisible_function = false;
   }
   *has_pragma_annotation = false;
   if (annotation_count == 0) {
@@ -1815,8 +1843,8 @@
         //
         // We therefore delay the scanning for `ExternalName {name: ... }`
         // constants in the annotation list to later.
-        if (is_potential_native != nullptr) {
-          *is_potential_native = true;
+        if (has_annotations_of_interest != nullptr) {
+          *has_annotations_of_interest = true;
         }
 
         ASSERT(kernel_program_info_.constants_table() !=
@@ -1892,11 +1920,18 @@
         } else if (constant_reader.IsInstanceConstant(constant_table_index,
                                                       pragma_class_)) {
           *has_pragma_annotation = true;
-          if (native_name != nullptr) {
+          if (native_name != nullptr || is_invisible_function != nullptr) {
             constant = constant_reader.ReadConstant(constant_table_index);
             ASSERT(constant.clazz() == pragma_class_.ptr());
             pragma_name ^= constant.GetField(pragma_name_field_);
-            if (pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
+
+            if (is_invisible_function != nullptr &&
+                pragma_name.ptr() == Symbols::vm_invisible().ptr()) {
+              *is_invisible_function = true;
+            }
+
+            if (native_name != nullptr &&
+                pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
               pragma_options = constant.GetField(pragma_options_field_);
               if (pragma_options.IsString()) {
                 *native_name ^= pragma_options.ptr();
@@ -1938,13 +1973,15 @@
   bool is_external = procedure_helper.IsExternal();
   bool is_extension_member = procedure_helper.IsExtensionMember();
   String& native_name = String::Handle(Z);
-  bool is_potential_native;
+  bool scan_annotations_lazy;
   bool has_pragma_annotation;
+  bool is_invisible_function;
   const intptr_t annotation_count = helper_.ReadListLength();
   ReadVMAnnotations(library, annotation_count, &native_name,
-                    &is_potential_native, &has_pragma_annotation);
+                    &scan_annotations_lazy, &is_invisible_function,
+                    &has_pragma_annotation);
   // If this is a potential native, we'll unset is_external in
-  // AnnotateNativeProcedures instead.
+  // AnnotateProcedures instead.
   is_external = is_external && native_name.IsNull();
   procedure_helper.SetJustRead(ProcedureHelper::kAnnotations);
   const Object& script_class =
@@ -1968,6 +2005,7 @@
   function.set_end_token_pos(procedure_helper.end_position_);
   function.set_is_synthetic(procedure_helper.IsNoSuchMethodForwarder() ||
                             procedure_helper.IsMemberSignature());
+  function.set_is_visible(!is_invisible_function);
   if (register_function) {
     functions_.Add(&function);
   } else {
@@ -2017,10 +2055,10 @@
   if (!native_name.IsNull()) {
     function.set_native_name(native_name);
   }
-  if (is_potential_native) {
+  if (scan_annotations_lazy) {
     // Cannot be processed right now, so put on "pending" list.
-    EnsurePotentialNatives();
-    potential_natives_.Add(function);
+    EnsureAnnotationList();
+    annotation_list_.Add(function);
   }
 
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 68cd64b..5654ca9 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -226,13 +226,14 @@
 
   bool IsClassName(NameIndex name, const String& library, const String& klass);
 
-  void AnnotateNativeProcedures();
+  void AnnotateProcedures();
   void EvaluateDelayedPragmas();
 
   void ReadVMAnnotations(const Library& library,
                          intptr_t annotation_count,
                          String* native_name,
-                         bool* is_potential_native,
+                         bool* has_annotations_of_interest,
+                         bool* is_invisible_function,
                          bool* has_pragma_annotation);
 
   KernelLoader(const Script& script,
@@ -360,13 +361,13 @@
     ASSERT(pragma_class_.is_declaration_loaded());
   }
 
-  void EnsurePotentialNatives() {
-    potential_natives_ = kernel_program_info_.potential_natives();
-    if (potential_natives_.IsNull()) {
+  void EnsureAnnotationList() {
+    annotation_list_ = kernel_program_info_.potential_natives();
+    if (annotation_list_.IsNull()) {
       // To avoid too many grows in this array, we'll set it's initial size to
       // something close to the actual number of potential native functions.
-      potential_natives_ = GrowableObjectArray::New(100, Heap::kNew);
-      kernel_program_info_.set_potential_natives(potential_natives_);
+      annotation_list_ = GrowableObjectArray::New(100, Heap::kNew);
+      kernel_program_info_.set_potential_natives(annotation_list_);
     }
   }
 
@@ -403,7 +404,7 @@
 
   Class& external_name_class_;
   Field& external_name_field_;
-  GrowableObjectArray& potential_natives_;
+  GrowableObjectArray& annotation_list_;
   GrowableObjectArray& potential_pragma_functions_;
   Object& static_field_value_;
 
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 583e055..0ef8b4d 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -55,7 +55,8 @@
 // Instance caches library and field references.
 // This way we don't have to do the look-ups for every frame in the stack.
 CallerClosureFinder::CallerClosureFinder(Zone* zone)
-    : receiver_context_(Context::Handle(zone)),
+    : closure_(Closure::Handle(zone)),
+      receiver_context_(Context::Handle(zone)),
       receiver_function_(Function::Handle(zone)),
       parent_function_(Function::Handle(zone)),
       context_entry_(Object::Handle(zone)),
@@ -74,6 +75,7 @@
       controller_subscription_class(Class::Handle(zone)),
       buffering_stream_subscription_class(Class::Handle(zone)),
       stream_iterator_class(Class::Handle(zone)),
+      async_then_wrapper_(Function::Handle(zone)),
       future_result_or_listeners_field(Field::Handle(zone)),
       callback_field(Field::Handle(zone)),
       future_listener_state_field(Field::Handle(zone)),
@@ -110,6 +112,9 @@
   stream_iterator_class =
       async_lib.LookupClassAllowPrivate(Symbols::_StreamIterator());
   ASSERT(!stream_iterator_class.IsNull());
+  async_then_wrapper_ =
+      async_lib.LookupFunctionAllowPrivate(Symbols::AsyncThenWrapperHelper());
+  ASSERT(!async_then_wrapper_.IsNull());
 
   // Look up fields:
   // - async:
@@ -210,6 +215,12 @@
 
 ClosurePtr CallerClosureFinder::GetCallerInFutureListener(
     const Object& future_listener) {
+  closure_ = GetCallerInFutureListenerInternal(future_listener);
+  return UnwrapAsyncThen(closure_);
+}
+
+ClosurePtr CallerClosureFinder::GetCallerInFutureListenerInternal(
+    const Object& future_listener) {
   auto value = GetFutureListenerState(future_listener);
 
   // If the _FutureListener is a `then`, `catchError`, or `whenComplete`
@@ -227,6 +238,26 @@
 }
 
 ClosurePtr CallerClosureFinder::FindCaller(const Closure& receiver_closure) {
+  closure_ = FindCallerInternal(receiver_closure);
+  return UnwrapAsyncThen(closure_);
+}
+
+ClosurePtr CallerClosureFinder::UnwrapAsyncThen(const Closure& closure) {
+  if (closure.IsNull()) return closure.ptr();
+
+  receiver_function_ = closure.function();
+  receiver_function_ = receiver_function_.parent_function();
+  if (receiver_function_.recognized_kind() ==
+      MethodRecognizer::kAsyncThenWrapperHelper) {
+    receiver_context_ = closure.context();
+    RELEASE_ASSERT(receiver_context_.num_variables() == 1);
+    return Closure::RawCast(receiver_context_.At(0));
+  }
+  return closure.ptr();
+}
+
+ClosurePtr CallerClosureFinder::FindCallerInternal(
+    const Closure& receiver_closure) {
   receiver_function_ = receiver_closure.function();
   receiver_context_ = receiver_closure.context();
 
@@ -358,23 +389,18 @@
   ASSERT(function.IsAsyncClosure() || function.IsAsyncGenClosure());
 
   // The callee has function signature
-  //   :async_op([result, exception, stack])
-  // So we are guaranteed to
-  //   a) have only tagged arguments on the stack until we find the :async_op
-  //      closure, and
-  //   b) find the async closure.
-  const intptr_t kNumClosureAndArgs = 4;
-  auto& closure = Closure::Handle();
-  for (intptr_t i = 0; i < kNumClosureAndArgs; i++) {
-    ObjectPtr arg = last_object_in_caller[i];
-    if (arg->IsHeapObject() && arg->GetClassId() == kClosureCid) {
-      closure = Closure::RawCast(arg);
-      if (closure.function() == function.ptr()) {
-        return closure.ptr();
-      }
+  //   :async_op(result_or_exception, stack)
+  // so the "this" closure is the 3rd argument.
+  ObjectPtr arg = last_object_in_caller[2];
+  if (arg->IsHeapObject() && arg->GetClassId() == kClosureCid) {
+    auto& closure = Closure::Handle();
+    closure = Closure::RawCast(arg);
+    if (closure.function() == function.ptr()) {
+      return closure.ptr();
     }
   }
-  UNREACHABLE();
+  ASSERT(arg == Symbols::OptimizedOut().ptr());
+  return Closure::null();
 }
 
 ClosurePtr StackTraceUtils::ClosureFromFrameFunction(
@@ -395,13 +421,10 @@
   if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
     // Next, look up caller's closure on the stack and walk backwards
     // through the yields.
-    //
-    // Due the async/async* closures having optional parameters, the
-    // caller-frame's pushed arguments includes the closure and should never be
-    // modified (even in the event of deopts).
     ObjectPtr* last_caller_obj =
         reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
     closure = FindClosureInFrame(last_caller_obj, function);
+    if (closure.IsNull()) return Closure::null();
 
     // If this async function hasn't yielded yet, we're still dealing with a
     // normal stack. Continue to next frame as usual.
@@ -589,13 +612,11 @@
         function.parent_function() != Function::null()) {
       if (async_function.ptr() == function.parent_function()) {
         if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
-          // Due the async/async* closures having optional parameters, the
-          // caller-frame's pushed arguments includes the closure and should
-          // never be modified (even in the event of deopts).
           ObjectPtr* last_caller_obj =
               reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
           closure = FindClosureInFrame(last_caller_obj, function);
-          if (CallerClosureFinder::IsRunningAsync(closure)) {
+          if (!closure.IsNull() &&
+              CallerClosureFinder::IsRunningAsync(closure)) {
             *sync_async_end = false;
             return frame_count;
           }
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index c2eb02a..6893a7f 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -56,6 +56,11 @@
   static bool IsRunningAsync(const Closure& receiver_closure);
 
  private:
+  ClosurePtr FindCallerInternal(const Closure& receiver_closure);
+  ClosurePtr GetCallerInFutureListenerInternal(const Object& future_listener);
+  ClosurePtr UnwrapAsyncThen(const Closure& closure);
+
+  Closure& closure_;
   Context& receiver_context_;
   Function& receiver_function_;
   Function& parent_function_;
@@ -77,6 +82,7 @@
   Class& controller_subscription_class;
   Class& buffering_stream_subscription_class;
   Class& stream_iterator_class;
+  Function& async_then_wrapper_;
 
   Field& future_result_or_listeners_field;
   Field& callback_field;
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 6099df7..707df3d 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -31,6 +31,7 @@
   V(AsyncStarMoveNextHelper, "_asyncStarMoveNextHelper")                       \
   V(AwaitContextVar, ":await_ctx_var")                                         \
   V(AwaitJumpVar, ":await_jump_var")                                           \
+  V(AsyncThenWrapperHelper, "_asyncThenWrapperHelper")                         \
   V(Bool, "bool")                                                              \
   V(BooleanExpression, "boolean expression")                                   \
   V(BoundsCheckForPartialInstantiation, "_boundsCheckForPartialInstantiation") \
@@ -102,7 +103,6 @@
   V(EvalSourceUri, "evaluate:source")                                          \
   V(EvaluateAssertion, "_evaluateAssertion")                                   \
   V(ExceptionHandlers, "ExceptionHandlers")                                    \
-  V(ExceptionParameter, ":exception")                                          \
   V(ExceptionVar, ":exception_var")                                            \
   V(Expando, "Expando")                                                        \
   V(ExprTemp, ":expr_temp")                                                    \
@@ -477,6 +477,7 @@
   V(vm_ffi_struct_fields, "vm:ffi:struct-fields")                              \
   V(vm_unsafe_no_interrupts, "vm:unsafe:no-interrupts")                        \
   V(vm_external_name, "vm:external-name")                                      \
+  V(vm_invisible, "vm:invisible")                                              \
   V(vm_testing_print_flow_graph, "vm:testing:print-flow-graph")
 
 // Contains a list of frequently used strings in a canonicalized form. This
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 0e4dcd1..2e322f1 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -20,8 +20,12 @@
 
 // We need to pass the value as first argument and leave the second and third
 // arguments empty (used for error handling).
+@pragma("vm:recognized", "other")
 dynamic Function(dynamic) _asyncThenWrapperHelper(
-    dynamic Function(dynamic) continuation) {
+    dynamic Function(dynamic, dynamic) continuation) {
+  @pragma("vm:invisible")
+  dynamic thenWrapper(dynamic arg) => continuation(arg, /*stack_trace=*/ null);
+
   // Any function that is used as an asynchronous callback must be registered
   // in the current Zone. Normally, this is done by the future when a
   // callback is registered (for example with `.then` or `.catchError`). In our
@@ -41,17 +45,15 @@
   if (identical(currentZone, _rootZone) ||
       identical(currentZone._registerUnaryCallback,
           _rootZone._registerUnaryCallback)) {
-    return continuation;
+    return thenWrapper;
   }
-  return currentZone.registerUnaryCallback<dynamic, dynamic>(continuation);
+  return currentZone.registerUnaryCallback<dynamic, dynamic>(thenWrapper);
 }
 
 // We need to pass the exception and stack trace objects as second and third
 // parameter to the continuation.
 dynamic Function(Object, StackTrace) _asyncErrorWrapperHelper(
-    dynamic Function(dynamic, dynamic, StackTrace) continuation) {
-  // See comments of `_asyncThenWrapperHelper`.
-  dynamic errorCallback(Object e, StackTrace s) => continuation(null, e, s);
+    dynamic Function(dynamic, StackTrace) errorCallback) {
   final currentZone = Zone._current;
   if (identical(currentZone, _rootZone) ||
       identical(currentZone._registerBinaryCallback,
@@ -68,7 +70,7 @@
 ///
 /// Returns the result of registering with `.then`.
 Future _awaitHelper(var object, dynamic Function(dynamic) thenCallback,
-    dynamic Function(dynamic, StackTrace) errorCallback, Function awaiter) {
+    dynamic Function(dynamic, StackTrace) errorCallback) {
   late _Future future;
   if (object is _Future) {
     future = object;
@@ -126,7 +128,7 @@
   void runBody() {
     isScheduled = false;
     isSuspendedAtYield = false;
-    asyncStarBody();
+    asyncStarBody(null, null);
   }
 
   void scheduleGenerator() {
diff --git a/sdk/lib/_internal/vm/lib/core_patch.dart b/sdk/lib/_internal/vm/lib/core_patch.dart
index 0d1d4a8..9beb4dd 100644
--- a/sdk/lib/_internal/vm/lib/core_patch.dart
+++ b/sdk/lib/_internal/vm/lib/core_patch.dart
@@ -66,6 +66,7 @@
 // part "double_patch.dart";
 // part "errors_patch.dart";
 // part "expando_patch.dart";
+// part "finalizer_patch.dart";
 // part "function.dart";
 // part "function_patch.dart";
 // part "growable_array.dart";
diff --git a/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
new file mode 100644
index 0000000..e697230
--- /dev/null
+++ b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// All imports must be in all FFI patch files to not depend on the order
+// the patches are applied.
+import 'dart:_internal';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+// This is a placeholder file which will shortly contain a NativeFinalizer
+// implementation.
diff --git a/sdk/lib/_internal/vm/lib/finalizer_patch.dart b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
new file mode 100644
index 0000000..aec537b
--- /dev/null
+++ b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// part of "core_patch.dart";
+
+// This is a placeholder file which will shortly contain a Finalizer
+// implementation.
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 12aee71..4db66c7 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -53,6 +53,7 @@
           "_internal/vm/lib/double_patch.dart",
           "_internal/vm/lib/errors_patch.dart",
           "_internal/vm/lib/expando_patch.dart",
+          "_internal/vm/lib/finalizer_patch.dart",
           "_internal/vm/lib/function.dart",
           "_internal/vm/lib/function_patch.dart",
           "_internal/vm/lib/growable_array.dart",
@@ -88,6 +89,7 @@
           "_internal/vm/lib/ffi_patch.dart",
           "_internal/vm/lib/ffi_allocation_patch.dart",
           "_internal/vm/lib/ffi_dynamic_library_patch.dart",
+          "_internal/vm/lib/ffi_native_finalizer_patch.dart",
           "_internal/vm/lib/ffi_native_type_patch.dart",
           "_internal/vm/lib/ffi_struct_patch.dart"
         ]
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index a67349c..1730d5d 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -60,6 +60,7 @@
         - "_internal/vm/lib/double_patch.dart"
         - "_internal/vm/lib/errors_patch.dart"
         - "_internal/vm/lib/expando_patch.dart"
+        - "_internal/vm/lib/finalizer_patch.dart"
         - "_internal/vm/lib/function.dart"
         - "_internal/vm/lib/function_patch.dart"
         - "_internal/vm/lib/growable_array.dart"
@@ -93,6 +94,7 @@
         - "_internal/vm/lib/ffi_patch.dart"
         - "_internal/vm/lib/ffi_allocation_patch.dart"
         - "_internal/vm/lib/ffi_dynamic_library_patch.dart"
+        - "_internal/vm/lib/ffi_native_finalizer_patch.dart"
         - "_internal/vm/lib/ffi_native_type_patch.dart"
         - "_internal/vm/lib/ffi_struct_patch.dart"
 
diff --git a/tests/language_2/async/await_test.dart b/tests/language_2/async/await_test.dart
index 6b6443d..f8b79d2 100644
--- a/tests/language_2/async/await_test.dart
+++ b/tests/language_2/async/await_test.dart
@@ -2261,15 +2261,15 @@
   Future<S> then<S>(callback(value), {Function onError}) {
     if (onError != null) {
       if (onError is OnErrorCallback2) {
-        return new Future<S>.microtask(() => onError(_error, null));
+        return new Future<S>.microtask(() => onError(_error, StackTrace.empty));
       } else if (onError is OnErrorCallback1) {
         return new Future<S>.microtask(() => onError(_error));
       } else {
         throw new ArgumentError.value(
-          onError,
-          "onError",
-          "Error handler must accept one Object or one Object and a StackTrace"
-          " as arguments, and return a valid result");
+            onError,
+            "onError",
+            "Error handler must accept one Object or one Object and a StackTrace"
+                " as arguments, and return a valid result");
       }
     }
     return new Future<S>.error(_error);
diff --git a/tools/VERSION b/tools/VERSION
index 949b79b..9105ba2 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 122
+PRERELEASE 123
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
index d1cc30f..de161ed 100755
--- a/tools/addlatexhash.dart
+++ b/tools/addlatexhash.dart
@@ -22,8 +22,6 @@
 // NB: This utility assumes UN*X style line endings, \n, in the LaTeX
 // source file received as input; it will not work with other styles.
 
-// @dart = 2.9
-
 // ignore_for_file: constant_identifier_names
 
 import 'dart:convert';
@@ -269,7 +267,7 @@
   /// the preceding \LMHash{} block should stop before the line of
   /// this \LMHash{} command.  Note that hash blocks may stop earlier,
   /// because they cannot contain sectioning commands.
-  int getStartLineNumber() => null;
+  int? getStartLineNumber() => null;
 }
 
 class HashMarkerEvent extends HashEvent {
@@ -282,7 +280,7 @@
   // reached), so [endLineNumber] will be initialized in a separate
   // scan.  Also note that the block may end earlier, because a block
   // ends if it would otherwise include a sectioning command.
-  int endLineNumber;
+  int? endLineNumber;
 
   HashMarkerEvent(this.startLineNumber);