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 386dd91..bca2267 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -141,6 +141,11 @@
   }
 
   @override
+  void beginUncategorizedTopLevelDeclaration(Token token) {
+    listener?.beginUncategorizedTopLevelDeclaration(token);
+  }
+
+  @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     listener?.beginExtensionDeclarationPrelude(extensionKeyword);
   }
@@ -387,8 +392,8 @@
   }
 
   @override
-  void beginThenControlFlow(Token token) {
-    listener?.beginThenControlFlow(token);
+  void handleThenControlFlow(Token token) {
+    listener?.handleThenControlFlow(token);
   }
 
   @override
@@ -480,6 +485,11 @@
   }
 
   @override
+  void handleEndingBinaryExpression(Token token) {
+    listener?.handleEndingBinaryExpression(token);
+  }
+
+  @override
   void endBlock(
       int count, Token beginToken, Token endToken, BlockKind blockKind) {
     listener?.endBlock(count, beginToken, endToken, blockKind);
@@ -995,8 +1005,13 @@
   }
 
   @override
-  void endTopLevelDeclaration(Token token) {
-    listener?.endTopLevelDeclaration(token);
+  void endTopLevelDeclaration(Token nextToken) {
+    listener?.endTopLevelDeclaration(nextToken);
+  }
+
+  @override
+  void beginFields(Token lastConsumed) {
+    listener?.beginFields(lastConsumed);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 0d57f76..c898b58 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -55,22 +55,22 @@
     logEvent("AsyncModifier");
   }
 
+  /// Ended by either [endAwaitExpression] or [endInvalidAwaitExpression].
   void beginAwaitExpression(Token token) {}
 
+  /// One of the two possible corresponding end events for
+  /// [beginAwaitExpression].
   void endAwaitExpression(Token beginToken, Token endToken) {
     logEvent("AwaitExpression");
   }
 
+  /// One of the two possible corresponding end events for
+  /// [beginAwaitExpression].
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
     logEvent("InvalidAwaitExpression");
   }
 
-  void endInvalidYieldStatement(Token beginToken, Token starToken,
-      Token endToken, MessageCode errorCode) {
-    logEvent("InvalidYieldStatement");
-  }
-
   void beginBlock(Token token, BlockKind blockKind) {}
 
   void endBlock(
@@ -111,8 +111,11 @@
 
   /// Called before parsing a class or named mixin application.
   ///
-  /// At this point only the `class` keyword have been seen, so we know a
-  /// declaration is coming but not its name or type parameter declarations.
+  /// At this point only the `class` or `mixin` keyword have been seen,
+  /// so we know a declaration is coming but not its name or type
+  /// parameter declarations.
+  ///
+  /// Ended by [endTopLevelDeclaration].
   void beginClassOrNamedMixinApplicationPrelude(Token token) {}
 
   /// Handle the beginning of a class declaration.
@@ -208,11 +211,18 @@
     logEvent("MixinDeclaration");
   }
 
+  /// Begins a not-further-categorized top-level declaration.
+  ///
+  /// Ended by [endTopLevelDeclaration].
+  void beginUncategorizedTopLevelDeclaration(Token token) {}
+
   /// Handle the beginning of an extension methods declaration.  Substructures:
   /// - metadata
   ///
   /// At this point only the `extension` keyword have been seen, so we know a
   /// declaration is coming but not its name or type parameter declarations.
+  ///
+  /// Ended by [endTopLevelDeclaration].
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {}
 
   /// Handle the beginning of an extension methods declaration.  Substructures:
@@ -315,6 +325,8 @@
     logEvent("ExpressionStatement");
   }
 
+  /// Note that this is ended by [endClassFactoryMethod],
+  /// [endMixinFactoryMethod] or [endExtensionFactoryMethod].
   void beginFactoryMethod(
       Token lastConsumed, Token externalToken, Token constToken) {}
 
@@ -366,7 +378,7 @@
   /// - Type
   /// - Variable declarations (count times)
   ///
-  /// Doesn't have a corresponding begin event, use [beginMember] instead.
+  /// Started by [beginFields].
   void endClassFields(
       Token abstractToken,
       Token externalToken,
@@ -386,7 +398,7 @@
   /// - Type
   /// - Variable declarations (count times)
   ///
-  /// Doesn't have a corresponding begin event, use [beginMember] instead.
+  /// Started by [beginFields].
   void endMixinFields(
       Token abstractToken,
       Token externalToken,
@@ -408,7 +420,7 @@
   /// - Type
   /// - Variable declarations (count times)
   ///
-  /// Doesn't have a corresponding begin event, use [beginMember] instead.
+  /// Started by [beginFields].
   void endExtensionFields(
       Token abstractToken,
       Token externalToken,
@@ -829,6 +841,10 @@
     logEvent("StringJuxtaposition");
   }
 
+  /// Called for class-like members (class, mixin, extension), but each member
+  /// should also have a more specific begin/end pair, e.g.
+  /// [beginFactoryMethod]/[endClassFactoryMethod]/[endMixinFactoryMethod]/
+  /// [endExtensionFactoryMethod].
   void beginMember() {}
 
   /// Handle an invalid member declaration. Substructures:
@@ -837,7 +853,10 @@
     logEvent("InvalidMember");
   }
 
-  /// This event is added for convenience. Normally, one should override
+  /// This event is added for convenience to the listener.
+  /// Members will actually be begin/end'ed by more specific
+  /// events as well.
+  /// Normally listeners should probably override
   /// [endClassFields], [endMixinFields], [endExtensionFields],
   /// [endClassMethod], [endMixinMethod], [endExtensionMethod],
   /// [endClassConstructor], [endMixinConstructor],
@@ -846,8 +865,11 @@
     logEvent("Member");
   }
 
-  /// Handle the beginning of a method declaration.  Substructures:
+  /// Handle the beginning of a class-like method declaration.  Substructures:
   /// - metadata
+  /// Note that this is ended with [endClassConstructor], [endClassMethod],
+  /// [endExtensionConstructor], [endExtensionMethod], [endMixinConstructor] or
+  /// [endMixinMethod].
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
       Token varFinalOrConst, Token getOrSet, Token name) {}
 
@@ -1075,11 +1097,21 @@
     logEvent("RethrowStatement");
   }
 
-  /// This event is added for convenience. Normally, one should use
+  /// This event is added for convenience for the listener.
+  /// All top-level declarations will actually be begin/end'ed by more specific
+  /// events as well, e.g. [beginClassDeclaration]/[endClassDeclaration],
+  /// [beginEnum]/[endEnum] etc.
+  ///
+  /// Normally listeners should probably override
   /// [endClassDeclaration], [endNamedMixinApplication], [endEnum],
   /// [endFunctionTypeAlias], [endLibraryName], [endImport], [endExport],
-  /// [endPart], [endPartOf], [endTopLevelFields], or [endTopLevelMethod].
-  void endTopLevelDeclaration(Token token) {
+  /// [endPart], [endPartOf], [endTopLevelFields], or [endTopLevelMethod]
+  /// instead.
+  ///
+  /// Started by one of [beginExtensionDeclarationPrelude],
+  /// [beginClassOrNamedMixinApplicationPrelude], [beginTopLevelMember] or
+  /// [beginUncategorizedTopLevelDeclaration].
+  void endTopLevelDeclaration(Token nextToken) {
     logEvent("TopLevelDeclaration");
   }
 
@@ -1095,18 +1127,24 @@
   }
 
   /// Marks the beginning of a top level field or method declaration.
-  /// Doesn't have a corresponding end event.
-  /// See [endTopLevelFields] and [endTopLevelMethod].
+  /// See also [endTopLevelFields] and [endTopLevelMethod].
+  ///
+  /// Ended by [endTopLevelDeclaration].
   void beginTopLevelMember(Token token) {}
 
+  /// Marks the beginning of a fields declaration.
+  /// Note that this is ended with [endTopLevelFields], [endClassFields],
+  /// [endMixinFields] or [endExtensionFields].
+  void beginFields(Token lastConsumed) {}
+
   /// Handle the end of a top level variable declaration.  Substructures:
   /// - Metadata
   /// - Type
   /// - Repeated [count] times:
   ///   - Variable name (identifier)
   ///   - Field initializer
-  /// Doesn't have a corresponding begin event.
-  /// Use [beginTopLevelMember] instead.
+  ///
+  /// Started by [beginFields].
   void endTopLevelFields(
       Token externalToken,
       Token staticToken,
@@ -1291,6 +1329,12 @@
     logEvent("BinaryExpression");
   }
 
+  /// Called for `.`, `?.` and `..`.
+  void handleEndingBinaryExpression(Token token) {
+    // TODO(jensj): push implementation into subclasses
+    endBinaryExpression(token);
+  }
+
   /// Called when the parser encounters a `?` operator and begins parsing a
   /// conditional expression.
   void beginConditionalExpression(Token question) {}
@@ -1311,24 +1355,30 @@
   }
 
   /// Called before parsing a "for" control flow list, set, or map entry.
+  /// Ended by either [endForControlFlow] or [endForInControlFlow].
   void beginForControlFlow(Token awaitToken, Token forToken) {}
 
   /// Called after parsing a "for" control flow list, set, or map entry.
+  /// One of the two possible corresponding end events for
+  /// [beginForControlFlow].
   void endForControlFlow(Token token) {
     logEvent('endForControlFlow');
   }
 
   /// Called after parsing a "for-in" control flow list, set, or map entry.
+  /// One of the two possible corresponding end events for
+  /// [beginForControlFlow].
   void endForInControlFlow(Token token) {
     logEvent('endForInControlFlow');
   }
 
   /// Called before parsing an `if` control flow list, set, or map entry.
+  /// Ended by either [endIfControlFlow] or [endIfElseControlFlow].
   void beginIfControlFlow(Token ifToken) {}
 
   /// Called before parsing the `then` portion of an `if` control flow list,
   /// set, or map entry.
-  void beginThenControlFlow(Token token) {}
+  void handleThenControlFlow(Token token) {}
 
   /// Called before parsing the `else` portion of an `if` control flow list,
   /// set, or map entry.
@@ -1340,6 +1390,8 @@
   /// Substructures:
   /// - if conditional expression
   /// - expression
+  /// One of the two possible corresponding end events for
+  /// [beginIfControlFlow].
   void endIfControlFlow(Token token) {
     logEvent("endIfControlFlow");
   }
@@ -1349,6 +1401,8 @@
   /// - if conditional expression
   /// - then expression
   /// - else expression
+  /// One of the two possible corresponding end events for
+  /// [beginIfControlFlow].
   void endIfElseControlFlow(Token token) {
     logEvent("endIfElseControlFlow");
   }
@@ -1589,12 +1643,22 @@
     logEvent("handleVoidKeywordWithTypeArguments");
   }
 
+  /// Ended by either [endYieldStatement] or [endInvalidYieldStatement].
   void beginYieldStatement(Token token) {}
 
+  /// One of the two possible corresponding end events for
+  /// [beginYieldStatement].
   void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
     logEvent("YieldStatement");
   }
 
+  /// One of the two possible corresponding end events for
+  /// [beginYieldStatement].
+  void endInvalidYieldStatement(Token beginToken, Token starToken,
+      Token endToken, MessageCode errorCode) {
+    logEvent("InvalidYieldStatement");
+  }
+
   /// The parser noticed a syntax error, but was able to recover from it. The
   /// error should be reported using the [message], and the code between the
   /// beginning of the [startToken] and the end of the [endToken] should be
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
index 60d378f..9e559f1 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
@@ -145,7 +145,7 @@
     assert(optional('if', ifToken));
     parser.listener.beginIfControlFlow(ifToken);
     Token result = parser.ensureParenthesizedCondition(ifToken);
-    parser.listener.beginThenControlFlow(result);
+    parser.listener.handleThenControlFlow(result);
     return result;
   }
 
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 4aabc5b..0b5c365 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -637,6 +637,7 @@
   /// ```
   Token parseLibraryName(Token libraryKeyword) {
     assert(optional('library', libraryKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(libraryKeyword);
     listener.beginLibraryName(libraryKeyword);
     Token token = parseQualified(libraryKeyword, IdentifierContext.libraryName,
         IdentifierContext.libraryNameContinuation);
@@ -677,6 +678,7 @@
   /// ```
   Token parseImport(Token importKeyword) {
     assert(optional('import', importKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(importKeyword);
     listener.beginImport(importKeyword);
     Token token = ensureLiteralString(importKeyword);
     Token uri = token;
@@ -875,6 +877,7 @@
   /// ```
   Token parseExport(Token exportKeyword) {
     assert(optional('export', exportKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(exportKeyword);
     listener.beginExport(exportKeyword);
     Token token = ensureLiteralString(exportKeyword);
     token = parseConditionalUriStar(token);
@@ -974,6 +977,7 @@
 
   Token parsePartOrPartOf(Token partKeyword, DirectiveContext directiveState) {
     assert(optional('part', partKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(partKeyword);
     if (optional('of', partKeyword.next)) {
       directiveState?.checkPartOf(this, partKeyword);
       return parsePartOf(partKeyword);
@@ -1098,6 +1102,7 @@
   /// ```
   Token parseTypedef(Token typedefKeyword) {
     assert(optional('typedef', typedefKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(typedefKeyword);
     listener.beginFunctionTypeAlias(typedefKeyword);
     TypeInfo typeInfo = computeType(typedefKeyword, /* required = */ false);
     Token token = typeInfo.skipType(typedefKeyword);
@@ -1733,6 +1738,7 @@
   /// ```
   Token parseEnum(Token enumKeyword) {
     assert(optional('enum', enumKeyword));
+    listener.beginUncategorizedTopLevelDeclaration(enumKeyword);
     listener.beginEnum(enumKeyword);
     Token token =
         ensureIdentifier(enumKeyword, IdentifierContext.enumDeclaration);
@@ -2510,6 +2516,8 @@
       DeclarationKind kind,
       String enclosingDeclarationName,
       bool nameIsRecovered) {
+    listener.beginFields(beforeStart);
+
     // Covariant affects only the setter and final fields do not have a setter,
     // unless it's a late field (dartbug.com/40805).
     // Field that are covariant late final with initializers are checked further
@@ -4598,7 +4606,7 @@
             // [parsePrimary] instead.
             token = parsePrimary(
                 token.next, IdentifierContext.expressionContinuation);
-            listener.endBinaryExpression(operator);
+            listener.handleEndingBinaryExpression(operator);
 
             Token bangToken = token;
             if (optional('!', token.next)) {
@@ -4703,7 +4711,7 @@
           token, noTypeParamOrArg, /* checkedNullAware = */ false);
     } else {
       token = parseSend(token, IdentifierContext.expressionContinuation);
-      listener.endBinaryExpression(cascadeOperator);
+      listener.handleEndingBinaryExpression(cascadeOperator);
     }
     Token next = token.next;
     Token mark;
@@ -4713,7 +4721,7 @@
         Token period = next;
         token = parseSend(next, IdentifierContext.expressionContinuation);
         next = token.next;
-        listener.endBinaryExpression(period);
+        listener.handleEndingBinaryExpression(period);
       } else if (optional('!', next)) {
         listener.handleNonNullAssertExpression(next);
         token = next;
@@ -7208,6 +7216,7 @@
         token = next.endGroup;
       }
     }
+    listener.endMember();
     return token;
   }
 
@@ -7230,6 +7239,7 @@
         token = next.endGroup;
       }
     }
+    listener.endMember();
     return token;
   }
 
@@ -7240,6 +7250,7 @@
     // TODO(brianwilkerson): If the declaration appears to be a valid typedef
     // then skip the entire declaration so that we generate a single error
     // (above) rather than many unhelpful errors.
+    listener.endMember();
     return token;
   }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
index a29d6f0..e9d29da 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -294,9 +294,9 @@
   }
 
   @override
-  void endTopLevelDeclaration(Token token) {
+  void endTopLevelDeclaration(Token nextToken) {
     debugEvent("TopLevelDeclaration");
-    checkEmpty(token.charOffset);
+    checkEmpty(nextToken.charOffset);
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 130997a..4a88ce75 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -1154,7 +1154,8 @@
 
   @override
   void endTopLevelDeclaration(Token token) {
-    // There is no corresponding beginTopLevelDeclaration
+    // There is no corresponding beginTopLevelDeclaration.
+    // It is insteads started by another begin, see listener.
     //_expectBegin('TopLevelDeclaration');
     expectIn('CompilationUnit');
     super.endTopLevelDeclaration(token);
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 891c462..f56563a 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -68,6 +68,9 @@
   @override
   bool get supportsLateFields => false;
 
+  @override
+  bool get useStaticFieldLowering => false;
+
   // TODO(johnniwinther,sigmund): Remove this when js-interop handles getter
   //  calls encoded with an explicit property get or disallows getter calls.
   @override
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 33e19e8..8a54269 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -34,6 +34,9 @@
   @override
   bool get supportsLateFields => false;
 
+  @override
+  bool get useStaticFieldLowering => false;
+
   // TODO(johnniwinther,sigmund): Remove this when js-interop handles getter
   //  calls encoded with an explicit property get or disallows getter calls.
   @override
diff --git a/pkg/front_end/lib/src/base/command_line_options.dart b/pkg/front_end/lib/src/base/command_line_options.dart
index d8c5e33..f288ff5 100644
--- a/pkg/front_end/lib/src/base/command_line_options.dart
+++ b/pkg/front_end/lib/src/base/command_line_options.dart
@@ -9,6 +9,8 @@
   static const String nnbdWeakMode = "--nnbd-weak";
 
   static const String forceLateLowering = "--force-late-lowering";
+  static const String forceStaticFieldLowering =
+      "--force-static-field-lowering";
   static const String forceNoExplicitGetterCalls =
       "--force-no-explicit-getter-calls";
 
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 59afedc..6dcd093 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -174,6 +174,33 @@
               isCovariant);
         }
       }
+    } else if (libraryBuilder.isNonNullableByDefault &&
+        libraryBuilder.loader.target.backendTarget.useStaticFieldLowering &&
+        (isStatic || isTopLevel) &&
+        hasInitializer) {
+      if (isFinal) {
+        _fieldEncoding = new LateFinalFieldWithInitializerEncoding(
+            name,
+            fileUri,
+            charOffset,
+            charEndOffset,
+            reference,
+            lateIsSetReferenceFrom,
+            getterReferenceFrom,
+            setterReferenceFrom,
+            isCovariant);
+      } else {
+        _fieldEncoding = new LateFieldWithInitializerEncoding(
+            name,
+            fileUri,
+            charOffset,
+            charEndOffset,
+            reference,
+            lateIsSetReferenceFrom,
+            getterReferenceFrom,
+            setterReferenceFrom,
+            isCovariant);
+      }
     } else {
       assert(lateIsSetReferenceFrom == null);
       assert(getterReferenceFrom == null);
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 0e438d5..f6a2aeb 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -11,17 +11,9 @@
         InvalidType,
         Nullability,
         TypeParameter,
-        Typedef,
-        TypedefType,
-        VariableDeclaration,
-        getAsTypeArguments;
+        Typedef;
 
-import 'package:kernel/type_algebra.dart'
-    show
-        FreshTypeParameters,
-        getFreshTypeParameters,
-        substitute,
-        uniteNullabilities;
+import 'package:kernel/type_algebra.dart' show substitute, uniteNullabilities;
 
 import '../fasta_codes.dart'
     show
@@ -33,12 +25,7 @@
 
 import '../problems.dart' show unhandled;
 
-import '../source/source_library_builder.dart' show SourceLibraryBuilder;
-
 import 'class_builder.dart';
-import 'fixed_type_builder.dart';
-import 'formal_parameter_builder.dart';
-import 'function_type_builder.dart';
 import 'library_builder.dart';
 import 'metadata_builder.dart';
 import 'named_type_builder.dart';
@@ -47,27 +34,90 @@
 import 'type_declaration_builder.dart';
 import 'type_variable_builder.dart';
 
-class TypeAliasBuilder extends TypeDeclarationBuilderImpl {
-  final TypeBuilder type;
-
-  final List<TypeVariableBuilder> _typeVariables;
+abstract class TypeAliasBuilder implements TypeDeclarationBuilder {
+  TypeBuilder get type;
 
   /// The [Typedef] built by this builder.
-  final Typedef typedef;
+  Typedef get typedef;
 
   DartType thisType;
 
-  TypeAliasBuilder(List<MetadataBuilder> metadata, String name,
-      this._typeVariables, this.type, LibraryBuilder parent, int charOffset,
-      {Typedef typedef, Typedef referenceFrom})
-      : typedef = typedef ??
-            (new Typedef(name, null,
-                typeParameters: TypeVariableBuilder.typeParametersFromBuilders(
-                    _typeVariables),
-                fileUri: parent.library.fileUri,
-                reference: referenceFrom?.reference)
-              ..fileOffset = charOffset),
-        super(metadata, 0, name, parent, charOffset);
+  String get debugName;
+
+  LibraryBuilder get parent;
+
+  LibraryBuilder get library;
+
+  List<TypeVariableBuilder> get typeVariables;
+
+  int varianceAt(int index);
+
+  bool get fromDill => false;
+
+  DartType buildThisType();
+
+  /// [arguments] have already been built.
+  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+      Nullability nullability, List<DartType> arguments);
+
+  List<DartType> buildTypeArguments(
+      LibraryBuilder library, List<TypeBuilder> arguments,
+      [bool notInstanceContext]);
+
+  /// Returns `true` if this typedef is an alias of the `Null` type.
+  bool get isNullAlias;
+
+  @override
+  DartType buildType(LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
+      [bool notInstanceContext]);
+
+  /// Returns the [TypeDeclarationBuilder] for the type aliased by `this`,
+  /// based on the given [typeArguments]. It expands type aliases repeatedly
+  /// until it encounters a builder which is not a [TypeAliasBuilder].
+  ///
+  /// If [isInvocation] is false: In this case it is required that
+  /// `typeArguments.length == typeVariables.length`. The [typeArguments] are
+  /// threaded through the expansion if needed, and the resulting declaration
+  /// is returned.
+  ///
+  /// If [isInvocation] is true: In this case [typeArguments] are ignored, but
+  /// [invocationCharOffset] and [invocationFileUri] must be non-null. If `this`
+  /// type alias expands in one or more steps to a builder which is not a
+  /// [TypeAliasBuilder] nor a [TypeVariableBuilder] then that builder is
+  /// returned. If this type alias is cyclic or expands to an invalid type or
+  /// a type that does not have a declaration (say, a function type) then `this`
+  /// is returned (when the type was invalid: with `thisType` set to
+  /// `const InvalidType()`). If `this` type alias expands to a
+  /// [TypeVariableBuilder] then the type alias cannot be used in a constructor
+  /// invocation. Then an error is emitted and `this` is returned.
+  TypeDeclarationBuilder unaliasDeclaration(List<TypeBuilder> typeArguments,
+      {bool isInvocation = false,
+      int invocationCharOffset,
+      Uri invocationFileUri});
+
+  /// Compute type arguments passed to [ClassBuilder] from unaliasDeclaration.
+  /// This method does not check for cycles and may only be called if an
+  /// invocation of `this.unaliasDeclaration(typeArguments)` has returned a
+  /// [ClassBuilder].
+  ///
+  /// The parameter [typeArguments] would typically be obtained from a
+  /// [NamedTypeBuilder] whose `declaration` is `this`. It must be non-null.
+  ///
+  /// Returns `null` if an error occurred.
+  ///
+  /// The method substitutes through the chain of type aliases denoted by
+  /// [this], such that the returned [TypeBuilder]s are appropriate type
+  /// arguments for passing to the [ClassBuilder] which is the end of the
+  /// unaliasing chain.
+  List<TypeBuilder> unaliasTypeArguments(List<TypeBuilder> typeArguments);
+}
+
+abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl
+    implements TypeAliasBuilder {
+  TypeAliasBuilderImpl(List<MetadataBuilder> metadata, String name,
+      LibraryBuilder parent, int charOffset)
+      : super(metadata, 0, name, parent, charOffset);
 
   String get debugName => "TypeAliasBuilder";
 
@@ -75,111 +125,6 @@
 
   LibraryBuilder get library => super.parent;
 
-  // TODO(CFE TEAM): Some of this is a temporary workaround.
-  List<TypeVariableBuilder> get typeVariables => _typeVariables;
-  int varianceAt(int index) => typeVariables[index].parameter.variance;
-  bool get fromDill => false;
-
-  Typedef build(SourceLibraryBuilder libraryBuilder) {
-    typedef.type ??= buildThisType();
-
-    TypeBuilder type = this.type;
-    if (type is FunctionTypeBuilder) {
-      List<TypeParameter> typeParameters =
-          new List<TypeParameter>(type.typeVariables?.length ?? 0);
-      for (int i = 0; i < typeParameters.length; ++i) {
-        TypeVariableBuilder typeVariable = type.typeVariables[i];
-        typeParameters[i] = typeVariable.parameter;
-      }
-      FreshTypeParameters freshTypeParameters =
-          getFreshTypeParameters(typeParameters);
-      typedef.typeParametersOfFunctionType
-          .addAll(freshTypeParameters.freshTypeParameters);
-
-      if (type.formals != null) {
-        for (FormalParameterBuilder formal in type.formals) {
-          VariableDeclaration parameter = formal.build(libraryBuilder, 0);
-          parameter.type = freshTypeParameters.substitute(parameter.type);
-          if (formal.isNamed) {
-            typedef.namedParameters.add(parameter);
-          } else {
-            typedef.positionalParameters.add(parameter);
-          }
-        }
-      }
-    } else if (type is NamedTypeBuilder || type is FixedTypeBuilder) {
-      // No error, but also no additional setup work.
-    } else if (type != null) {
-      unhandled("${type.fullNameForErrors}", "build", charOffset, fileUri);
-    }
-
-    return typedef;
-  }
-
-  TypedefType thisTypedefType(Typedef typedef, LibraryBuilder clientLibrary) {
-    // At this point the bounds of `typedef.typeParameters` may not be assigned
-    // yet, so [getAsTypeArguments] may crash trying to compute the nullability
-    // of the created types from the bounds.  To avoid that, we use "dynamic"
-    // for the bound of all boundless variables and add them to the list for
-    // being recomputed later, when the bounds are assigned.
-    List<DartType> bounds =
-        new List<DartType>.filled(typedef.typeParameters.length, null);
-    for (int i = 0; i < bounds.length; ++i) {
-      bounds[i] = typedef.typeParameters[i].bound;
-      if (bounds[i] == null) {
-        typedef.typeParameters[i].bound = const DynamicType();
-      }
-    }
-    List<DartType> asTypeArguments =
-        getAsTypeArguments(typedef.typeParameters, clientLibrary.library);
-    TypedefType result =
-        new TypedefType(typedef, clientLibrary.nonNullable, asTypeArguments);
-    for (int i = 0; i < bounds.length; ++i) {
-      if (bounds[i] == null) {
-        // If the bound is not assigned yet, put the corresponding
-        // type-parameter type into the list for the nullability re-computation.
-        // At this point, [parent] should be a [SourceLibraryBuilder] because
-        // otherwise it's a compiled library loaded from a dill file, and the
-        // bounds should have been assigned.
-        SourceLibraryBuilder parentLibrary = parent;
-        parentLibrary.pendingNullabilities.add(asTypeArguments[i]);
-      }
-    }
-    return result;
-  }
-
-  DartType buildThisType() {
-    if (thisType != null) {
-      if (identical(thisType, cyclicTypeAliasMarker)) {
-        library.addProblem(templateCyclicTypedef.withArguments(name),
-            charOffset, noLength, fileUri);
-        return const InvalidType();
-      }
-      return thisType;
-    }
-    // It is a compile-time error for an alias (typedef) to refer to itself. We
-    // detect cycles by detecting recursive calls to this method using an
-    // instance of InvalidType that isn't identical to `const InvalidType()`.
-    thisType = cyclicTypeAliasMarker;
-    TypeBuilder type = this.type;
-    if (type != null) {
-      DartType builtType =
-          type.build(library, thisTypedefType(typedef, library));
-      if (builtType != null) {
-        if (typeVariables != null) {
-          for (TypeVariableBuilder tv in typeVariables) {
-            // Follow bound in order to find all cycles
-            tv.bound?.build(library);
-          }
-        }
-        return thisType = builtType;
-      } else {
-        return thisType = const InvalidType();
-      }
-    }
-    return thisType = const InvalidType();
-  }
-
   /// [arguments] have already been built.
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
@@ -196,56 +141,6 @@
     return substitute(result, substitution);
   }
 
-  List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder> arguments,
-      [bool notInstanceContext]) {
-    if (arguments == null && typeVariables == null) {
-      return <DartType>[];
-    }
-
-    if (arguments == null && typeVariables != null) {
-      List<DartType> result =
-          new List<DartType>.filled(typeVariables.length, null, growable: true);
-      for (int i = 0; i < result.length; ++i) {
-        result[i] = typeVariables[i].defaultType.build(library);
-      }
-      if (library is SourceLibraryBuilder) {
-        library.inferredTypes.addAll(result);
-      }
-      return result;
-    }
-
-    if (arguments != null && arguments.length != typeVariablesCount) {
-      // That should be caught and reported as a compile-time error earlier.
-      return unhandled(
-          templateTypeArgumentMismatch
-              .withArguments(typeVariablesCount)
-              .message,
-          "buildTypeArguments",
-          -1,
-          null);
-    }
-
-    // arguments.length == typeVariables.length
-    List<DartType> result =
-        new List<DartType>.filled(arguments.length, null, growable: true);
-    for (int i = 0; i < result.length; ++i) {
-      result[i] = arguments[i].build(library);
-    }
-    return result;
-  }
-
-  /// If [arguments] are null, the default types for the variables are used.
-  @override
-  int get typeVariablesCount => typeVariables?.length ?? 0;
-
-  /// Returns `true` if this typedef is an alias of the `Null` type.
-  bool get isNullAlias {
-    TypeDeclarationBuilder typeDeclarationBuilder = type.declaration;
-    return typeDeclarationBuilder is ClassBuilder &&
-        typeDeclarationBuilder.isNullClass;
-  }
-
   @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 5720eab..2bbe28c 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -18,13 +18,16 @@
 import 'dill_class_builder.dart' show computeTypeVariableBuilders;
 import 'dill_library_builder.dart' show DillLibraryBuilder;
 
-class DillTypeAliasBuilder extends TypeAliasBuilder {
+class DillTypeAliasBuilder extends TypeAliasBuilderImpl {
+  final Typedef typedef;
+
   List<TypeVariableBuilder> _typeVariables;
   TypeBuilder _type;
 
-  DillTypeAliasBuilder(Typedef typedef, DillLibraryBuilder parent)
-      : super(null, typedef.name, null, null, parent, typedef.fileOffset,
-            typedef: typedef);
+  DartType thisType;
+
+  DillTypeAliasBuilder(this.typedef, DillLibraryBuilder parent)
+      : super(null, typedef.name, parent, typedef.fileOffset);
 
   List<MetadataBuilder> get metadata {
     return unimplemented("metadata", -1, null);
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index eb2e6cf..bf1173b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4304,7 +4304,7 @@
     if (type is TypeAliasBuilder) {
       errorName = debugName(type.name, name);
       TypeAliasBuilder aliasBuilder = type;
-      int numberOfTypeParameters = aliasBuilder.typeVariables?.length ?? 0;
+      int numberOfTypeParameters = aliasBuilder.typeVariablesCount;
       int numberOfTypeArguments = typeArguments?.length ?? 0;
       if (typeArguments != null &&
           numberOfTypeParameters != numberOfTypeArguments) {
@@ -4327,7 +4327,7 @@
           typeArgumentBuilders.add(unresolvedType?.builder);
         }
       } else {
-        if (aliasBuilder.typeVariables?.isNotEmpty ?? false) {
+        if (aliasBuilder.typeVariablesCount > 0) {
           // Raw generic type alias used for instance creation, needs inference.
           ClassBuilder classBuilder;
           if (type is ClassBuilder) {
@@ -4539,11 +4539,11 @@
   }
 
   @override
-  void beginThenControlFlow(Token token) {
+  void handleThenControlFlow(Token token) {
     Expression condition = popForValue();
     enterThenForTypePromotion(condition);
     push(condition);
-    super.beginThenControlFlow(token);
+    super.handleThenControlFlow(token);
   }
 
   @override
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 56c17ed..5731350 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -450,7 +450,7 @@
 
   @override
   void beginClassOrNamedMixinApplicationPrelude(Token token) {
-    debugEvent("beginClassOrNamedMixinApplication");
+    debugEvent("beginClassOrNamedMixinApplicationPrelude");
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.classOrNamedMixinApplication,
         "class or mixin application");
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 0c3c024..e471194 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
@@ -166,6 +166,8 @@
 
 import 'source_loader.dart' show SourceLoader;
 
+import 'source_type_alias_builder.dart';
+
 class SourceLibraryBuilder extends LibraryBuilderImpl {
   static const String MALFORMED_URI_SCHEME = "org-dartlang-malformed-uri";
 
@@ -2383,7 +2385,7 @@
       }
     }
     Typedef referenceFrom = referencesFromIndexed?.lookupTypedef(name);
-    TypeAliasBuilder typedefBuilder = new TypeAliasBuilder(
+    TypeAliasBuilder typedefBuilder = new SourceTypeAliasBuilder(
         metadata, name, typeVariables, type, this, charOffset,
         referenceFrom: referenceFrom);
     loader.target.metadataCollector
@@ -2481,7 +2483,7 @@
           library.addMember(member);
         }
       });
-    } else if (declaration is TypeAliasBuilder) {
+    } else if (declaration is SourceTypeAliasBuilder) {
       Typedef typedef = declaration.build(this);
       if (!declaration.isPatch && !declaration.isDuplicate) {
         library.addTypedef(typedef);
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
new file mode 100644
index 0000000..369a202
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -0,0 +1,220 @@
+// Copyright (c) 2016, 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 fasta.function_type_alias_builder;
+
+import 'package:kernel/ast.dart'
+    show
+        DartType,
+        DynamicType,
+        InvalidType,
+        TypeParameter,
+        Typedef,
+        TypedefType,
+        VariableDeclaration,
+        getAsTypeArguments;
+
+import 'package:kernel/type_algebra.dart'
+    show FreshTypeParameters, getFreshTypeParameters;
+
+import '../fasta_codes.dart'
+    show noLength, templateCyclicTypedef, templateTypeArgumentMismatch;
+
+import '../problems.dart' show unhandled;
+
+import '../builder/class_builder.dart';
+import '../builder/fixed_type_builder.dart';
+import '../builder/formal_parameter_builder.dart';
+import '../builder/function_type_builder.dart';
+import '../builder/library_builder.dart';
+import '../builder/metadata_builder.dart';
+import '../builder/named_type_builder.dart';
+import '../builder/type_builder.dart';
+import '../builder/type_alias_builder.dart';
+import '../builder/type_declaration_builder.dart';
+import '../builder/type_variable_builder.dart';
+
+import 'source_library_builder.dart' show SourceLibraryBuilder;
+
+class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
+  final TypeBuilder type;
+
+  final List<TypeVariableBuilder> _typeVariables;
+
+  /// The [Typedef] built by this builder.
+  final Typedef typedef;
+
+  DartType thisType;
+
+  SourceTypeAliasBuilder(List<MetadataBuilder> metadata, String name,
+      this._typeVariables, this.type, LibraryBuilder parent, int charOffset,
+      {Typedef typedef, Typedef referenceFrom})
+      : typedef = typedef ??
+            (new Typedef(name, null,
+                typeParameters: TypeVariableBuilder.typeParametersFromBuilders(
+                    _typeVariables),
+                fileUri: parent.library.fileUri,
+                reference: referenceFrom?.reference)
+              ..fileOffset = charOffset),
+        super(metadata, name, parent, charOffset);
+
+  @override
+  List<TypeVariableBuilder> get typeVariables => _typeVariables;
+
+  @override
+  int varianceAt(int index) => typeVariables[index].parameter.variance;
+
+  @override
+  bool get fromDill => false;
+
+  @override
+  int get typeVariablesCount => typeVariables?.length ?? 0;
+
+  @override
+  bool get isNullAlias {
+    TypeDeclarationBuilder typeDeclarationBuilder = type.declaration;
+    return typeDeclarationBuilder is ClassBuilder &&
+        typeDeclarationBuilder.isNullClass;
+  }
+
+  Typedef build(SourceLibraryBuilder libraryBuilder) {
+    typedef.type ??= buildThisType();
+
+    TypeBuilder type = this.type;
+    if (type is FunctionTypeBuilder) {
+      List<TypeParameter> typeParameters =
+          new List<TypeParameter>(type.typeVariables?.length ?? 0);
+      for (int i = 0; i < typeParameters.length; ++i) {
+        TypeVariableBuilder typeVariable = type.typeVariables[i];
+        typeParameters[i] = typeVariable.parameter;
+      }
+      FreshTypeParameters freshTypeParameters =
+          getFreshTypeParameters(typeParameters);
+      typedef.typeParametersOfFunctionType
+          .addAll(freshTypeParameters.freshTypeParameters);
+
+      if (type.formals != null) {
+        for (FormalParameterBuilder formal in type.formals) {
+          VariableDeclaration parameter = formal.build(libraryBuilder, 0);
+          parameter.type = freshTypeParameters.substitute(parameter.type);
+          if (formal.isNamed) {
+            typedef.namedParameters.add(parameter);
+          } else {
+            typedef.positionalParameters.add(parameter);
+          }
+        }
+      }
+    } else if (type is NamedTypeBuilder || type is FixedTypeBuilder) {
+      // No error, but also no additional setup work.
+    } else if (type != null) {
+      unhandled("${type.fullNameForErrors}", "build", charOffset, fileUri);
+    }
+
+    return typedef;
+  }
+
+  DartType buildThisType() {
+    if (thisType != null) {
+      if (identical(thisType, cyclicTypeAliasMarker)) {
+        library.addProblem(templateCyclicTypedef.withArguments(name),
+            charOffset, noLength, fileUri);
+        return const InvalidType();
+      }
+      return thisType;
+    }
+    // It is a compile-time error for an alias (typedef) to refer to itself. We
+    // detect cycles by detecting recursive calls to this method using an
+    // instance of InvalidType that isn't identical to `const InvalidType()`.
+    thisType = cyclicTypeAliasMarker;
+    TypeBuilder type = this.type;
+    if (type != null) {
+      DartType builtType =
+          type.build(library, thisTypedefType(typedef, library));
+      if (builtType != null) {
+        if (typeVariables != null) {
+          for (TypeVariableBuilder tv in typeVariables) {
+            // Follow bound in order to find all cycles
+            tv.bound?.build(library);
+          }
+        }
+        return thisType = builtType;
+      } else {
+        return thisType = const InvalidType();
+      }
+    }
+    return thisType = const InvalidType();
+  }
+
+  TypedefType thisTypedefType(Typedef typedef, LibraryBuilder clientLibrary) {
+    // At this point the bounds of `typedef.typeParameters` may not be assigned
+    // yet, so [getAsTypeArguments] may crash trying to compute the nullability
+    // of the created types from the bounds.  To avoid that, we use "dynamic"
+    // for the bound of all boundless variables and add them to the list for
+    // being recomputed later, when the bounds are assigned.
+    List<DartType> bounds =
+        new List<DartType>.filled(typedef.typeParameters.length, null);
+    for (int i = 0; i < bounds.length; ++i) {
+      bounds[i] = typedef.typeParameters[i].bound;
+      if (bounds[i] == null) {
+        typedef.typeParameters[i].bound = const DynamicType();
+      }
+    }
+    List<DartType> asTypeArguments =
+        getAsTypeArguments(typedef.typeParameters, clientLibrary.library);
+    TypedefType result =
+        new TypedefType(typedef, clientLibrary.nonNullable, asTypeArguments);
+    for (int i = 0; i < bounds.length; ++i) {
+      if (bounds[i] == null) {
+        // If the bound is not assigned yet, put the corresponding
+        // type-parameter type into the list for the nullability re-computation.
+        // At this point, [parent] should be a [SourceLibraryBuilder] because
+        // otherwise it's a compiled library loaded from a dill file, and the
+        // bounds should have been assigned.
+        SourceLibraryBuilder parentLibrary = parent;
+        parentLibrary.pendingNullabilities.add(asTypeArguments[i]);
+      }
+    }
+    return result;
+  }
+
+  @override
+  List<DartType> buildTypeArguments(
+      LibraryBuilder library, List<TypeBuilder> arguments,
+      [bool notInstanceContext]) {
+    if (arguments == null && typeVariables == null) {
+      return <DartType>[];
+    }
+
+    if (arguments == null && typeVariables != null) {
+      List<DartType> result =
+          new List<DartType>.filled(typeVariables.length, null, growable: true);
+      for (int i = 0; i < result.length; ++i) {
+        result[i] = typeVariables[i].defaultType.build(library);
+      }
+      if (library is SourceLibraryBuilder) {
+        library.inferredTypes.addAll(result);
+      }
+      return result;
+    }
+
+    if (arguments != null && arguments.length != typeVariablesCount) {
+      // That should be caught and reported as a compile-time error earlier.
+      return unhandled(
+          templateTypeArgumentMismatch
+              .withArguments(typeVariablesCount)
+              .message,
+          "buildTypeArguments",
+          -1,
+          null);
+    }
+
+    // arguments.length == typeVariables.length
+    List<DartType> result =
+        new List<DartType>.filled(arguments.length, null, growable: true);
+    for (int i = 0; i < result.length; ++i) {
+      result[i] = arguments[i].build(library);
+    }
+    return result;
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
new file mode 100644
index 0000000..68b390d
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
@@ -0,0 +1,178 @@
+// Copyright (c) 2020, 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 'dart:typed_data' show Uint8List;
+
+import 'dart:io' show File;
+
+import 'package:_fe_analyzer_shared/src/parser/parser.dart'
+    show ClassMemberParser, Parser;
+
+import 'package:_fe_analyzer_shared/src/scanner/utf8_bytes_scanner.dart'
+    show Utf8BytesScanner;
+
+import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
+
+import 'package:front_end/src/fasta/util/direct_parser_ast_helper.dart'
+    show
+        AbstractDirectParserASTListener,
+        DirectParserASTContent,
+        DirectParserASTType;
+
+DirectParserASTContent getAST(List<int> rawBytes, {bool includeBody: true}) {
+  Uint8List bytes = new Uint8List(rawBytes.length + 1);
+  bytes.setRange(0, rawBytes.length, rawBytes);
+
+  Utf8BytesScanner scanner =
+      new Utf8BytesScanner(bytes, includeComments: false);
+  Token firstToken = scanner.tokenize();
+  if (firstToken == null) {
+    throw "firstToken is null";
+  }
+
+  DirectParserASTListener listener = new DirectParserASTListener();
+  Parser parser;
+  if (includeBody) {
+    parser = new Parser(listener);
+  } else {
+    parser = new ClassMemberParser(listener);
+  }
+  parser.parseUnit(firstToken);
+  return listener.data.single;
+}
+
+main(List<String> args) {
+  File f = new File(args[0]);
+  Uint8List data = f.readAsBytesSync();
+  DirectParserASTContent ast = getAST(data);
+  if (args.length > 1 && args[1] == "--benchmark") {
+    Stopwatch stopwatch = new Stopwatch()..start();
+    int numRuns = 100;
+    for (int i = 0; i < numRuns; i++) {
+      DirectParserASTContent ast2 = getAST(data);
+      if (ast.what != ast2.what) {
+        throw "Not the same result every time";
+      }
+    }
+    stopwatch.stop();
+    print("First $numRuns took ${stopwatch.elapsedMilliseconds} ms "
+        "(i.e. ${stopwatch.elapsedMilliseconds / numRuns}ms/iteration)");
+    stopwatch = new Stopwatch()..start();
+    numRuns = 2500;
+    for (int i = 0; i < numRuns; i++) {
+      DirectParserASTContent ast2 = getAST(data);
+      if (ast.what != ast2.what) {
+        throw "Not the same result every time";
+      }
+    }
+    stopwatch.stop();
+    print("Next $numRuns took ${stopwatch.elapsedMilliseconds} ms "
+        "(i.e. ${stopwatch.elapsedMilliseconds / numRuns}ms/iteration)");
+  } else {
+    print(ast);
+  }
+}
+
+class DirectParserASTListener extends AbstractDirectParserASTListener {
+  void seen(
+      String what, DirectParserASTType type, Map<String, Object> arguments) {
+    switch (type) {
+      case DirectParserASTType.BEGIN:
+      case DirectParserASTType.HANDLE:
+        // This just adds stuff.
+        data.add(new DirectParserASTContent(what, type, arguments));
+        break;
+      case DirectParserASTType.DONE:
+        // This shouldn't be seen. It's artificial.
+        throw new StateError("Saw type 'DONE'");
+      case DirectParserASTType.END:
+        // End should gobble up everything until the corresponding begin (which
+        // should be the latest begin).
+        int beginIndex;
+        for (int i = data.length - 1; i >= 0; i--) {
+          if (data[i].type == DirectParserASTType.BEGIN) {
+            beginIndex = i;
+            break;
+          }
+        }
+        if (beginIndex == null) {
+          throw "Couldn't find a begin for $what. Has:\n"
+              "${data.map((e) => "${e.what}: ${e.type}").join("\n")}";
+        }
+        String begin = data[beginIndex].what;
+        String end = what;
+        if (begin == end) {
+          // Exact match.
+        } else if (end == "TopLevelDeclaration" &&
+            (begin == "ExtensionDeclarationPrelude" ||
+                begin == "ClassOrNamedMixinApplicationPrelude" ||
+                begin == "TopLevelMember" ||
+                begin == "UncategorizedTopLevelDeclaration")) {
+          // endTopLevelDeclaration is started by one of
+          // beginExtensionDeclarationPrelude,
+          // beginClassOrNamedMixinApplicationPrelude
+          // beginTopLevelMember or beginUncategorizedTopLevelDeclaration.
+        } else if (begin == "Method" &&
+            (end == "ClassConstructor" ||
+                end == "ClassMethod" ||
+                end == "ExtensionConstructor" ||
+                end == "ExtensionMethod" ||
+                end == "MixinConstructor" ||
+                end == "MixinMethod")) {
+          // beginMethod is ended by one of endClassConstructor, endClassMethod,
+          // endExtensionMethod, endMixinConstructor or endMixinMethod.
+        } else if (begin == "Fields" &&
+            (end == "TopLevelFields" ||
+                end == "ClassFields" ||
+                end == "MixinFields" ||
+                end == "ExtensionFields")) {
+          // beginFields is ended by one of endTopLevelFields, endMixinFields or
+          // endExtensionFields.
+        } else if (begin == "ForStatement" && end == "ForIn") {
+          // beginForStatement is ended by either endForStatement or endForIn.
+        } else if (begin == "FactoryMethod" &&
+            (end == "ClassFactoryMethod" ||
+                end == "MixinFactoryMethod" ||
+                end == "ExtensionFactoryMethod")) {
+          // beginFactoryMethod is ended by either endClassFactoryMethod,
+          // endMixinFactoryMethod or endExtensionFactoryMethod.
+        } else if (begin == "ForControlFlow" && (end == "ForInControlFlow")) {
+          // beginForControlFlow is ended by either endForControlFlow or
+          // endForInControlFlow.
+        } else if (begin == "IfControlFlow" && (end == "IfElseControlFlow")) {
+          // beginIfControlFlow is ended by either endIfControlFlow or
+          // endIfElseControlFlow.
+        } else if (begin == "AwaitExpression" &&
+            (end == "InvalidAwaitExpression")) {
+          // beginAwaitExpression is ended by either endAwaitExpression or
+          // endInvalidAwaitExpression.
+        } else if (begin == "YieldStatement" &&
+            (end == "InvalidYieldStatement")) {
+          // beginYieldStatement is ended by either endYieldStatement or
+          // endInvalidYieldStatement.
+        } else {
+          throw "Unknown combination: begin$begin and end$end";
+        }
+        List<DirectParserASTContent> content = data.sublist(beginIndex);
+        data.length = beginIndex;
+        data.add(new DirectParserASTContent(
+            what, DirectParserASTType.DONE, arguments)
+          ..content = content);
+        break;
+    }
+  }
+
+  @override
+  void reportVarianceModifierNotEnabled(Token variance) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  Uri get uri => throw new UnimplementedError();
+
+  @override
+  void logEvent(String name) {
+    throw new UnimplementedError();
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
new file mode 100644
index 0000000..7da31a4
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
@@ -0,0 +1,1702 @@
+// Copyright (c) 2020, 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 'package:_fe_analyzer_shared/src/parser/assert.dart';
+import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
+import 'package:_fe_analyzer_shared/src/parser/listener.dart';
+import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
+import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
+import 'package:_fe_analyzer_shared/src/scanner/token.dart';
+import 'package:front_end/src/fasta/messages.dart';
+
+// THIS FILE IS AUTO GENERATED BY
+// 'tool/_fasta/direct_parser_ast_helper_creator.dart'
+// Run e.g.
+/*
+   out/ReleaseX64/dart \
+     pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart \
+      > pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
+*/
+
+class DirectParserASTContent {
+  final String what;
+  final DirectParserASTType type;
+  final Map<String, Object> arguments;
+  List<DirectParserASTContent> content;
+
+  DirectParserASTContent(this.what, this.type, this.arguments);
+
+  // TODO(jensj): Compare two ASTs.
+}
+
+enum DirectParserASTType { BEGIN, END, HANDLE, DONE }
+
+abstract class AbstractDirectParserASTListener implements Listener {
+  List<DirectParserASTContent> data = [];
+
+  void seen(
+      String what, DirectParserASTType type, Map<String, Object> arguments);
+
+  void beginArguments(Token token) {
+    seen("Arguments", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endArguments(int count, Token beginToken, Token endToken) {
+    seen("Arguments", DirectParserASTType.END,
+        {"count": count, "beginToken": beginToken, "endToken": endToken});
+  }
+
+  void handleAsyncModifier(Token asyncToken, Token starToken) {
+    seen("AsyncModifier", DirectParserASTType.HANDLE,
+        {"asyncToken": asyncToken, "starToken": starToken});
+  }
+
+  void beginAwaitExpression(Token token) {
+    seen("AwaitExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endAwaitExpression(Token beginToken, Token endToken) {
+    seen("AwaitExpression", DirectParserASTType.END,
+        {"beginToken": beginToken, "endToken": endToken});
+  }
+
+  void endInvalidAwaitExpression(
+      Token beginToken, Token endToken, MessageCode errorCode) {
+    seen("InvalidAwaitExpression", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "endToken": endToken,
+      "errorCode": errorCode
+    });
+  }
+
+  void beginBlock(Token token, BlockKind blockKind) {
+    seen("Block", DirectParserASTType.BEGIN,
+        {"token": token, "blockKind": blockKind});
+  }
+
+  void endBlock(
+      int count, Token beginToken, Token endToken, BlockKind blockKind) {
+    seen("Block", DirectParserASTType.END, {
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken,
+      "blockKind": blockKind
+    });
+  }
+
+  void handleInvalidTopLevelBlock(Token token) {
+    seen("InvalidTopLevelBlock", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginCascade(Token token) {
+    seen("Cascade", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endCascade() {
+    seen("Cascade", DirectParserASTType.END, {});
+  }
+
+  void beginCaseExpression(Token caseKeyword) {
+    seen("CaseExpression", DirectParserASTType.BEGIN,
+        {"caseKeyword": caseKeyword});
+  }
+
+  void endCaseExpression(Token colon) {
+    seen("CaseExpression", DirectParserASTType.END, {"colon": colon});
+  }
+
+  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
+    seen("ClassOrMixinBody", DirectParserASTType.BEGIN,
+        {"kind": kind, "token": token});
+  }
+
+  void endClassOrMixinBody(
+      DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
+    seen("ClassOrMixinBody", DirectParserASTType.END, {
+      "kind": kind,
+      "memberCount": memberCount,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void beginClassOrNamedMixinApplicationPrelude(Token token) {
+    seen("ClassOrNamedMixinApplicationPrelude", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
+    seen("ClassDeclaration", DirectParserASTType.BEGIN,
+        {"begin": begin, "abstractToken": abstractToken, "name": name});
+  }
+
+  void handleClassExtends(Token extendsKeyword, int typeCount) {
+    seen("ClassExtends", DirectParserASTType.HANDLE,
+        {"extendsKeyword": extendsKeyword, "typeCount": typeCount});
+  }
+
+  void handleClassOrMixinImplements(
+      Token implementsKeyword, int interfacesCount) {
+    seen("ClassOrMixinImplements", DirectParserASTType.HANDLE, {
+      "implementsKeyword": implementsKeyword,
+      "interfacesCount": interfacesCount
+    });
+  }
+
+  void handleClassHeader(Token begin, Token classKeyword, Token nativeToken) {
+    seen("ClassHeader", DirectParserASTType.HANDLE, {
+      "begin": begin,
+      "classKeyword": classKeyword,
+      "nativeToken": nativeToken
+    });
+  }
+
+  void handleRecoverClassHeader() {
+    seen("RecoverClassHeader", DirectParserASTType.HANDLE, {});
+  }
+
+  void endClassDeclaration(Token beginToken, Token endToken) {
+    seen("ClassDeclaration", DirectParserASTType.END,
+        {"beginToken": beginToken, "endToken": endToken});
+  }
+
+  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+    seen("MixinDeclaration", DirectParserASTType.BEGIN,
+        {"mixinKeyword": mixinKeyword, "name": name});
+  }
+
+  void handleMixinOn(Token onKeyword, int typeCount) {
+    seen("MixinOn", DirectParserASTType.HANDLE,
+        {"onKeyword": onKeyword, "typeCount": typeCount});
+  }
+
+  void handleMixinHeader(Token mixinKeyword) {
+    seen("MixinHeader", DirectParserASTType.HANDLE,
+        {"mixinKeyword": mixinKeyword});
+  }
+
+  void handleRecoverMixinHeader() {
+    seen("RecoverMixinHeader", DirectParserASTType.HANDLE, {});
+  }
+
+  void endMixinDeclaration(Token mixinKeyword, Token endToken) {
+    seen("MixinDeclaration", DirectParserASTType.END,
+        {"mixinKeyword": mixinKeyword, "endToken": endToken});
+  }
+
+  void beginUncategorizedTopLevelDeclaration(Token token) {
+    seen("UncategorizedTopLevelDeclaration", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void beginExtensionDeclarationPrelude(Token extensionKeyword) {
+    seen("ExtensionDeclarationPrelude", DirectParserASTType.BEGIN,
+        {"extensionKeyword": extensionKeyword});
+  }
+
+  void beginExtensionDeclaration(Token extensionKeyword, Token name) {
+    seen("ExtensionDeclaration", DirectParserASTType.BEGIN,
+        {"extensionKeyword": extensionKeyword, "name": name});
+  }
+
+  void endExtensionDeclaration(
+      Token extensionKeyword, Token onKeyword, Token endToken) {
+    seen("ExtensionDeclaration", DirectParserASTType.END, {
+      "extensionKeyword": extensionKeyword,
+      "onKeyword": onKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void beginCombinators(Token token) {
+    seen("Combinators", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endCombinators(int count) {
+    seen("Combinators", DirectParserASTType.END, {"count": count});
+  }
+
+  void beginCompilationUnit(Token token) {
+    seen("CompilationUnit", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleDirectivesOnly() {
+    seen("DirectivesOnly", DirectParserASTType.HANDLE, {});
+  }
+
+  void endCompilationUnit(int count, Token token) {
+    seen("CompilationUnit", DirectParserASTType.END,
+        {"count": count, "token": token});
+  }
+
+  void beginConstLiteral(Token token) {
+    seen("ConstLiteral", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endConstLiteral(Token token) {
+    seen("ConstLiteral", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginConstructorReference(Token start) {
+    seen("ConstructorReference", DirectParserASTType.BEGIN, {"start": start});
+  }
+
+  void endConstructorReference(
+      Token start, Token periodBeforeName, Token endToken) {
+    seen("ConstructorReference", DirectParserASTType.END, {
+      "start": start,
+      "periodBeforeName": periodBeforeName,
+      "endToken": endToken
+    });
+  }
+
+  void beginDoWhileStatement(Token token) {
+    seen("DoWhileStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endDoWhileStatement(
+      Token doKeyword, Token whileKeyword, Token endToken) {
+    seen("DoWhileStatement", DirectParserASTType.END, {
+      "doKeyword": doKeyword,
+      "whileKeyword": whileKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void beginDoWhileStatementBody(Token token) {
+    seen("DoWhileStatementBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endDoWhileStatementBody(Token token) {
+    seen("DoWhileStatementBody", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginWhileStatementBody(Token token) {
+    seen("WhileStatementBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endWhileStatementBody(Token token) {
+    seen("WhileStatementBody", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginEnum(Token enumKeyword) {
+    seen("Enum", DirectParserASTType.BEGIN, {"enumKeyword": enumKeyword});
+  }
+
+  void endEnum(Token enumKeyword, Token leftBrace, int count) {
+    seen("Enum", DirectParserASTType.END,
+        {"enumKeyword": enumKeyword, "leftBrace": leftBrace, "count": count});
+  }
+
+  void beginExport(Token token) {
+    seen("Export", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endExport(Token exportKeyword, Token semicolon) {
+    seen("Export", DirectParserASTType.END,
+        {"exportKeyword": exportKeyword, "semicolon": semicolon});
+  }
+
+  void handleExtraneousExpression(Token token, Message message) {
+    seen("ExtraneousExpression", DirectParserASTType.HANDLE,
+        {"token": token, "message": message});
+  }
+
+  void handleExpressionStatement(Token token) {
+    seen("ExpressionStatement", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
+    seen("FactoryMethod", DirectParserASTType.BEGIN, {
+      "lastConsumed": lastConsumed,
+      "externalToken": externalToken,
+      "constToken": constToken
+    });
+  }
+
+  void endClassFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    seen("ClassFactoryMethod", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "factoryKeyword": factoryKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void endMixinFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    seen("MixinFactoryMethod", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "factoryKeyword": factoryKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void endExtensionFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    seen("ExtensionFactoryMethod", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "factoryKeyword": factoryKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void beginFormalParameter(Token token, MemberKind kind, Token requiredToken,
+      Token covariantToken, Token varFinalOrConst) {
+    seen("FormalParameter", DirectParserASTType.BEGIN, {
+      "token": token,
+      "kind": kind,
+      "requiredToken": requiredToken,
+      "covariantToken": covariantToken,
+      "varFinalOrConst": varFinalOrConst
+    });
+  }
+
+  void endFormalParameter(
+      Token thisKeyword,
+      Token periodAfterThis,
+      Token nameToken,
+      Token initializerStart,
+      Token initializerEnd,
+      FormalParameterKind kind,
+      MemberKind memberKind) {
+    seen("FormalParameter", DirectParserASTType.END, {
+      "thisKeyword": thisKeyword,
+      "periodAfterThis": periodAfterThis,
+      "nameToken": nameToken,
+      "initializerStart": initializerStart,
+      "initializerEnd": initializerEnd,
+      "kind": kind,
+      "memberKind": memberKind
+    });
+  }
+
+  void handleNoFormalParameters(Token token, MemberKind kind) {
+    seen("NoFormalParameters", DirectParserASTType.HANDLE,
+        {"token": token, "kind": kind});
+  }
+
+  void beginFormalParameters(Token token, MemberKind kind) {
+    seen("FormalParameters", DirectParserASTType.BEGIN,
+        {"token": token, "kind": kind});
+  }
+
+  void endFormalParameters(
+      int count, Token beginToken, Token endToken, MemberKind kind) {
+    seen("FormalParameters", DirectParserASTType.END, {
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken,
+      "kind": kind
+    });
+  }
+
+  void endClassFields(
+      Token abstractToken,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token lateToken,
+      Token varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    seen("ClassFields", DirectParserASTType.END, {
+      "abstractToken": abstractToken,
+      "externalToken": externalToken,
+      "staticToken": staticToken,
+      "covariantToken": covariantToken,
+      "lateToken": lateToken,
+      "varFinalOrConst": varFinalOrConst,
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void endMixinFields(
+      Token abstractToken,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token lateToken,
+      Token varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    seen("MixinFields", DirectParserASTType.END, {
+      "abstractToken": abstractToken,
+      "externalToken": externalToken,
+      "staticToken": staticToken,
+      "covariantToken": covariantToken,
+      "lateToken": lateToken,
+      "varFinalOrConst": varFinalOrConst,
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void endExtensionFields(
+      Token abstractToken,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token lateToken,
+      Token varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    seen("ExtensionFields", DirectParserASTType.END, {
+      "abstractToken": abstractToken,
+      "externalToken": externalToken,
+      "staticToken": staticToken,
+      "covariantToken": covariantToken,
+      "lateToken": lateToken,
+      "varFinalOrConst": varFinalOrConst,
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void handleForInitializerEmptyStatement(Token token) {
+    seen("ForInitializerEmptyStatement", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void handleForInitializerExpressionStatement(Token token, bool forIn) {
+    seen("ForInitializerExpressionStatement", DirectParserASTType.HANDLE,
+        {"token": token, "forIn": forIn});
+  }
+
+  void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
+    seen("ForInitializerLocalVariableDeclaration", DirectParserASTType.HANDLE,
+        {"token": token, "forIn": forIn});
+  }
+
+  void beginForStatement(Token token) {
+    seen("ForStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleForLoopParts(Token forKeyword, Token leftParen,
+      Token leftSeparator, int updateExpressionCount) {
+    seen("ForLoopParts", DirectParserASTType.HANDLE, {
+      "forKeyword": forKeyword,
+      "leftParen": leftParen,
+      "leftSeparator": leftSeparator,
+      "updateExpressionCount": updateExpressionCount
+    });
+  }
+
+  void endForStatement(Token endToken) {
+    seen("ForStatement", DirectParserASTType.END, {"endToken": endToken});
+  }
+
+  void beginForStatementBody(Token token) {
+    seen("ForStatementBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endForStatementBody(Token token) {
+    seen("ForStatementBody", DirectParserASTType.END, {"token": token});
+  }
+
+  void handleForInLoopParts(Token awaitToken, Token forToken,
+      Token leftParenthesis, Token inKeyword) {
+    seen("ForInLoopParts", DirectParserASTType.HANDLE, {
+      "awaitToken": awaitToken,
+      "forToken": forToken,
+      "leftParenthesis": leftParenthesis,
+      "inKeyword": inKeyword
+    });
+  }
+
+  void endForIn(Token endToken) {
+    seen("ForIn", DirectParserASTType.END, {"endToken": endToken});
+  }
+
+  void beginForInExpression(Token token) {
+    seen("ForInExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endForInExpression(Token token) {
+    seen("ForInExpression", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginForInBody(Token token) {
+    seen("ForInBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endForInBody(Token token) {
+    seen("ForInBody", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginNamedFunctionExpression(Token token) {
+    seen(
+        "NamedFunctionExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endNamedFunctionExpression(Token endToken) {
+    seen("NamedFunctionExpression", DirectParserASTType.END,
+        {"endToken": endToken});
+  }
+
+  void beginLocalFunctionDeclaration(Token token) {
+    seen("LocalFunctionDeclaration", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void endLocalFunctionDeclaration(Token endToken) {
+    seen("LocalFunctionDeclaration", DirectParserASTType.END,
+        {"endToken": endToken});
+  }
+
+  void beginBlockFunctionBody(Token token) {
+    seen("BlockFunctionBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
+    seen("BlockFunctionBody", DirectParserASTType.END,
+        {"count": count, "beginToken": beginToken, "endToken": endToken});
+  }
+
+  void handleNoFunctionBody(Token token) {
+    seen("NoFunctionBody", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
+    seen("FunctionBodySkipped", DirectParserASTType.HANDLE,
+        {"token": token, "isExpressionBody": isExpressionBody});
+  }
+
+  void beginFunctionName(Token token) {
+    seen("FunctionName", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endFunctionName(Token beginToken, Token token) {
+    seen("FunctionName", DirectParserASTType.END,
+        {"beginToken": beginToken, "token": token});
+  }
+
+  void beginFunctionTypeAlias(Token token) {
+    seen("FunctionTypeAlias", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endFunctionTypeAlias(
+      Token typedefKeyword, Token equals, Token endToken) {
+    seen("FunctionTypeAlias", DirectParserASTType.END, {
+      "typedefKeyword": typedefKeyword,
+      "equals": equals,
+      "endToken": endToken
+    });
+  }
+
+  void handleClassWithClause(Token withKeyword) {
+    seen("ClassWithClause", DirectParserASTType.HANDLE,
+        {"withKeyword": withKeyword});
+  }
+
+  void handleClassNoWithClause() {
+    seen("ClassNoWithClause", DirectParserASTType.HANDLE, {});
+  }
+
+  void beginNamedMixinApplication(
+      Token begin, Token abstractToken, Token name) {
+    seen("NamedMixinApplication", DirectParserASTType.BEGIN,
+        {"begin": begin, "abstractToken": abstractToken, "name": name});
+  }
+
+  void handleNamedMixinApplicationWithClause(Token withKeyword) {
+    seen("NamedMixinApplicationWithClause", DirectParserASTType.HANDLE,
+        {"withKeyword": withKeyword});
+  }
+
+  void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
+      Token implementsKeyword, Token endToken) {
+    seen("NamedMixinApplication", DirectParserASTType.END, {
+      "begin": begin,
+      "classKeyword": classKeyword,
+      "equals": equals,
+      "implementsKeyword": implementsKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void beginHide(Token hideKeyword) {
+    seen("Hide", DirectParserASTType.BEGIN, {"hideKeyword": hideKeyword});
+  }
+
+  void endHide(Token hideKeyword) {
+    seen("Hide", DirectParserASTType.END, {"hideKeyword": hideKeyword});
+  }
+
+  void handleIdentifierList(int count) {
+    seen("IdentifierList", DirectParserASTType.HANDLE, {"count": count});
+  }
+
+  void beginTypeList(Token token) {
+    seen("TypeList", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endTypeList(int count) {
+    seen("TypeList", DirectParserASTType.END, {"count": count});
+  }
+
+  void beginIfStatement(Token token) {
+    seen("IfStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endIfStatement(Token ifToken, Token elseToken) {
+    seen("IfStatement", DirectParserASTType.END,
+        {"ifToken": ifToken, "elseToken": elseToken});
+  }
+
+  void beginThenStatement(Token token) {
+    seen("ThenStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endThenStatement(Token token) {
+    seen("ThenStatement", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginElseStatement(Token token) {
+    seen("ElseStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endElseStatement(Token token) {
+    seen("ElseStatement", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginImport(Token importKeyword) {
+    seen("Import", DirectParserASTType.BEGIN, {"importKeyword": importKeyword});
+  }
+
+  void handleImportPrefix(Token deferredKeyword, Token asKeyword) {
+    seen("ImportPrefix", DirectParserASTType.HANDLE,
+        {"deferredKeyword": deferredKeyword, "asKeyword": asKeyword});
+  }
+
+  void endImport(Token importKeyword, Token semicolon) {
+    seen("Import", DirectParserASTType.END,
+        {"importKeyword": importKeyword, "semicolon": semicolon});
+  }
+
+  void handleRecoverImport(Token semicolon) {
+    seen("RecoverImport", DirectParserASTType.HANDLE, {"semicolon": semicolon});
+  }
+
+  void beginConditionalUris(Token token) {
+    seen("ConditionalUris", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endConditionalUris(int count) {
+    seen("ConditionalUris", DirectParserASTType.END, {"count": count});
+  }
+
+  void beginConditionalUri(Token ifKeyword) {
+    seen("ConditionalUri", DirectParserASTType.BEGIN, {"ifKeyword": ifKeyword});
+  }
+
+  void endConditionalUri(Token ifKeyword, Token leftParen, Token equalSign) {
+    seen("ConditionalUri", DirectParserASTType.END, {
+      "ifKeyword": ifKeyword,
+      "leftParen": leftParen,
+      "equalSign": equalSign
+    });
+  }
+
+  void handleDottedName(int count, Token firstIdentifier) {
+    seen("DottedName", DirectParserASTType.HANDLE,
+        {"count": count, "firstIdentifier": firstIdentifier});
+  }
+
+  void beginImplicitCreationExpression(Token token) {
+    seen("ImplicitCreationExpression", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void endImplicitCreationExpression(Token token) {
+    seen("ImplicitCreationExpression", DirectParserASTType.END,
+        {"token": token});
+  }
+
+  void beginInitializedIdentifier(Token token) {
+    seen("InitializedIdentifier", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endInitializedIdentifier(Token nameToken) {
+    seen("InitializedIdentifier", DirectParserASTType.END,
+        {"nameToken": nameToken});
+  }
+
+  void beginFieldInitializer(Token token) {
+    seen("FieldInitializer", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endFieldInitializer(Token assignment, Token token) {
+    seen("FieldInitializer", DirectParserASTType.END,
+        {"assignment": assignment, "token": token});
+  }
+
+  void handleNoFieldInitializer(Token token) {
+    seen("NoFieldInitializer", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginVariableInitializer(Token token) {
+    seen("VariableInitializer", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endVariableInitializer(Token assignmentOperator) {
+    seen("VariableInitializer", DirectParserASTType.END,
+        {"assignmentOperator": assignmentOperator});
+  }
+
+  void handleNoVariableInitializer(Token token) {
+    seen("NoVariableInitializer", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginInitializer(Token token) {
+    seen("Initializer", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endInitializer(Token token) {
+    seen("Initializer", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginInitializers(Token token) {
+    seen("Initializers", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endInitializers(int count, Token beginToken, Token endToken) {
+    seen("Initializers", DirectParserASTType.END,
+        {"count": count, "beginToken": beginToken, "endToken": endToken});
+  }
+
+  void handleNoInitializers() {
+    seen("NoInitializers", DirectParserASTType.HANDLE, {});
+  }
+
+  void handleInvalidExpression(Token token) {
+    seen("InvalidExpression", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleInvalidFunctionBody(Token token) {
+    seen("InvalidFunctionBody", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleInvalidTypeReference(Token token) {
+    seen("InvalidTypeReference", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleLabel(Token token) {
+    seen("Label", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginLabeledStatement(Token token, int labelCount) {
+    seen("LabeledStatement", DirectParserASTType.BEGIN,
+        {"token": token, "labelCount": labelCount});
+  }
+
+  void endLabeledStatement(int labelCount) {
+    seen("LabeledStatement", DirectParserASTType.END,
+        {"labelCount": labelCount});
+  }
+
+  void beginLibraryName(Token token) {
+    seen("LibraryName", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endLibraryName(Token libraryKeyword, Token semicolon) {
+    seen("LibraryName", DirectParserASTType.END,
+        {"libraryKeyword": libraryKeyword, "semicolon": semicolon});
+  }
+
+  void handleLiteralMapEntry(Token colon, Token endToken) {
+    seen("LiteralMapEntry", DirectParserASTType.HANDLE,
+        {"colon": colon, "endToken": endToken});
+  }
+
+  void beginLiteralString(Token token) {
+    seen("LiteralString", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleInterpolationExpression(Token leftBracket, Token rightBracket) {
+    seen("InterpolationExpression", DirectParserASTType.HANDLE,
+        {"leftBracket": leftBracket, "rightBracket": rightBracket});
+  }
+
+  void endLiteralString(int interpolationCount, Token endToken) {
+    seen("LiteralString", DirectParserASTType.END,
+        {"interpolationCount": interpolationCount, "endToken": endToken});
+  }
+
+  void handleStringJuxtaposition(Token startToken, int literalCount) {
+    seen("StringJuxtaposition", DirectParserASTType.HANDLE,
+        {"startToken": startToken, "literalCount": literalCount});
+  }
+
+  void beginMember() {
+    seen("Member", DirectParserASTType.BEGIN, {});
+  }
+
+  void handleInvalidMember(Token endToken) {
+    seen("InvalidMember", DirectParserASTType.HANDLE, {"endToken": endToken});
+  }
+
+  void endMember() {
+    seen("Member", DirectParserASTType.END, {});
+  }
+
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token getOrSet, Token name) {
+    seen("Method", DirectParserASTType.BEGIN, {
+      "externalToken": externalToken,
+      "staticToken": staticToken,
+      "covariantToken": covariantToken,
+      "varFinalOrConst": varFinalOrConst,
+      "getOrSet": getOrSet,
+      "name": name
+    });
+  }
+
+  void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    seen("ClassMethod", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void endMixinMethod(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    seen("MixinMethod", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void endExtensionMethod(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    seen("ExtensionMethod", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void endClassConstructor(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    seen("ClassConstructor", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void endMixinConstructor(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    seen("MixinConstructor", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void endExtensionConstructor(Token getOrSet, Token beginToken,
+      Token beginParam, Token beginInitializers, Token endToken) {
+    seen("ExtensionConstructor", DirectParserASTType.END, {
+      "getOrSet": getOrSet,
+      "beginToken": beginToken,
+      "beginParam": beginParam,
+      "beginInitializers": beginInitializers,
+      "endToken": endToken
+    });
+  }
+
+  void beginMetadataStar(Token token) {
+    seen("MetadataStar", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endMetadataStar(int count) {
+    seen("MetadataStar", DirectParserASTType.END, {"count": count});
+  }
+
+  void beginMetadata(Token token) {
+    seen("Metadata", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
+    seen("Metadata", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "periodBeforeName": periodBeforeName,
+      "endToken": endToken
+    });
+  }
+
+  void beginOptionalFormalParameters(Token token) {
+    seen("OptionalFormalParameters", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void endOptionalFormalParameters(
+      int count, Token beginToken, Token endToken) {
+    seen("OptionalFormalParameters", DirectParserASTType.END,
+        {"count": count, "beginToken": beginToken, "endToken": endToken});
+  }
+
+  void beginPart(Token token) {
+    seen("Part", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endPart(Token partKeyword, Token semicolon) {
+    seen("Part", DirectParserASTType.END,
+        {"partKeyword": partKeyword, "semicolon": semicolon});
+  }
+
+  void beginPartOf(Token token) {
+    seen("PartOf", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endPartOf(
+      Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
+    seen("PartOf", DirectParserASTType.END, {
+      "partKeyword": partKeyword,
+      "ofKeyword": ofKeyword,
+      "semicolon": semicolon,
+      "hasName": hasName
+    });
+  }
+
+  void beginRedirectingFactoryBody(Token token) {
+    seen("RedirectingFactoryBody", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
+    seen("RedirectingFactoryBody", DirectParserASTType.END,
+        {"beginToken": beginToken, "endToken": endToken});
+  }
+
+  void beginReturnStatement(Token token) {
+    seen("ReturnStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
+    seen("NativeFunctionBody", DirectParserASTType.HANDLE,
+        {"nativeToken": nativeToken, "semicolon": semicolon});
+  }
+
+  void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
+    seen("NativeFunctionBodyIgnored", DirectParserASTType.HANDLE,
+        {"nativeToken": nativeToken, "semicolon": semicolon});
+  }
+
+  void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
+    seen("NativeFunctionBodySkipped", DirectParserASTType.HANDLE,
+        {"nativeToken": nativeToken, "semicolon": semicolon});
+  }
+
+  void handleEmptyFunctionBody(Token semicolon) {
+    seen("EmptyFunctionBody", DirectParserASTType.HANDLE,
+        {"semicolon": semicolon});
+  }
+
+  void handleExpressionFunctionBody(Token arrowToken, Token endToken) {
+    seen("ExpressionFunctionBody", DirectParserASTType.HANDLE,
+        {"arrowToken": arrowToken, "endToken": endToken});
+  }
+
+  void endReturnStatement(
+      bool hasExpression, Token beginToken, Token endToken) {
+    seen("ReturnStatement", DirectParserASTType.END, {
+      "hasExpression": hasExpression,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void handleSend(Token beginToken, Token endToken) {
+    seen("Send", DirectParserASTType.HANDLE,
+        {"beginToken": beginToken, "endToken": endToken});
+  }
+
+  void beginShow(Token showKeyword) {
+    seen("Show", DirectParserASTType.BEGIN, {"showKeyword": showKeyword});
+  }
+
+  void endShow(Token showKeyword) {
+    seen("Show", DirectParserASTType.END, {"showKeyword": showKeyword});
+  }
+
+  void beginSwitchStatement(Token token) {
+    seen("SwitchStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endSwitchStatement(Token switchKeyword, Token endToken) {
+    seen("SwitchStatement", DirectParserASTType.END,
+        {"switchKeyword": switchKeyword, "endToken": endToken});
+  }
+
+  void beginSwitchBlock(Token token) {
+    seen("SwitchBlock", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
+    seen("SwitchBlock", DirectParserASTType.END, {
+      "caseCount": caseCount,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void beginLiteralSymbol(Token token) {
+    seen("LiteralSymbol", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endLiteralSymbol(Token hashToken, int identifierCount) {
+    seen("LiteralSymbol", DirectParserASTType.END,
+        {"hashToken": hashToken, "identifierCount": identifierCount});
+  }
+
+  void handleThrowExpression(Token throwToken, Token endToken) {
+    seen("ThrowExpression", DirectParserASTType.HANDLE,
+        {"throwToken": throwToken, "endToken": endToken});
+  }
+
+  void beginRethrowStatement(Token token) {
+    seen("RethrowStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endRethrowStatement(Token rethrowToken, Token endToken) {
+    seen("RethrowStatement", DirectParserASTType.END,
+        {"rethrowToken": rethrowToken, "endToken": endToken});
+  }
+
+  void endTopLevelDeclaration(Token nextToken) {
+    seen("TopLevelDeclaration", DirectParserASTType.END,
+        {"nextToken": nextToken});
+  }
+
+  void handleInvalidTopLevelDeclaration(Token endToken) {
+    seen("InvalidTopLevelDeclaration", DirectParserASTType.HANDLE,
+        {"endToken": endToken});
+  }
+
+  void beginTopLevelMember(Token token) {
+    seen("TopLevelMember", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void beginFields(Token lastConsumed) {
+    seen("Fields", DirectParserASTType.BEGIN, {"lastConsumed": lastConsumed});
+  }
+
+  void endTopLevelFields(
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token lateToken,
+      Token varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    seen("TopLevelFields", DirectParserASTType.END, {
+      "externalToken": externalToken,
+      "staticToken": staticToken,
+      "covariantToken": covariantToken,
+      "lateToken": lateToken,
+      "varFinalOrConst": varFinalOrConst,
+      "count": count,
+      "beginToken": beginToken,
+      "endToken": endToken
+    });
+  }
+
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
+    seen("TopLevelMethod", DirectParserASTType.BEGIN,
+        {"lastConsumed": lastConsumed, "externalToken": externalToken});
+  }
+
+  void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
+    seen("TopLevelMethod", DirectParserASTType.END,
+        {"beginToken": beginToken, "getOrSet": getOrSet, "endToken": endToken});
+  }
+
+  void beginTryStatement(Token token) {
+    seen("TryStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleCaseMatch(Token caseKeyword, Token colon) {
+    seen("CaseMatch", DirectParserASTType.HANDLE,
+        {"caseKeyword": caseKeyword, "colon": colon});
+  }
+
+  void beginCatchClause(Token token) {
+    seen("CatchClause", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endCatchClause(Token token) {
+    seen("CatchClause", DirectParserASTType.END, {"token": token});
+  }
+
+  void handleCatchBlock(Token onKeyword, Token catchKeyword, Token comma) {
+    seen("CatchBlock", DirectParserASTType.HANDLE,
+        {"onKeyword": onKeyword, "catchKeyword": catchKeyword, "comma": comma});
+  }
+
+  void handleFinallyBlock(Token finallyKeyword) {
+    seen("FinallyBlock", DirectParserASTType.HANDLE,
+        {"finallyKeyword": finallyKeyword});
+  }
+
+  void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
+    seen("TryStatement", DirectParserASTType.END, {
+      "catchCount": catchCount,
+      "tryKeyword": tryKeyword,
+      "finallyKeyword": finallyKeyword
+    });
+  }
+
+  void handleType(Token beginToken, Token questionMark) {
+    seen("Type", DirectParserASTType.HANDLE,
+        {"beginToken": beginToken, "questionMark": questionMark});
+  }
+
+  void handleNonNullAssertExpression(Token bang) {
+    seen("NonNullAssertExpression", DirectParserASTType.HANDLE, {"bang": bang});
+  }
+
+  void handleNoName(Token token) {
+    seen("NoName", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginFunctionType(Token beginToken) {
+    seen("FunctionType", DirectParserASTType.BEGIN, {"beginToken": beginToken});
+  }
+
+  void endFunctionType(Token functionToken, Token questionMark) {
+    seen("FunctionType", DirectParserASTType.END,
+        {"functionToken": functionToken, "questionMark": questionMark});
+  }
+
+  void beginTypeArguments(Token token) {
+    seen("TypeArguments", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endTypeArguments(int count, Token beginToken, Token endToken) {
+    seen("TypeArguments", DirectParserASTType.END,
+        {"count": count, "beginToken": beginToken, "endToken": endToken});
+  }
+
+  void handleInvalidTypeArguments(Token token) {
+    seen("InvalidTypeArguments", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleNoTypeArguments(Token token) {
+    seen("NoTypeArguments", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginTypeVariable(Token token) {
+    seen("TypeVariable", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void handleTypeVariablesDefined(Token token, int count) {
+    seen("TypeVariablesDefined", DirectParserASTType.HANDLE,
+        {"token": token, "count": count});
+  }
+
+  void endTypeVariable(
+      Token token, int index, Token extendsOrSuper, Token variance) {
+    seen("TypeVariable", DirectParserASTType.END, {
+      "token": token,
+      "index": index,
+      "extendsOrSuper": extendsOrSuper,
+      "variance": variance
+    });
+  }
+
+  void beginTypeVariables(Token token) {
+    seen("TypeVariables", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endTypeVariables(Token beginToken, Token endToken) {
+    seen("TypeVariables", DirectParserASTType.END,
+        {"beginToken": beginToken, "endToken": endToken});
+  }
+
+  void beginFunctionExpression(Token token) {
+    seen("FunctionExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endFunctionExpression(Token beginToken, Token token) {
+    seen("FunctionExpression", DirectParserASTType.END,
+        {"beginToken": beginToken, "token": token});
+  }
+
+  void beginVariablesDeclaration(
+      Token token, Token lateToken, Token varFinalOrConst) {
+    seen("VariablesDeclaration", DirectParserASTType.BEGIN, {
+      "token": token,
+      "lateToken": lateToken,
+      "varFinalOrConst": varFinalOrConst
+    });
+  }
+
+  void endVariablesDeclaration(int count, Token endToken) {
+    seen("VariablesDeclaration", DirectParserASTType.END,
+        {"count": count, "endToken": endToken});
+  }
+
+  void beginWhileStatement(Token token) {
+    seen("WhileStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endWhileStatement(Token whileKeyword, Token endToken) {
+    seen("WhileStatement", DirectParserASTType.END,
+        {"whileKeyword": whileKeyword, "endToken": endToken});
+  }
+
+  void beginAsOperatorType(Token operator) {
+    seen("AsOperatorType", DirectParserASTType.BEGIN, {"operator": operator});
+  }
+
+  void endAsOperatorType(Token operator) {
+    seen("AsOperatorType", DirectParserASTType.END, {"operator": operator});
+  }
+
+  void handleAsOperator(Token operator) {
+    seen("AsOperator", DirectParserASTType.HANDLE, {"operator": operator});
+  }
+
+  void handleAssignmentExpression(Token token) {
+    seen("AssignmentExpression", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginBinaryExpression(Token token) {
+    seen("BinaryExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endBinaryExpression(Token token) {
+    seen("BinaryExpression", DirectParserASTType.END, {"token": token});
+  }
+
+  void handleEndingBinaryExpression(Token token) {
+    seen(
+        "EndingBinaryExpression", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginConditionalExpression(Token question) {
+    seen("ConditionalExpression", DirectParserASTType.BEGIN,
+        {"question": question});
+  }
+
+  void handleConditionalExpressionColon() {
+    seen("ConditionalExpressionColon", DirectParserASTType.HANDLE, {});
+  }
+
+  void endConditionalExpression(Token question, Token colon) {
+    seen("ConditionalExpression", DirectParserASTType.END,
+        {"question": question, "colon": colon});
+  }
+
+  void beginConstExpression(Token constKeyword) {
+    seen("ConstExpression", DirectParserASTType.BEGIN,
+        {"constKeyword": constKeyword});
+  }
+
+  void endConstExpression(Token token) {
+    seen("ConstExpression", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginForControlFlow(Token awaitToken, Token forToken) {
+    seen("ForControlFlow", DirectParserASTType.BEGIN,
+        {"awaitToken": awaitToken, "forToken": forToken});
+  }
+
+  void endForControlFlow(Token token) {
+    seen("ForControlFlow", DirectParserASTType.END, {"token": token});
+  }
+
+  void endForInControlFlow(Token token) {
+    seen("ForInControlFlow", DirectParserASTType.END, {"token": token});
+  }
+
+  void beginIfControlFlow(Token ifToken) {
+    seen("IfControlFlow", DirectParserASTType.BEGIN, {"ifToken": ifToken});
+  }
+
+  void handleThenControlFlow(Token token) {
+    seen("ThenControlFlow", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleElseControlFlow(Token elseToken) {
+    seen("ElseControlFlow", DirectParserASTType.HANDLE,
+        {"elseToken": elseToken});
+  }
+
+  void endIfControlFlow(Token token) {
+    seen("IfControlFlow", DirectParserASTType.END, {"token": token});
+  }
+
+  void endIfElseControlFlow(Token token) {
+    seen("IfElseControlFlow", DirectParserASTType.END, {"token": token});
+  }
+
+  void handleSpreadExpression(Token spreadToken) {
+    seen("SpreadExpression", DirectParserASTType.HANDLE,
+        {"spreadToken": spreadToken});
+  }
+
+  void beginFunctionTypedFormalParameter(Token token) {
+    seen("FunctionTypedFormalParameter", DirectParserASTType.BEGIN,
+        {"token": token});
+  }
+
+  void endFunctionTypedFormalParameter(Token nameToken, Token question) {
+    seen("FunctionTypedFormalParameter", DirectParserASTType.END,
+        {"nameToken": nameToken, "question": question});
+  }
+
+  void handleIdentifier(Token token, IdentifierContext context) {
+    seen("Identifier", DirectParserASTType.HANDLE,
+        {"token": token, "context": context});
+  }
+
+  void handleIndexedExpression(
+      Token question, Token openSquareBracket, Token closeSquareBracket) {
+    seen("IndexedExpression", DirectParserASTType.HANDLE, {
+      "question": question,
+      "openSquareBracket": openSquareBracket,
+      "closeSquareBracket": closeSquareBracket
+    });
+  }
+
+  void beginIsOperatorType(Token operator) {
+    seen("IsOperatorType", DirectParserASTType.BEGIN, {"operator": operator});
+  }
+
+  void endIsOperatorType(Token operator) {
+    seen("IsOperatorType", DirectParserASTType.END, {"operator": operator});
+  }
+
+  void handleIsOperator(Token isOperator, Token not) {
+    seen("IsOperator", DirectParserASTType.HANDLE,
+        {"isOperator": isOperator, "not": not});
+  }
+
+  void handleLiteralBool(Token token) {
+    seen("LiteralBool", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleBreakStatement(
+      bool hasTarget, Token breakKeyword, Token endToken) {
+    seen("BreakStatement", DirectParserASTType.HANDLE, {
+      "hasTarget": hasTarget,
+      "breakKeyword": breakKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void handleContinueStatement(
+      bool hasTarget, Token continueKeyword, Token endToken) {
+    seen("ContinueStatement", DirectParserASTType.HANDLE, {
+      "hasTarget": hasTarget,
+      "continueKeyword": continueKeyword,
+      "endToken": endToken
+    });
+  }
+
+  void handleEmptyStatement(Token token) {
+    seen("EmptyStatement", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void beginAssert(Token assertKeyword, Assert kind) {
+    seen("Assert", DirectParserASTType.BEGIN,
+        {"assertKeyword": assertKeyword, "kind": kind});
+  }
+
+  void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
+      Token commaToken, Token semicolonToken) {
+    seen("Assert", DirectParserASTType.END, {
+      "assertKeyword": assertKeyword,
+      "kind": kind,
+      "leftParenthesis": leftParenthesis,
+      "commaToken": commaToken,
+      "semicolonToken": semicolonToken
+    });
+  }
+
+  void handleLiteralDouble(Token token) {
+    seen("LiteralDouble", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleLiteralInt(Token token) {
+    seen("LiteralInt", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleLiteralList(
+      int count, Token leftBracket, Token constKeyword, Token rightBracket) {
+    seen("LiteralList", DirectParserASTType.HANDLE, {
+      "count": count,
+      "leftBracket": leftBracket,
+      "constKeyword": constKeyword,
+      "rightBracket": rightBracket
+    });
+  }
+
+  void handleLiteralSetOrMap(
+    int count,
+    Token leftBrace,
+    Token constKeyword,
+    Token rightBrace,
+    bool hasSetEntry,
+  ) {
+    seen("LiteralSetOrMap", DirectParserASTType.HANDLE, {
+      "count": count,
+      "leftBrace": leftBrace,
+      "constKeyword": constKeyword,
+      "rightBrace": rightBrace,
+      "hasSetEntry": hasSetEntry
+    });
+  }
+
+  void handleLiteralNull(Token token) {
+    seen("LiteralNull", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleNativeClause(Token nativeToken, bool hasName) {
+    seen("NativeClause", DirectParserASTType.HANDLE,
+        {"nativeToken": nativeToken, "hasName": hasName});
+  }
+
+  void handleNamedArgument(Token colon) {
+    seen("NamedArgument", DirectParserASTType.HANDLE, {"colon": colon});
+  }
+
+  void beginNewExpression(Token token) {
+    seen("NewExpression", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endNewExpression(Token token) {
+    seen("NewExpression", DirectParserASTType.END, {"token": token});
+  }
+
+  void handleNoArguments(Token token) {
+    seen("NoArguments", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
+    seen("NoConstructorReferenceContinuationAfterTypeArguments",
+        DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleNoType(Token lastConsumed) {
+    seen("NoType", DirectParserASTType.HANDLE, {"lastConsumed": lastConsumed});
+  }
+
+  void handleNoTypeVariables(Token token) {
+    seen("NoTypeVariables", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleOperator(Token token) {
+    seen("Operator", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleSymbolVoid(Token token) {
+    seen("SymbolVoid", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleOperatorName(Token operatorKeyword, Token token) {
+    seen("OperatorName", DirectParserASTType.HANDLE,
+        {"operatorKeyword": operatorKeyword, "token": token});
+  }
+
+  void handleInvalidOperatorName(Token operatorKeyword, Token token) {
+    seen("InvalidOperatorName", DirectParserASTType.HANDLE,
+        {"operatorKeyword": operatorKeyword, "token": token});
+  }
+
+  void handleParenthesizedCondition(Token token) {
+    seen(
+        "ParenthesizedCondition", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleParenthesizedExpression(Token token) {
+    seen("ParenthesizedExpression", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void handleQualified(Token period) {
+    seen("Qualified", DirectParserASTType.HANDLE, {"period": period});
+  }
+
+  void handleStringPart(Token token) {
+    seen("StringPart", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleSuperExpression(Token token, IdentifierContext context) {
+    seen("SuperExpression", DirectParserASTType.HANDLE,
+        {"token": token, "context": context});
+  }
+
+  void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
+    seen("SwitchCase", DirectParserASTType.BEGIN, {
+      "labelCount": labelCount,
+      "expressionCount": expressionCount,
+      "firstToken": firstToken
+    });
+  }
+
+  void endSwitchCase(
+      int labelCount,
+      int expressionCount,
+      Token defaultKeyword,
+      Token colonAfterDefault,
+      int statementCount,
+      Token firstToken,
+      Token endToken) {
+    seen("SwitchCase", DirectParserASTType.END, {
+      "labelCount": labelCount,
+      "expressionCount": expressionCount,
+      "defaultKeyword": defaultKeyword,
+      "colonAfterDefault": colonAfterDefault,
+      "statementCount": statementCount,
+      "firstToken": firstToken,
+      "endToken": endToken
+    });
+  }
+
+  void handleThisExpression(Token token, IdentifierContext context) {
+    seen("ThisExpression", DirectParserASTType.HANDLE,
+        {"token": token, "context": context});
+  }
+
+  void handleUnaryPostfixAssignmentExpression(Token token) {
+    seen("UnaryPostfixAssignmentExpression", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void handleUnaryPrefixExpression(Token token) {
+    seen("UnaryPrefixExpression", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleUnaryPrefixAssignmentExpression(Token token) {
+    seen("UnaryPrefixAssignmentExpression", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void beginFormalParameterDefaultValueExpression() {
+    seen(
+        "FormalParameterDefaultValueExpression", DirectParserASTType.BEGIN, {});
+  }
+
+  void endFormalParameterDefaultValueExpression() {
+    seen("FormalParameterDefaultValueExpression", DirectParserASTType.END, {});
+  }
+
+  void handleValuedFormalParameter(Token equals, Token token) {
+    seen("ValuedFormalParameter", DirectParserASTType.HANDLE,
+        {"equals": equals, "token": token});
+  }
+
+  void handleFormalParameterWithoutValue(Token token) {
+    seen("FormalParameterWithoutValue", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void handleVoidKeyword(Token token) {
+    seen("VoidKeyword", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleVoidKeywordWithTypeArguments(Token token) {
+    seen("VoidKeywordWithTypeArguments", DirectParserASTType.HANDLE,
+        {"token": token});
+  }
+
+  void beginYieldStatement(Token token) {
+    seen("YieldStatement", DirectParserASTType.BEGIN, {"token": token});
+  }
+
+  void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
+    seen("YieldStatement", DirectParserASTType.END, {
+      "yieldToken": yieldToken,
+      "starToken": starToken,
+      "endToken": endToken
+    });
+  }
+
+  void endInvalidYieldStatement(Token beginToken, Token starToken,
+      Token endToken, MessageCode errorCode) {
+    seen("InvalidYieldStatement", DirectParserASTType.END, {
+      "beginToken": beginToken,
+      "starToken": starToken,
+      "endToken": endToken,
+      "errorCode": errorCode
+    });
+  }
+
+  void handleRecoverableError(
+      Message message, Token startToken, Token endToken) {
+    seen("RecoverableError", DirectParserASTType.HANDLE,
+        {"message": message, "startToken": startToken, "endToken": endToken});
+  }
+
+  void handleErrorToken(ErrorToken token) {
+    seen("ErrorToken", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleUnescapeError(
+      Message message, Token location, int stringOffset, int length) {
+    seen("UnescapeError", DirectParserASTType.HANDLE, {
+      "message": message,
+      "location": location,
+      "stringOffset": stringOffset,
+      "length": length
+    });
+  }
+
+  void handleInvalidStatement(Token token, Message message) {
+    seen("InvalidStatement", DirectParserASTType.HANDLE,
+        {"token": token, "message": message});
+  }
+
+  void handleScript(Token token) {
+    seen("Script", DirectParserASTType.HANDLE, {"token": token});
+  }
+
+  void handleCommentReferenceText(String referenceSource, int referenceOffset) {
+    seen("CommentReferenceText", DirectParserASTType.HANDLE, {
+      "referenceSource": referenceSource,
+      "referenceOffset": referenceOffset
+    });
+  }
+
+  void handleCommentReference(
+      Token newKeyword, Token prefix, Token period, Token token) {
+    seen("CommentReference", DirectParserASTType.HANDLE, {
+      "newKeyword": newKeyword,
+      "prefix": prefix,
+      "period": period,
+      "token": token
+    });
+  }
+
+  void handleNoCommentReference() {
+    seen("NoCommentReference", DirectParserASTType.HANDLE, {});
+  }
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
index 3c87cac..ca25109 100644
--- a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
@@ -28,7 +28,7 @@
       beginArguments(()
       endArguments(0, (, ))
       handleSend(value, ;)
-      endBinaryExpression(.)
+      handleEndingBinaryExpression(.)
       handleExpressionFunctionBody(=>, ;)
     endTopLevelMethod(Future, null, ;)
   endTopLevelDeclaration(void)
diff --git a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
index 56c7a0d..2bc0bed 100644
--- a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
@@ -55,7 +55,7 @@
                             listener: beginArguments(()
                             listener: endArguments(0, (, ))
                       listener: handleSend(value, ;)
-                listener: endBinaryExpression(.)
+                listener: handleEndingBinaryExpression(.)
             ensureSemicolon())
             listener: handleExpressionFunctionBody(=>, ;)
             inGenerator()
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 e21f896..caa817a 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
@@ -527,30 +527,32 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(Foo)
-          handleType(int, null)
-          handleIdentifier(Foo, fieldDeclaration)
-          handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(A)
-        handleType(int, null)
-        handleIdentifier(A, fieldDeclaration)
-        handleNoFieldInitializer(,)
-        handleIdentifier(Foo, fieldDeclaration)
-        handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-        handleNoFieldInitializer(,)
-        handleIdentifier(B, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, null, 3, int, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 19, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields(})
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Foo)
+            handleType(int, null)
+            handleIdentifier(Foo, fieldDeclaration)
+            handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(A)
+            handleType(int, null)
+            handleIdentifier(A, fieldDeclaration)
+            handleNoFieldInitializer(,)
+            handleIdentifier(Foo, fieldDeclaration)
+            handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
+            handleNoFieldInitializer(,)
+            handleIdentifier(B, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 3, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 19, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 5590321..4b28f49 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
@@ -991,6 +991,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', Foo, DeclarationKind.Class, Foo, false)
+                listener: beginFields(})
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Foo)
                 listener: handleType(int, null)
@@ -1009,6 +1010,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', A, DeclarationKind.Class, Foo, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(A)
                 listener: handleType(int, null)
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 60c0efb..6514ad1 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
@@ -12,124 +12,126 @@
   beginMetadataStar(const)
   endMetadataStar(0)
   beginTopLevelMember(const)
-    handleNoType(const)
-    handleIdentifier(annotation, topLevelVariableDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralNull(null)
-    endFieldInitializer(=, ;)
-  endTopLevelFields(null, null, null, null, const, 1, const, ;)
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-  handleIdentifier(Annotation, classOrMixinDeclaration)
-  handleNoTypeVariables({)
-  beginClassDeclaration(class, null, Annotation)
-    handleNoType(Annotation)
-    handleClassExtends(null, 1)
-    handleClassNoWithClause()
-    handleClassOrMixinImplements(null, 0)
-    handleClassHeader(class, class, null)
-    beginClassOrMixinBody(DeclarationKind.Class, {)
-      beginMetadataStar(final)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(String, typeReference)
-        handleNoTypeArguments(message)
-        handleType(String, null)
-        handleIdentifier(message, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, final, 1, final, ;)
-    endMember()
-    beginMetadataStar(const)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, const, null, Annotation)
-        handleNoType(const)
-        handleIdentifier(Annotation, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(this)
-          endMetadataStar(0)
-          beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
-            handleNoType(()
-            handleIdentifier(message, fieldInitializer)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(this, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        handleNoInitializers()
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, const, (, null, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-handleIdentifier(A, classOrMixinDeclaration)
-beginTypeVariables(<)
-  beginMetadataStar(E)
+    beginFields()
+      handleNoType(const)
+      handleIdentifier(annotation, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralNull(null)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, const, 1, const, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
   endMetadataStar(0)
-  handleIdentifier(E, typeVariableDeclaration)
-  beginTypeVariable(E)
-    handleTypeVariablesDefined(E, 1)
-    handleNoType(E)
-  endTypeVariable(>, 0, null, null)
-endTypeVariables(<, >)
-beginClassDeclaration(class, null, A)
-  handleNoType(>)
-  handleClassExtends(null, 1)
-  handleClassNoWithClause()
-  handleClassOrMixinImplements(null, 0)
-  handleClassHeader(class, class, null)
-  beginClassOrMixinBody(DeclarationKind.Class, {)
-  endClassOrMixinBody(DeclarationKind.Class, 0, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-handleIdentifier(C, classOrMixinDeclaration)
-handleNoTypeVariables({)
-beginClassDeclaration(class, null, C)
-  handleNoType(C)
-  handleClassExtends(null, 1)
-  handleClassNoWithClause()
-  handleClassOrMixinImplements(null, 0)
-  handleClassHeader(class, class, null)
-  beginClassOrMixinBody(DeclarationKind.Class, {)
-    beginMetadataStar(m)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, m)
-        handleNoType({)
-        handleIdentifier(m, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-        endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-        handleNoInitializers()
-        handleAsyncModifier(null, null)
-        beginNewExpression(new)
-          handleIdentifier(A, constructorReference)
-          beginConstructorReference(A)
-            beginTypeArguments(<)
-              handleRecoverableError(AnnotationOnTypeArgument, @, annotation)
-              handleRecoverableError(AnnotationOnTypeArgument, @, ))
-              handleIdentifier(C, typeReference)
-              handleNoTypeArguments(>)
-              handleType(C, null)
-            endTypeArguments(1, <, >)
-            handleNoConstructorReferenceContinuationAfterTypeArguments(()
-          endConstructorReference(A, null, ()
-          beginArguments(()
-          endArguments(0, (, ))
-        endNewExpression(new)
-        handleExpressionFunctionBody(=>, ;)
-      endClassMethod(null, m, (, null, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Annotation, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Annotation)
+      handleNoType(Annotation)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(final)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleIdentifier(String, typeReference)
+            handleNoTypeArguments(message)
+            handleType(String, null)
+            handleIdentifier(message, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, final, 1, final, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, const, null, Annotation)
+            handleNoType(const)
+            handleIdentifier(Annotation, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(this)
+              endMetadataStar(0)
+              beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(message, fieldInitializer)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(this, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, const, (, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(E)
+      endMetadataStar(0)
+      handleIdentifier(E, typeVariableDeclaration)
+      beginTypeVariable(E)
+        handleTypeVariablesDefined(E, 1)
+        handleNoType(E)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, A)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(m)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, m)
+            handleNoType({)
+            handleIdentifier(m, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginNewExpression(new)
+              handleIdentifier(A, constructorReference)
+              beginConstructorReference(A)
+                beginTypeArguments(<)
+                  handleRecoverableError(AnnotationOnTypeArgument, @, annotation)
+                  handleRecoverableError(AnnotationOnTypeArgument, @, ))
+                  handleIdentifier(C, typeReference)
+                  handleNoTypeArguments(>)
+                  handleType(C, null)
+                endTypeArguments(1, <, >)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(()
+              endConstructorReference(A, null, ()
+              beginArguments(()
+              endArguments(0, (, ))
+            endNewExpression(new)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(null, m, (, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
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 cf8c8fc..14fe0c9 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
@@ -9,6 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
       parseFields(, null, null, null, null, null, const, const, Instance of 'NoType', annotation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields()
         listener: handleNoType(const)
         ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
           listener: handleIdentifier(annotation, topLevelVariableDeclaration)
@@ -54,6 +55,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleType', message, DeclarationKind.Class, Annotation, false)
+                listener: beginFields({)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(message)
                 listener: handleType(String, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
index 0525878..6e8b00d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
@@ -44,18 +44,18 @@
           handleNoArguments(<)
           handleSend(T, <)
           beginBinaryExpression(<)
-          handleIdentifier(R, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            beginTypeArguments(<)
-              handleIdentifier(Z, typeReference)
-              handleNoTypeArguments())
-              handleType(Z, null)
-            endTypeArguments(1, <, >)
-            handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], , )
-            handleLiteralList(0, [, null, ])
-          endArguments(1, (, ))
-          handleSend(R, })
+            handleIdentifier(R, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+              beginTypeArguments(<)
+                handleIdentifier(Z, typeReference)
+                handleNoTypeArguments())
+                handleType(Z, null)
+              endTypeArguments(1, <, >)
+              handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], , )
+              handleLiteralList(0, [, null, ])
+            endArguments(1, (, ))
+            handleSend(R, })
           endBinaryExpression(<)
         endArguments(1, (, ))
         handleSend(m, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
index 852c662..5eccfef 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
@@ -15,23 +15,24 @@
 beginCompilationUnit(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
-  beginFunctionTypeAlias(typedef)
-    handleIdentifier(F, typedefDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(Glib)
-      endMetadataStar(0)
-      handleIdentifier(Glib, typeVariableDeclaration)
-      beginTypeVariable(Glib)
-        handleTypeVariablesDefined(Glib, 1)
-        handleNoType(Glib)
-      endTypeVariable(., 0, null, null)
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], Glib, Glib)
-    endTypeVariables(<, >)
-    handleRecoverableError(Message[ExpectedType, Expected a type, but got ''., null, {token: }], , )
-    handleIdentifier(, typeReference)
-    handleNoTypeArguments()
-    handleType(, null)
-    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-  endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration()
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(Glib)
+        endMetadataStar(0)
+        handleIdentifier(Glib, typeVariableDeclaration)
+        beginTypeVariable(Glib)
+          handleTypeVariablesDefined(Glib, 1)
+          handleNoType(Glib)
+        endTypeVariable(., 0, null, null)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], Glib, Glib)
+      endTypeVariables(<, >)
+      handleRecoverableError(Message[ExpectedType, Expected a type, but got ''., null, {token: }], , )
+      handleIdentifier(, typeReference)
+      handleNoTypeArguments()
+      handleType(, null)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 836daaf..311343c 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
@@ -9,6 +9,7 @@
     parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
index f33c1aa..93bab66 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
@@ -63,18 +63,19 @@
   beginMetadataStar(b)
   endMetadataStar(0)
   beginTopLevelMember(b)
-    handleIdentifier(b, typeReference)
-    beginTypeArguments(<)
-      handleIdentifier(c, typeReference)
-      handleNoTypeArguments($)
-      handleType(c, null)
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], c, c)
-    endTypeArguments(1, <, >)
-    handleType(b, null)
-    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., null, {token: }], , )
-    handleIdentifier(, topLevelVariableDeclaration)
-    handleNoFieldInitializer()
-    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-  endTopLevelFields(null, null, null, null, null, 1, b, ;)
-endTopLevelDeclaration()
+    beginFields(;)
+      handleIdentifier(b, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(c, typeReference)
+        handleNoTypeArguments($)
+        handleType(c, null)
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], c, c)
+      endTypeArguments(1, <, >)
+      handleType(b, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., null, {token: }], , )
+      handleIdentifier(, topLevelVariableDeclaration)
+      handleNoFieldInitializer()
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
+    endTopLevelFields(null, null, null, null, null, 1, b, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
index 8ae34cca..e188e74 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
@@ -76,6 +76,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(b)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', $, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         ensureIdentifier(;, typeReference)
           listener: handleIdentifier(b, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
index 9cf60f7..b2c79c1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
@@ -37,7 +37,7 @@
           handleNoTypeArguments([)
           handleNoArguments([)
           handleSend(foo, [)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleIdentifier(bar, expression)
           handleNoTypeArguments(])
           handleNoArguments(])
@@ -69,7 +69,7 @@
               handleNoTypeArguments([)
               handleNoArguments([)
               handleSend(foo, [)
-              endBinaryExpression(..)
+              handleEndingBinaryExpression(..)
               handleIdentifier(bar, expression)
               handleNoTypeArguments(])
               handleNoArguments(])
@@ -90,7 +90,7 @@
           handleNoTypeArguments([])
           handleNoArguments([])
           handleSend(foo, [])
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., null, {token: ]}], ], ])
           handleIdentifier(, expression)
           handleNoTypeArguments(])
@@ -123,7 +123,7 @@
               handleNoTypeArguments([])
               handleNoArguments([])
               handleSend(foo, [])
-              endBinaryExpression(..)
+              handleEndingBinaryExpression(..)
               handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., null, {token: ]}], ], ])
               handleIdentifier(, expression)
               handleNoTypeArguments(])
@@ -145,7 +145,7 @@
           handleNoTypeArguments([)
           handleNoArguments([)
           handleSend(foo, [)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., null, {token: ]}], ], ])
           handleIdentifier(, expression)
           handleNoTypeArguments(])
@@ -178,7 +178,7 @@
               handleNoTypeArguments([)
               handleNoArguments([)
               handleSend(foo, [)
-              endBinaryExpression(..)
+              handleEndingBinaryExpression(..)
               handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., null, {token: ]}], ], ])
               handleIdentifier(, expression)
               handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
index d09cea7..1a76870 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
@@ -52,7 +52,7 @@
                           parseArgumentsOpt(foo)
                             listener: handleNoArguments([)
                           listener: handleSend(foo, [)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseArgumentOrIndexStar(foo, Instance of 'NoTypeParamOrArg', false)
                           parseExpression([)
                             parsePrecedenceExpression([, 1, true)
@@ -140,7 +140,7 @@
                                                               parseArgumentsOpt(foo)
                                                                 listener: handleNoArguments([)
                                                               listener: handleSend(foo, [)
-                                                            listener: endBinaryExpression(..)
+                                                            listener: handleEndingBinaryExpression(..)
                                                             parseArgumentOrIndexStar(foo, Instance of 'NoTypeParamOrArg', false)
                                                               parseExpression([)
                                                                 parsePrecedenceExpression([, 1, true)
@@ -191,7 +191,7 @@
                           parseArgumentsOpt(foo)
                             listener: handleNoArguments([])
                           listener: handleSend(foo, [])
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         rewriteSquareBrackets(foo)
                           link([, ])
                           rewriter()
@@ -284,7 +284,7 @@
                                                               parseArgumentsOpt(foo)
                                                                 listener: handleNoArguments([])
                                                               listener: handleSend(foo, [])
-                                                            listener: endBinaryExpression(..)
+                                                            listener: handleEndingBinaryExpression(..)
                                                             rewriteSquareBrackets(foo)
                                                               link([, ])
                                                               rewriter()
@@ -340,7 +340,7 @@
                           parseArgumentsOpt(foo)
                             listener: handleNoArguments([)
                           listener: handleSend(foo, [)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseArgumentOrIndexStar(foo, Instance of 'NoTypeParamOrArg', false)
                           parseExpression([)
                             parsePrecedenceExpression([, 1, true)
@@ -430,7 +430,7 @@
                                                               parseArgumentsOpt(foo)
                                                                 listener: handleNoArguments([)
                                                               listener: handleSend(foo, [)
-                                                            listener: endBinaryExpression(..)
+                                                            listener: handleEndingBinaryExpression(..)
                                                             parseArgumentOrIndexStar(foo, Instance of 'NoTypeParamOrArg', false)
                                                               parseExpression([)
                                                                 parsePrecedenceExpression([, 1, true)
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 29dba13..d552dbc 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
@@ -148,865 +148,934 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(abstract)
-          handleType(int, null)
-          handleIdentifier(abstract, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(as)
-        handleType(int, null)
-        handleIdentifier(as, fieldDeclaration)
-        beginFieldInitializer(=)
-          handleLiteralInt(42)
-        endFieldInitializer(=, ;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(int)
-    endMetadataStar(0)
-    beginMember()
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(assert)
-      handleType(int, null)
-      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-      handleIdentifier(assert, fieldDeclaration)
-      beginFieldInitializer(=)
-        handleLiteralInt(42)
-      endFieldInitializer(=, ;)
-    endClassFields(null, null, null, null, null, null, 1, int, ;)
-  endMember()
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginMember()
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(async)
-    handleType(int, null)
-    handleIdentifier(async, fieldDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(await)
-  handleType(int, null)
-  handleIdentifier(await, fieldDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(42)
-  endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(break)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-handleIdentifier(break, fieldDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(case)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-handleIdentifier(case, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(catch)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-handleIdentifier(catch, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(class)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-handleIdentifier(class, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(const)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-handleIdentifier(const, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(continue)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-handleIdentifier(continue, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(covariant)
-handleType(int, null)
-handleIdentifier(covariant, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(default)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-handleIdentifier(default, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(deferred)
-handleType(int, null)
-handleIdentifier(deferred, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(do)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-handleIdentifier(do, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(dynamic)
-handleType(int, null)
-handleIdentifier(dynamic, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(else)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-handleIdentifier(else, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(enum)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-handleIdentifier(enum, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(export)
-handleType(int, null)
-handleIdentifier(export, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(extends)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-handleIdentifier(extends, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(extension)
-handleType(int, null)
-handleIdentifier(extension, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(external)
-handleType(int, null)
-handleIdentifier(external, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(factory)
-handleType(int, null)
-handleIdentifier(factory, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(false)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-handleIdentifier(false, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(final)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-handleIdentifier(final, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(finally)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-handleIdentifier(finally, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(for)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-handleIdentifier(for, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(Function)
-handleType(int, null)
-handleIdentifier(Function, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(get)
-handleType(int, null)
-handleIdentifier(get, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(hide)
-handleType(int, null)
-handleIdentifier(hide, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(if)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-handleIdentifier(if, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(implements)
-handleType(int, null)
-handleIdentifier(implements, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(import)
-handleType(int, null)
-handleIdentifier(import, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(in)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-handleIdentifier(in, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(inout)
-handleType(int, null)
-handleIdentifier(inout, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(interface)
-handleType(int, null)
-handleIdentifier(interface, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(is)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-handleIdentifier(is, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(late)
-handleType(int, null)
-handleIdentifier(late, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(library)
-handleType(int, null)
-handleIdentifier(library, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(mixin)
-handleType(int, null)
-handleIdentifier(mixin, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(native)
-handleType(int, null)
-handleIdentifier(native, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(new)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-handleIdentifier(new, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(null)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-handleIdentifier(null, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(of)
-handleType(int, null)
-handleIdentifier(of, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(on)
-handleType(int, null)
-handleIdentifier(on, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(operator)
-handleType(int, null)
-handleIdentifier(operator, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(out)
-handleType(int, null)
-handleIdentifier(out, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(part)
-handleType(int, null)
-handleIdentifier(part, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(patch)
-handleType(int, null)
-handleIdentifier(patch, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(required)
-handleType(int, null)
-handleIdentifier(required, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(rethrow)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-handleIdentifier(rethrow, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(return)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-handleIdentifier(return, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(set)
-handleType(int, null)
-handleIdentifier(set, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(show)
-handleType(int, null)
-handleIdentifier(show, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(source)
-handleType(int, null)
-handleIdentifier(source, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(static)
-handleType(int, null)
-handleIdentifier(static, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(super)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-handleIdentifier(super, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(switch)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-handleIdentifier(switch, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(sync)
-handleType(int, null)
-handleIdentifier(sync, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(this)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-handleIdentifier(this, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(throw)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-handleIdentifier(throw, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(true)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-handleIdentifier(true, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(try)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-handleIdentifier(try, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(typedef)
-handleType(int, null)
-handleIdentifier(typedef, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(var)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-handleIdentifier(var, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(void)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-handleIdentifier(void, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(while)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-handleIdentifier(while, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(with)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-handleIdentifier(with, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(yield)
-handleType(int, null)
-handleIdentifier(yield, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-endClassOrMixinBody(DeclarationKind.Class, 69, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+            handleIdentifier(assert, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+            handleIdentifier(break, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+            handleIdentifier(case, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+            handleIdentifier(catch, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+            handleIdentifier(class, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+            handleIdentifier(const, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+            handleIdentifier(continue, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+            handleIdentifier(default, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+            handleIdentifier(do, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+            handleIdentifier(else, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+            handleIdentifier(enum, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+            handleIdentifier(extends, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+            handleIdentifier(false, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+            handleIdentifier(final, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+            handleIdentifier(finally, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+            handleIdentifier(for, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+            handleIdentifier(if, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+            handleIdentifier(in, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+            handleIdentifier(is, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+            handleIdentifier(new, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+            handleIdentifier(null, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+            handleIdentifier(rethrow, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+            handleIdentifier(return, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+            handleIdentifier(super, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+            handleIdentifier(switch, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+            handleIdentifier(this, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+            handleIdentifier(throw, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+            handleIdentifier(true, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+            handleIdentifier(try, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+            handleIdentifier(var, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+            handleIdentifier(void, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+            handleIdentifier(while, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+            handleIdentifier(with, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 69, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 baabede..467d656 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -56,6 +57,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -81,6 +83,7 @@
               isReservedKeyword(assert)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
                 listener: handleType(int, null)
@@ -106,6 +109,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
                 listener: handleType(int, null)
@@ -129,6 +133,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
                 listener: handleType(int, null)
@@ -154,6 +159,7 @@
               isReservedKeyword(break)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
                 listener: handleType(int, null)
@@ -181,6 +187,7 @@
               isReservedKeyword(case)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
                 listener: handleType(int, null)
@@ -208,6 +215,7 @@
               isReservedKeyword(catch)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
                 listener: handleType(int, null)
@@ -235,6 +243,7 @@
               isReservedKeyword(class)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
                 listener: handleType(int, null)
@@ -262,6 +271,7 @@
               isReservedKeyword(const)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
                 listener: handleType(int, null)
@@ -289,6 +299,7 @@
               isReservedKeyword(continue)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
                 listener: handleType(int, null)
@@ -314,6 +325,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -339,6 +351,7 @@
               isReservedKeyword(default)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
                 listener: handleType(int, null)
@@ -364,6 +377,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -389,6 +403,7 @@
               isReservedKeyword(do)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
                 listener: handleType(int, null)
@@ -414,6 +429,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -439,6 +455,7 @@
               isReservedKeyword(else)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
                 listener: handleType(int, null)
@@ -466,6 +483,7 @@
               isReservedKeyword(enum)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
                 listener: handleType(int, null)
@@ -491,6 +509,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -516,6 +535,7 @@
               isReservedKeyword(extends)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
                 listener: handleType(int, null)
@@ -541,6 +561,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
                 listener: handleType(int, null)
@@ -564,6 +585,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -587,6 +609,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -612,6 +635,7 @@
               isReservedKeyword(false)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
                 listener: handleType(int, null)
@@ -639,6 +663,7 @@
               isReservedKeyword(final)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
                 listener: handleType(int, null)
@@ -666,6 +691,7 @@
               isReservedKeyword(finally)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
                 listener: handleType(int, null)
@@ -693,6 +719,7 @@
               isReservedKeyword(for)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
                 listener: handleType(int, null)
@@ -718,6 +745,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -742,6 +770,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -765,6 +794,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
                 listener: handleType(int, null)
@@ -790,6 +820,7 @@
               isReservedKeyword(if)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
                 listener: handleType(int, null)
@@ -815,6 +846,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -838,6 +870,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -863,6 +896,7 @@
               isReservedKeyword(in)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
                 listener: handleType(int, null)
@@ -888,6 +922,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
                 listener: handleType(int, null)
@@ -911,6 +946,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -936,6 +972,7 @@
               isReservedKeyword(is)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
                 listener: handleType(int, null)
@@ -961,6 +998,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -984,6 +1022,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -1007,6 +1046,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -1030,6 +1070,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
                 listener: handleType(int, null)
@@ -1055,6 +1096,7 @@
               isReservedKeyword(new)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
                 listener: handleType(int, null)
@@ -1082,6 +1124,7 @@
               isReservedKeyword(null)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
                 listener: handleType(int, null)
@@ -1107,6 +1150,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
                 listener: handleType(int, null)
@@ -1130,6 +1174,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
                 listener: handleType(int, null)
@@ -1154,6 +1199,7 @@
               listener: beginMember()
               isUnaryMinus(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -1177,6 +1223,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
                 listener: handleType(int, null)
@@ -1200,6 +1247,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -1223,6 +1271,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
                 listener: handleType(int, null)
@@ -1246,6 +1295,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -1271,6 +1321,7 @@
               isReservedKeyword(rethrow)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
                 listener: handleType(int, null)
@@ -1298,6 +1349,7 @@
               isReservedKeyword(return)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
                 listener: handleType(int, null)
@@ -1324,6 +1376,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -1347,6 +1400,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
                 listener: handleType(int, null)
@@ -1370,6 +1424,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
                 listener: handleType(int, null)
@@ -1393,6 +1448,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -1418,6 +1474,7 @@
               isReservedKeyword(super)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(super)
                 listener: handleType(int, null)
@@ -1445,6 +1502,7 @@
               isReservedKeyword(switch)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(switch)
                 listener: handleType(int, null)
@@ -1470,6 +1528,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(sync)
                 listener: handleType(int, null)
@@ -1494,6 +1553,7 @@
               listener: beginMember()
               recoverFromInvalidMember(int, ;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
                 parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(;)
                   listener: handleIdentifier(int, typeReference)
                   listener: handleNoTypeArguments(this)
                   listener: handleType(int, null)
@@ -1521,6 +1581,7 @@
               isReservedKeyword(throw)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
                 listener: handleType(int, null)
@@ -1548,6 +1609,7 @@
               isReservedKeyword(true)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
                 listener: handleType(int, null)
@@ -1575,6 +1637,7 @@
               isReservedKeyword(try)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
                 listener: handleType(int, null)
@@ -1600,6 +1663,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -1625,6 +1689,7 @@
               isReservedKeyword(var)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
                 listener: handleType(int, null)
@@ -1652,6 +1717,7 @@
               isReservedKeyword(void)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
                 listener: handleType(int, null)
@@ -1679,6 +1745,7 @@
               isReservedKeyword(while)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
                 listener: handleType(int, null)
@@ -1706,6 +1773,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -1731,6 +1799,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
                 listener: handleType(int, null)
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 256ca6c..614bc0c 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
@@ -514,7 +514,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -532,12 +532,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(abstract, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -572,7 +572,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -590,12 +590,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(as, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -631,7 +631,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -647,12 +647,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                   handleRecoverableError(AssertAsExpression, assert, assert)
                 endAssert(assert, Assert.Expression, (, null, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -687,7 +687,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -705,12 +705,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(async, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -745,7 +745,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -763,12 +763,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(await, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -804,7 +804,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -829,11 +829,11 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleParenthesizedExpression(()
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(4, {, })
@@ -869,7 +869,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -888,12 +888,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(case, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -929,7 +929,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -948,12 +948,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(catch, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -989,7 +989,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1008,12 +1008,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(class, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1049,7 +1049,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1072,12 +1072,12 @@
                     handleNoArguments(-)
                     handleSend(x, -)
                     beginBinaryExpression(-)
-                    handleLiteralInt(1)
+                      handleLiteralInt(1)
                     endBinaryExpression(-)
                   endArguments(1, (, ))
                 endConstExpression(const)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1113,7 +1113,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1138,11 +1138,11 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleParenthesizedExpression(()
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(4, {, })
@@ -1177,7 +1177,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1195,12 +1195,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(covariant, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1236,7 +1236,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1255,12 +1255,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(default, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1295,7 +1295,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1313,12 +1313,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(deferred, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1354,7 +1354,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1378,11 +1378,11 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                   handleParenthesizedExpression(()
                   beginBinaryExpression(+)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(+)
                   handleExpressionStatement(;)
                 endDoWhileStatementBody(;)
@@ -1428,7 +1428,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1446,12 +1446,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(dynamic, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1487,7 +1487,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1517,11 +1517,11 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleParenthesizedExpression(()
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(4, {, })
@@ -1557,7 +1557,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1576,12 +1576,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(enum, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1616,7 +1616,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1634,12 +1634,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(export, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1675,7 +1675,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1694,12 +1694,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(extends, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1734,7 +1734,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1752,12 +1752,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(extension, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1792,7 +1792,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1810,12 +1810,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(external, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1850,7 +1850,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1868,12 +1868,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(factory, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1909,7 +1909,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1927,12 +1927,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend((, ))
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -1968,7 +1968,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2001,7 +2001,7 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
               handleExpressionStatement(;)
@@ -2019,7 +2019,7 @@
               handleNoArguments(+)
               handleSend(, +)
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(6, {, })
@@ -2055,7 +2055,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2074,12 +2074,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(finally, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2115,7 +2115,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2138,7 +2138,7 @@
                 handleNoArguments(-)
                 handleSend(x, -)
                 beginBinaryExpression(-)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(-)
                 handleForInitializerExpressionStatement(1, false)
                 handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
@@ -2157,7 +2157,7 @@
                   handleNoArguments(+)
                   handleSend(, +)
                   beginBinaryExpression(+)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(+)
                   handleExpressionStatement(;)
                 endForStatementBody(})
@@ -2194,7 +2194,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2212,12 +2212,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(Function, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2252,7 +2252,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2270,12 +2270,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(get, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2310,7 +2310,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2328,12 +2328,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(hide, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2369,7 +2369,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2392,7 +2392,7 @@
                 handleNoArguments(-)
                 handleSend(x, -)
                 beginBinaryExpression(-)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(-)
                 handleParenthesizedCondition(()
                 beginThenStatement(+)
@@ -2402,7 +2402,7 @@
                   handleNoArguments(+)
                   handleSend(, +)
                   beginBinaryExpression(+)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(+)
                   handleExpressionStatement(;)
                 endThenStatement(;)
@@ -2439,7 +2439,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2457,12 +2457,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(implements, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2497,7 +2497,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2515,12 +2515,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(import, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2556,7 +2556,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2575,12 +2575,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(in, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2615,7 +2615,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2633,12 +2633,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(inout, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2673,7 +2673,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2691,12 +2691,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(interface, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2732,7 +2732,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2761,11 +2761,11 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleParenthesizedExpression(()
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(3, {, })
@@ -2800,7 +2800,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2818,12 +2818,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(late, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2858,7 +2858,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2876,12 +2876,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(library, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2916,7 +2916,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2934,12 +2934,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(mixin, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -2974,7 +2974,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -2992,12 +2992,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(native, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3033,7 +3033,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3056,12 +3056,12 @@
                     handleNoArguments(-)
                     handleSend(x, -)
                     beginBinaryExpression(-)
-                    handleLiteralInt(1)
+                      handleLiteralInt(1)
                     endBinaryExpression(-)
                   endArguments(1, (, ))
                 endNewExpression(new)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3097,7 +3097,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3115,12 +3115,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend((, ))
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3155,7 +3155,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3173,12 +3173,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(of, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3213,7 +3213,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3231,12 +3231,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(on, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3271,7 +3271,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3289,12 +3289,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(operator, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3329,7 +3329,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3347,12 +3347,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(out, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3387,7 +3387,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3405,12 +3405,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(part, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3445,7 +3445,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3463,12 +3463,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(patch, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3503,7 +3503,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3521,12 +3521,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(required, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3562,7 +3562,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3581,12 +3581,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(rethrow, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3622,7 +3622,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3638,11 +3638,11 @@
                 handleNoArguments(-)
                 handleSend(x, -)
                 beginBinaryExpression(-)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(-)
                 handleParenthesizedExpression(()
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3677,7 +3677,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3695,12 +3695,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(set, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3735,7 +3735,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3753,12 +3753,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(show, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3793,7 +3793,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3811,12 +3811,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(source, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3851,7 +3851,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3869,12 +3869,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(static, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3910,7 +3910,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3928,12 +3928,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(super, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -3969,7 +3969,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -3992,7 +3992,7 @@
                 handleNoArguments(-)
                 handleSend(x, -)
                 beginBinaryExpression(-)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(-)
                 handleParenthesizedCondition(()
                 handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
@@ -4005,7 +4005,7 @@
               handleNoArguments(+)
               handleSend(, +)
               beginBinaryExpression(+)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(+)
               handleExpressionStatement(;)
             endBlockFunctionBody(4, {, })
@@ -4040,7 +4040,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -4058,12 +4058,12 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(sync, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
@@ -4072,677 +4072,678 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(this)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-          handleIdentifier(this, fieldDeclaration)
-          handleNoFieldInitializer(()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(()
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, ()
-          handleNoType(;)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-          handleIdentifier(, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleThisExpression(this, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
+          beginFields(})
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+            handleIdentifier(this, fieldDeclaration)
+            handleNoFieldInitializer(()
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(()
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, ()
+            handleNoType(;)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+            handleIdentifier(, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleThisExpression(this, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(this, +)
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, , (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, throw)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+            handleIdentifier(throw, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
                 handleIdentifier(x, expression)
                 handleNoTypeArguments(-)
                 handleNoArguments(-)
                 handleSend(x, -)
                 beginBinaryExpression(-)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(this, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, , (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, throw)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(throw)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-          handleIdentifier(throw, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
+                handleParenthesizedExpression(()
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+)
+                handleThrowExpression(throw, ;)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, true)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+            handleIdentifier(true, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleLiteralBool(true)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, try)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+            handleIdentifier(try, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(try)
+                handleNoArguments(try)
+                handleSend(, try)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+              endReturnStatement(true, return, ;)
+              beginTryStatement(try)
+                handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
+                beginBlock({, BlockKind(try statement))
+                endBlock(0, {, }, BlockKind(try statement))
+                handleRecoverableError(OnlyTry, try, try)
+              endTryStatement(0, try, null)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
               handleParenthesizedExpression(()
               beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-              handleThrowExpression(throw, ;)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, true)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(true)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-          handleIdentifier(true, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleLiteralBool(true)
-              handleNoTypeArguments(()
-              beginArguments(()
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
                 handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend((, ))
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
               endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, try)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(try)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-          handleIdentifier(try, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(try)
-              handleNoArguments(try)
-              handleSend(, try)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
-            endReturnStatement(true, return, ;)
-            beginTryStatement(try)
-              handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
-              beginBlock({, BlockKind(try statement))
-              endBlock(0, {, }, BlockKind(try statement))
-              handleRecoverableError(OnlyTry, try, try)
-            endTryStatement(0, try, null)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleParenthesizedExpression(()
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(4, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, typedef)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(typedef)
-          handleType(int, null)
-          handleIdentifier(typedef, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleIdentifier(typedef, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, typedef)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
                 handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(typedef, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, var)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(var)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-          handleIdentifier(var, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(var)
-              handleNoArguments(var)
-              handleSend(, var)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
-            endReturnStatement(true, return, ;)
-            beginMetadataStar(var)
-            endMetadataStar(0)
-            handleNoType(var)
-            beginVariablesDeclaration((, null, var)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-              handleIdentifier(, localVariableDeclaration)
-              beginInitializedIdentifier()
-                handleNoVariableInitializer()
-              endInitializedIdentifier()
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-            endVariablesDeclaration(1, ;)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-            handleIdentifier(, expression)
-            handleNoTypeArguments())
-            handleNoArguments())
-            handleSend(, ))
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(6, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, void)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(void)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-          handleIdentifier(void, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(void)
-              handleNoArguments(void)
-              handleSend(, void)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
-            endReturnStatement(true, return, ;)
-            beginMetadataStar(void)
-            endMetadataStar(0)
-            handleVoidKeyword(void)
-            beginVariablesDeclaration((, null, null)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
-              handleIdentifier(, localVariableDeclaration)
-              beginInitializedIdentifier()
-                handleNoVariableInitializer()
-              endInitializedIdentifier()
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
-            endVariablesDeclaration(1, ;)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(-)
-            handleNoArguments(-)
-            handleSend(x, -)
-            beginBinaryExpression(-)
-            handleLiteralInt(1)
-            endBinaryExpression(-)
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
-            handleIdentifier(, expression)
-            handleNoTypeArguments())
-            handleNoArguments())
-            handleSend(, ))
-            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
-            handleExpressionStatement(;)
-            handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
-            handleRecoverableError(UnsupportedPrefixPlus, +, +)
-            handleIdentifier(, expression)
-            handleNoTypeArguments(+)
-            handleNoArguments(+)
-            handleSend(, +)
-            beginBinaryExpression(+)
-            handleLiteralInt(1)
-            endBinaryExpression(+)
-            handleExpressionStatement(;)
-          endBlockFunctionBody(6, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, while)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(while)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-          handleIdentifier(while, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-              handleIdentifier(, expression)
-              handleNoTypeArguments(while)
-              handleNoArguments(while)
-              handleSend(, while)
-              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
-            endReturnStatement(true, return, ;)
-            beginWhileStatement(while)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(typedef, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(typedef, +)
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, var)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+            handleIdentifier(var, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(var)
+                handleNoArguments(var)
+                handleSend(, var)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration((, null, var)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer()
+                endInitializedIdentifier()
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+              endVariablesDeclaration(1, ;)
               handleIdentifier(x, expression)
               handleNoTypeArguments(-)
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
-              handleParenthesizedCondition(()
-              beginWhileStatementBody(+)
-                handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, +)
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, void)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+            handleIdentifier(void, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
                 handleIdentifier(, expression)
-                handleNoTypeArguments(+)
-                handleNoArguments(+)
-                handleSend(, +)
+                handleNoTypeArguments(void)
+                handleNoArguments(void)
+                handleSend(, void)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(void)
+              endMetadataStar(0)
+              handleVoidKeyword(void)
+              beginVariablesDeclaration((, null, null)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., null, {token: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer()
+                endInitializedIdentifier()
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, -)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., null, {token: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {token: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, +)
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, while)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+            handleIdentifier(while, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(while)
+                handleNoArguments(while)
+                handleSend(, while)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+              endReturnStatement(true, return, ;)
+              beginWhileStatement(while)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, -)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-)
+                handleParenthesizedCondition(()
+                beginWhileStatementBody(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, +)
+                  beginBinaryExpression(+)
+                    handleLiteralInt(1)
+                  endBinaryExpression(+)
+                  handleExpressionStatement(;)
+                endWhileStatementBody(})
+              endWhileStatement(while, })
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, with)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+            handleIdentifier(with, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+                handleIdentifier(with, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(with, +)
                 beginBinaryExpression(+)
-                handleLiteralInt(1)
+                  handleLiteralInt(1)
                 endBinaryExpression(+)
-                handleExpressionStatement(;)
-              endWhileStatementBody(})
-            endWhileStatement(while, })
-          endBlockFunctionBody(3, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, with)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(with)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-              handleIdentifier(with, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, yield)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
                 handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(with, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, yield)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(yield)
-          handleType(int, null)
-          handleIdentifier(yield, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginIfStatement(if)
-              handleIdentifier(x, expression)
-              handleNoTypeArguments(==)
-              handleNoArguments(==)
-              handleSend(x, ==)
-              beginBinaryExpression(==)
-              handleLiteralInt(0)
-              endBinaryExpression(==)
-              handleParenthesizedCondition(()
-              beginThenStatement(return)
-                beginReturnStatement(return)
-                  handleLiteralInt(42)
-                endReturnStatement(true, return, ;)
-              endThenStatement(;)
-            endIfStatement(if, null)
-            beginReturnStatement(return)
-              handleIdentifier(yield, expression)
-              handleNoTypeArguments(()
-              beginArguments(()
-                handleIdentifier(x, expression)
-                handleNoTypeArguments(-)
-                handleNoArguments(-)
-                handleSend(x, -)
-                beginBinaryExpression(-)
-                handleLiteralInt(1)
-                endBinaryExpression(-)
-              endArguments(1, (, ))
-              handleSend(yield, +)
-              beginBinaryExpression(+)
-              handleLiteralInt(1)
-              endBinaryExpression(+)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(2, {, })
-        endClassMethod(null, int, (, null, })
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 70, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, ==)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==)
+                handleParenthesizedCondition(()
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(;)
+              endIfStatement(if, null)
+              beginReturnStatement(return)
+                handleIdentifier(yield, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                endArguments(1, (, ))
+                handleSend(yield, +)
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, int, (, null, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 70, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 d61d8a2..325c75e 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
@@ -8862,6 +8862,7 @@
               listener: beginMember()
               recoverFromInvalidMember(int, }, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
                 parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(})
                   listener: handleIdentifier(int, typeReference)
                   listener: handleNoTypeArguments(this)
                   listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
index 544e865..7789ff7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
@@ -136,862 +136,931 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(abstract)
-    handleType(int, null)
-    handleIdentifier(abstract, topLevelVariableDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(as)
-  handleType(int, null)
-  handleIdentifier(as, topLevelVariableDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(42)
-  endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(assert)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-handleIdentifier(assert, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(async)
-handleType(int, null)
-handleIdentifier(async, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(await)
-handleType(int, null)
-handleIdentifier(await, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(break)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-handleIdentifier(break, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(case)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-handleIdentifier(case, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(catch)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-handleIdentifier(catch, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(class)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-handleIdentifier(class, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(const)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-handleIdentifier(const, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(continue)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-handleIdentifier(continue, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(covariant)
-handleType(int, null)
-handleIdentifier(covariant, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(default)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-handleIdentifier(default, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(deferred)
-handleType(int, null)
-handleIdentifier(deferred, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(do)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-handleIdentifier(do, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(dynamic)
-handleType(int, null)
-handleIdentifier(dynamic, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(else)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-handleIdentifier(else, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(enum)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-handleIdentifier(enum, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(export)
-handleType(int, null)
-handleIdentifier(export, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(extends)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-handleIdentifier(extends, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(extension)
-handleType(int, null)
-handleIdentifier(extension, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(external)
-handleType(int, null)
-handleIdentifier(external, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(factory)
-handleType(int, null)
-handleIdentifier(factory, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(false)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-handleIdentifier(false, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(final)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-handleIdentifier(final, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(finally)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-handleIdentifier(finally, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(for)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-handleIdentifier(for, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(Function)
-handleType(int, null)
-handleIdentifier(Function, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(get)
-handleType(int, null)
-handleIdentifier(get, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(hide)
-handleType(int, null)
-handleIdentifier(hide, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(if)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-handleIdentifier(if, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(implements)
-handleType(int, null)
-handleIdentifier(implements, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(import)
-handleType(int, null)
-handleIdentifier(import, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(in)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-handleIdentifier(in, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(inout)
-handleType(int, null)
-handleIdentifier(inout, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(interface)
-handleType(int, null)
-handleIdentifier(interface, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(is)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-handleIdentifier(is, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(late)
-handleType(int, null)
-handleIdentifier(late, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(library)
-handleType(int, null)
-handleIdentifier(library, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(mixin)
-handleType(int, null)
-handleIdentifier(mixin, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(native)
-handleType(int, null)
-handleIdentifier(native, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(new)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-handleIdentifier(new, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(null)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-handleIdentifier(null, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(of)
-handleType(int, null)
-handleIdentifier(of, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(on)
-handleType(int, null)
-handleIdentifier(on, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(operator)
-handleType(int, null)
-handleIdentifier(operator, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(out)
-handleType(int, null)
-handleIdentifier(out, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(part)
-handleType(int, null)
-handleIdentifier(part, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(patch)
-handleType(int, null)
-handleIdentifier(patch, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(required)
-handleType(int, null)
-handleIdentifier(required, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(rethrow)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-handleIdentifier(rethrow, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(return)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-handleIdentifier(return, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(set)
-handleType(int, null)
-handleIdentifier(set, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(show)
-handleType(int, null)
-handleIdentifier(show, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(source)
-handleType(int, null)
-handleIdentifier(source, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(static)
-handleType(int, null)
-handleIdentifier(static, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(super)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-handleIdentifier(super, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(switch)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-handleIdentifier(switch, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(sync)
-handleType(int, null)
-handleIdentifier(sync, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(this)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-handleIdentifier(this, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(throw)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-handleIdentifier(throw, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(true)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-handleIdentifier(true, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(try)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-handleIdentifier(try, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(typedef)
-handleType(int, null)
-handleIdentifier(typedef, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(var)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-handleIdentifier(var, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(void)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-handleIdentifier(void, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(while)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-handleIdentifier(while, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(with)
-handleType(int, null)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-handleIdentifier(with, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(yield)
-handleType(int, null)
-handleIdentifier(yield, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration()
+    beginFields()
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(abstract)
+      handleType(int, null)
+      handleIdentifier(abstract, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(as)
+      handleType(int, null)
+      handleIdentifier(as, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(assert)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+      handleIdentifier(assert, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(async)
+      handleType(int, null)
+      handleIdentifier(async, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(await)
+      handleType(int, null)
+      handleIdentifier(await, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(break)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+      handleIdentifier(break, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(case)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+      handleIdentifier(case, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(catch)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+      handleIdentifier(catch, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(class)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+      handleIdentifier(class, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(const)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+      handleIdentifier(const, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(continue)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+      handleIdentifier(continue, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(covariant)
+      handleType(int, null)
+      handleIdentifier(covariant, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(default)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+      handleIdentifier(default, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(deferred)
+      handleType(int, null)
+      handleIdentifier(deferred, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(do)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+      handleIdentifier(do, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(dynamic)
+      handleType(int, null)
+      handleIdentifier(dynamic, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(else)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+      handleIdentifier(else, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(enum)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+      handleIdentifier(enum, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(export)
+      handleType(int, null)
+      handleIdentifier(export, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extends)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+      handleIdentifier(extends, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extension)
+      handleType(int, null)
+      handleIdentifier(extension, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(external)
+      handleType(int, null)
+      handleIdentifier(external, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(factory)
+      handleType(int, null)
+      handleIdentifier(factory, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(false)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+      handleIdentifier(false, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(final)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+      handleIdentifier(final, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(finally)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+      handleIdentifier(finally, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(for)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+      handleIdentifier(for, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(Function)
+      handleType(int, null)
+      handleIdentifier(Function, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(get, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(hide)
+      handleType(int, null)
+      handleIdentifier(hide, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(if)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+      handleIdentifier(if, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(int, null)
+      handleIdentifier(implements, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(import)
+      handleType(int, null)
+      handleIdentifier(import, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(in)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+      handleIdentifier(in, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(inout)
+      handleType(int, null)
+      handleIdentifier(inout, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(interface)
+      handleType(int, null)
+      handleIdentifier(interface, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(is)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+      handleIdentifier(is, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(late)
+      handleType(int, null)
+      handleIdentifier(late, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(library)
+      handleType(int, null)
+      handleIdentifier(library, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(mixin)
+      handleType(int, null)
+      handleIdentifier(mixin, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(native)
+      handleType(int, null)
+      handleIdentifier(native, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(new)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+      handleIdentifier(new, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(null)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+      handleIdentifier(null, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(of)
+      handleType(int, null)
+      handleIdentifier(of, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(on)
+      handleType(int, null)
+      handleIdentifier(on, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(operator)
+      handleType(int, null)
+      handleIdentifier(operator, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(out)
+      handleType(int, null)
+      handleIdentifier(out, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(part)
+      handleType(int, null)
+      handleIdentifier(part, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(patch)
+      handleType(int, null)
+      handleIdentifier(patch, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(required)
+      handleType(int, null)
+      handleIdentifier(required, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(rethrow)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+      handleIdentifier(rethrow, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(return)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+      handleIdentifier(return, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(set)
+      handleType(int, null)
+      handleIdentifier(set, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(show)
+      handleType(int, null)
+      handleIdentifier(show, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(source)
+      handleType(int, null)
+      handleIdentifier(source, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(static)
+      handleType(int, null)
+      handleIdentifier(static, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(super)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+      handleIdentifier(super, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(switch)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+      handleIdentifier(switch, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(sync)
+      handleType(int, null)
+      handleIdentifier(sync, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(this)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+      handleIdentifier(this, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(throw)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+      handleIdentifier(throw, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(true)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+      handleIdentifier(true, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(try)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+      handleIdentifier(try, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(typedef)
+      handleType(int, null)
+      handleIdentifier(typedef, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(var)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+      handleIdentifier(var, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(void)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+      handleIdentifier(void, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(while)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+      handleIdentifier(while, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(with)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(yield)
+      handleType(int, null)
+      handleIdentifier(yield, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
index 0c129c8..fc69737 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
@@ -9,6 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
+        listener: beginFields()
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -32,6 +33,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -57,6 +59,7 @@
       isReservedKeyword(assert)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(assert)
         listener: handleType(int, null)
@@ -82,6 +85,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(async)
         listener: handleType(int, null)
@@ -105,6 +109,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(await)
         listener: handleType(int, null)
@@ -130,6 +135,7 @@
       isReservedKeyword(break)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(break)
         listener: handleType(int, null)
@@ -157,6 +163,7 @@
       isReservedKeyword(case)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(case)
         listener: handleType(int, null)
@@ -184,6 +191,7 @@
       isReservedKeyword(catch)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(catch)
         listener: handleType(int, null)
@@ -211,6 +219,7 @@
       isReservedKeyword(class)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(class)
         listener: handleType(int, null)
@@ -238,6 +247,7 @@
       isReservedKeyword(const)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(const)
         listener: handleType(int, null)
@@ -265,6 +275,7 @@
       isReservedKeyword(continue)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(continue)
         listener: handleType(int, null)
@@ -290,6 +301,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -315,6 +327,7 @@
       isReservedKeyword(default)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(default)
         listener: handleType(int, null)
@@ -340,6 +353,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -365,6 +379,7 @@
       isReservedKeyword(do)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(do)
         listener: handleType(int, null)
@@ -390,6 +405,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -415,6 +431,7 @@
       isReservedKeyword(else)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(else)
         listener: handleType(int, null)
@@ -442,6 +459,7 @@
       isReservedKeyword(enum)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(enum)
         listener: handleType(int, null)
@@ -467,6 +485,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -492,6 +511,7 @@
       isReservedKeyword(extends)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extends)
         listener: handleType(int, null)
@@ -517,6 +537,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extension)
         listener: handleType(int, null)
@@ -540,6 +561,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -563,6 +585,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -588,6 +611,7 @@
       isReservedKeyword(false)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(false)
         listener: handleType(int, null)
@@ -615,6 +639,7 @@
       isReservedKeyword(final)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(final)
         listener: handleType(int, null)
@@ -642,6 +667,7 @@
       isReservedKeyword(finally)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(finally)
         listener: handleType(int, null)
@@ -669,6 +695,7 @@
       isReservedKeyword(for)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(for)
         listener: handleType(int, null)
@@ -694,6 +721,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -717,6 +745,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -740,6 +769,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(hide)
         listener: handleType(int, null)
@@ -765,6 +795,7 @@
       isReservedKeyword(if)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(if)
         listener: handleType(int, null)
@@ -790,6 +821,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -813,6 +845,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -838,6 +871,7 @@
       isReservedKeyword(in)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(in)
         listener: handleType(int, null)
@@ -863,6 +897,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(inout)
         listener: handleType(int, null)
@@ -886,6 +921,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -911,6 +947,7 @@
       isReservedKeyword(is)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(is)
         listener: handleType(int, null)
@@ -936,6 +973,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(late)
         listener: handleType(int, null)
@@ -959,6 +997,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -982,6 +1021,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -1005,6 +1045,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(native)
         listener: handleType(int, null)
@@ -1030,6 +1071,7 @@
       isReservedKeyword(new)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(new)
         listener: handleType(int, null)
@@ -1057,6 +1099,7 @@
       isReservedKeyword(null)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(null)
         listener: handleType(int, null)
@@ -1082,6 +1125,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(of)
         listener: handleType(int, null)
@@ -1105,6 +1149,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(on)
         listener: handleType(int, null)
@@ -1128,6 +1173,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -1151,6 +1197,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(out)
         listener: handleType(int, null)
@@ -1174,6 +1221,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -1197,6 +1245,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(patch)
         listener: handleType(int, null)
@@ -1220,6 +1269,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(required)
         listener: handleType(int, null)
@@ -1245,6 +1295,7 @@
       isReservedKeyword(rethrow)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(rethrow)
         listener: handleType(int, null)
@@ -1272,6 +1323,7 @@
       isReservedKeyword(return)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(return)
         listener: handleType(int, null)
@@ -1297,6 +1349,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -1320,6 +1373,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(show)
         listener: handleType(int, null)
@@ -1343,6 +1397,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(source)
         listener: handleType(int, null)
@@ -1366,6 +1421,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -1391,6 +1447,7 @@
       isReservedKeyword(super)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
@@ -1418,6 +1475,7 @@
       isReservedKeyword(switch)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(switch)
         listener: handleType(int, null)
@@ -1443,6 +1501,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(sync)
         listener: handleType(int, null)
@@ -1466,6 +1525,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(this)
         listener: handleType(int, null)
@@ -1493,6 +1553,7 @@
       isReservedKeyword(throw)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(throw)
         listener: handleType(int, null)
@@ -1520,6 +1581,7 @@
       isReservedKeyword(true)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(true)
         listener: handleType(int, null)
@@ -1547,6 +1609,7 @@
       isReservedKeyword(try)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(try)
         listener: handleType(int, null)
@@ -1572,6 +1635,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
@@ -1597,6 +1661,7 @@
       isReservedKeyword(var)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(var)
         listener: handleType(int, null)
@@ -1624,6 +1689,7 @@
       isReservedKeyword(void)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(void)
         listener: handleType(int, null)
@@ -1651,6 +1717,7 @@
       isReservedKeyword(while)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(while)
         listener: handleType(int, null)
@@ -1678,6 +1745,7 @@
       isReservedKeyword(with)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -1703,6 +1771,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(yield)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
index 45af522..df30d32 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
@@ -493,7 +493,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -511,12 +511,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(abstract, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -550,7 +550,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -568,12 +568,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(as, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -608,7 +608,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -624,12 +624,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
             handleRecoverableError(AssertAsExpression, assert, assert)
           endAssert(assert, Assert.Expression, (, null, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -663,7 +663,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -681,12 +681,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(async, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -720,7 +720,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -738,12 +738,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(await, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -778,7 +778,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -803,11 +803,11 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleParenthesizedExpression(()
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(4, {, })
@@ -842,7 +842,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -861,12 +861,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(case, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -901,7 +901,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -920,12 +920,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(catch, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -960,7 +960,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -979,12 +979,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(class, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1019,7 +1019,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1042,12 +1042,12 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
             endArguments(1, (, ))
           endConstExpression(const)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1082,7 +1082,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1107,11 +1107,11 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleParenthesizedExpression(()
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(4, {, })
@@ -1145,7 +1145,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1163,12 +1163,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(covariant, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1203,7 +1203,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1222,12 +1222,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(default, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1261,7 +1261,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1279,12 +1279,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(deferred, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1319,7 +1319,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1343,11 +1343,11 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
             handleParenthesizedExpression(()
             beginBinaryExpression(+)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(+)
             handleExpressionStatement(;)
           endDoWhileStatementBody(;)
@@ -1392,7 +1392,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1410,12 +1410,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(dynamic, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1450,7 +1450,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1480,11 +1480,11 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleParenthesizedExpression(()
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(4, {, })
@@ -1519,7 +1519,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1538,12 +1538,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(enum, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1577,7 +1577,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1595,12 +1595,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(export, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1635,7 +1635,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1654,12 +1654,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(extends, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1693,7 +1693,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1711,12 +1711,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(extension, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1750,7 +1750,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1768,12 +1768,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(external, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1807,7 +1807,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1825,12 +1825,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(factory, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1865,7 +1865,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1883,12 +1883,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend((, ))
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -1923,7 +1923,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1956,7 +1956,7 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
@@ -1974,7 +1974,7 @@
         handleNoArguments(+)
         handleSend(, +)
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
@@ -2009,7 +2009,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2028,12 +2028,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(finally, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2068,7 +2068,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2091,7 +2091,7 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleForInitializerExpressionStatement(1, false)
           handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
@@ -2110,7 +2110,7 @@
             handleNoArguments(+)
             handleSend(, +)
             beginBinaryExpression(+)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(+)
             handleExpressionStatement(;)
           endForStatementBody(})
@@ -2146,7 +2146,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2164,12 +2164,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(Function, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2203,7 +2203,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2221,12 +2221,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(get, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2260,7 +2260,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2278,12 +2278,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(hide, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2318,7 +2318,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2341,7 +2341,7 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleParenthesizedCondition(()
           beginThenStatement(+)
@@ -2351,7 +2351,7 @@
             handleNoArguments(+)
             handleSend(, +)
             beginBinaryExpression(+)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(+)
             handleExpressionStatement(;)
           endThenStatement(;)
@@ -2387,7 +2387,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2405,12 +2405,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(implements, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2444,7 +2444,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2462,12 +2462,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(import, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2502,7 +2502,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2521,12 +2521,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(in, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2560,7 +2560,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2578,12 +2578,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(inout, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2617,7 +2617,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2635,12 +2635,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(interface, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2675,7 +2675,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2704,11 +2704,11 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleParenthesizedExpression(()
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(3, {, })
@@ -2742,7 +2742,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2760,12 +2760,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(late, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2799,7 +2799,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2817,12 +2817,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(library, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2856,7 +2856,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2874,12 +2874,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(mixin, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2913,7 +2913,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2931,12 +2931,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(native, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -2971,7 +2971,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -2994,12 +2994,12 @@
               handleNoArguments(-)
               handleSend(x, -)
               beginBinaryExpression(-)
-              handleLiteralInt(1)
+                handleLiteralInt(1)
               endBinaryExpression(-)
             endArguments(1, (, ))
           endNewExpression(new)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3034,7 +3034,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3052,12 +3052,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend((, ))
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3091,7 +3091,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3109,12 +3109,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(of, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3148,7 +3148,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3166,12 +3166,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(on, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3205,7 +3205,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3223,12 +3223,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(operator, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3262,7 +3262,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3280,12 +3280,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(out, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3319,7 +3319,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3337,12 +3337,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(part, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3376,7 +3376,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3394,12 +3394,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(patch, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3433,7 +3433,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3451,12 +3451,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(required, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3491,7 +3491,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3510,12 +3510,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(rethrow, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3550,7 +3550,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3566,11 +3566,11 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleParenthesizedExpression(()
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3604,7 +3604,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3622,12 +3622,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(set, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3661,7 +3661,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3679,12 +3679,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(show, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3718,7 +3718,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3736,12 +3736,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(source, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3775,7 +3775,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3793,12 +3793,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(static, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3833,7 +3833,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3851,12 +3851,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(super, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -3891,7 +3891,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3914,7 +3914,7 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleParenthesizedCondition(()
           handleRecoverableError(Message[ExpectedClassOrMixinBody, A switch statement must have a body, even if it is empty., Try adding an empty body., {string: switch statement}], ), ))
@@ -3927,7 +3927,7 @@
         handleNoArguments(+)
         handleSend(, +)
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(4, {, })
@@ -3961,7 +3961,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -3979,12 +3979,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(sync, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -4019,7 +4019,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4037,12 +4037,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(this, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -4077,7 +4077,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4092,11 +4092,11 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleParenthesizedExpression(()
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
           handleThrowExpression(throw, ;)
         endReturnStatement(true, return, ;)
@@ -4132,7 +4132,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4150,12 +4150,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend((, ))
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -4190,7 +4190,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4218,11 +4218,11 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleParenthesizedExpression(()
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(4, {, })
@@ -4256,7 +4256,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4274,12 +4274,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(typedef, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -4314,7 +4314,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4347,7 +4347,7 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
@@ -4365,7 +4365,7 @@
         handleNoArguments(+)
         handleSend(, +)
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
@@ -4400,7 +4400,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4433,7 +4433,7 @@
         handleNoArguments(-)
         handleSend(x, -)
         beginBinaryExpression(-)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(-)
         handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
         handleExpressionStatement(;)
@@ -4451,7 +4451,7 @@
         handleNoArguments(+)
         handleSend(, +)
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
@@ -4486,7 +4486,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4509,7 +4509,7 @@
           handleNoArguments(-)
           handleSend(x, -)
           beginBinaryExpression(-)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(-)
           handleParenthesizedCondition(()
           beginWhileStatementBody(+)
@@ -4519,7 +4519,7 @@
             handleNoArguments(+)
             handleSend(, +)
             beginBinaryExpression(+)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(+)
             handleExpressionStatement(;)
           endWhileStatementBody(})
@@ -4556,7 +4556,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4575,12 +4575,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(with, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
@@ -4614,7 +4614,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -4632,12 +4632,12 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(yield, +)
           beginBinaryExpression(+)
-          handleLiteralInt(1)
+            handleLiteralInt(1)
           endBinaryExpression(+)
         endReturnStatement(true, return, ;)
       endBlockFunctionBody(2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
index 5a39839..22a636f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
@@ -467,1720 +467,1858 @@
 beginCompilationUnit(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
-  beginFunctionTypeAlias(typedef)
-    handleVoidKeyword(void)
-    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
-    handleIdentifier(abstract, typedefDeclaration)
-    handleNoTypeVariables(()
-    beginFormalParameters((, MemberKind.FunctionTypeAlias)
-    endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-  endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
-  handleIdentifier(abstract, typedefDeclaration)
-  handleNoTypeVariables(=)
-  beginFunctionType(void)
-    handleNoTypeVariables(()
-    handleVoidKeyword(void)
-    beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-    endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-  endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
-handleIdentifier(as, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
-handleIdentifier(as, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-handleIdentifier(assert, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
-handleIdentifier(assert, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(async, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(async, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(await, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(await, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-handleIdentifier(break, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
-handleIdentifier(break, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-handleIdentifier(case, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
-handleIdentifier(case, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-handleIdentifier(catch, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
-handleIdentifier(catch, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-handleIdentifier(class, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
-handleIdentifier(class, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-handleIdentifier(const, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
-handleIdentifier(const, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-handleIdentifier(continue, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
-handleIdentifier(continue, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
-handleIdentifier(covariant, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
-handleIdentifier(covariant, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-handleIdentifier(default, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
-handleIdentifier(default, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
-handleIdentifier(deferred, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
-handleIdentifier(deferred, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-handleIdentifier(do, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
-handleIdentifier(do, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
-handleIdentifier(dynamic, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
-handleIdentifier(dynamic, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-handleIdentifier(else, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
-handleIdentifier(else, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-handleIdentifier(enum, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
-handleIdentifier(enum, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
-handleIdentifier(export, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
-handleIdentifier(export, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-handleIdentifier(extends, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
-handleIdentifier(extends, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
-handleIdentifier(extension, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
-handleIdentifier(extension, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
-handleIdentifier(external, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
-handleIdentifier(external, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
-handleIdentifier(factory, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
-handleIdentifier(factory, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-handleIdentifier(false, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
-handleIdentifier(false, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-handleIdentifier(final, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
-handleIdentifier(final, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-handleIdentifier(finally, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
-handleIdentifier(finally, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-handleIdentifier(for, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
-handleIdentifier(for, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
-handleIdentifier(Function, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
-handleIdentifier(Function, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
-handleIdentifier(get, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
-handleIdentifier(get, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(hide, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(hide, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-handleIdentifier(if, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
-handleIdentifier(if, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
-handleIdentifier(implements, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
-handleIdentifier(implements, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
-handleIdentifier(import, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
-handleIdentifier(import, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-handleIdentifier(in, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
-handleIdentifier(in, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(inout, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(inout, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
-handleIdentifier(interface, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
-handleIdentifier(interface, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-handleIdentifier(is, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
-handleIdentifier(is, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
-handleIdentifier(late, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
-handleIdentifier(late, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
-handleIdentifier(library, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
-handleIdentifier(library, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
-handleIdentifier(mixin, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
-handleIdentifier(mixin, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(native, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(native, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-handleIdentifier(new, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
-handleIdentifier(new, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-handleIdentifier(null, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
-handleIdentifier(null, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(of, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(of, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(on, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(on, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
-handleIdentifier(operator, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
-handleIdentifier(operator, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(out, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(out, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
-handleIdentifier(part, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
-handleIdentifier(part, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(patch, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(patch, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
-handleIdentifier(required, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
-handleIdentifier(required, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-handleIdentifier(rethrow, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
-handleIdentifier(rethrow, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-handleIdentifier(return, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
-handleIdentifier(return, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
-handleIdentifier(set, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
-handleIdentifier(set, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(show, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(show, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(source, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(source, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
-handleIdentifier(static, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
-handleIdentifier(static, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-handleIdentifier(super, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
-handleIdentifier(super, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-handleIdentifier(switch, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
-handleIdentifier(switch, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(sync, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(sync, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-handleIdentifier(this, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
-handleIdentifier(this, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-handleIdentifier(throw, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
-handleIdentifier(throw, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-handleIdentifier(true, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
-handleIdentifier(true, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-handleIdentifier(try, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
-handleIdentifier(try, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
-handleIdentifier(typedef, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
-handleIdentifier(typedef, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-handleIdentifier(var, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
-handleIdentifier(var, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
-handleIdentifier(void, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
-handleIdentifier(, typedefDeclaration)
-handleNoTypeVariables(=)
-handleRecoverableError(MissingTypedefParameters, =, =)
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(=)
-beginMetadataStar(=)
-endMetadataStar(0)
-beginTopLevelMember(=)
-handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
-handleInvalidTopLevelDeclaration(=)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginTopLevelMethod(=, null)
-handleVoidKeyword(void)
-handleIdentifier(Function, topLevelFunctionDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.TopLevelMethod)
-endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-handleAsyncModifier(null, null)
-handleRecoverableError(ExpectedBody, ;, ;)
-handleEmptyFunctionBody(;)
-endTopLevelMethod(void, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-handleIdentifier(while, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
-handleIdentifier(while, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-handleIdentifier(with, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-handleIdentifier(with, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleVoidKeyword(void)
-handleIdentifier(yield, typedefDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.FunctionTypeAlias)
-endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-endFunctionTypeAlias(typedef, null, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(yield, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration()
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
+      handleIdentifier(abstract, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
+      handleIdentifier(abstract, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
+      handleIdentifier(as, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
+      handleIdentifier(as, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+      handleIdentifier(assert, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
+      handleIdentifier(assert, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(async, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(async, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(await, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(await, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+      handleIdentifier(break, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
+      handleIdentifier(break, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+      handleIdentifier(case, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
+      handleIdentifier(case, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+      handleIdentifier(catch, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
+      handleIdentifier(catch, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+      handleIdentifier(class, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
+      handleIdentifier(class, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+      handleIdentifier(const, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
+      handleIdentifier(const, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+      handleIdentifier(continue, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
+      handleIdentifier(continue, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
+      handleIdentifier(covariant, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
+      handleIdentifier(covariant, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+      handleIdentifier(default, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
+      handleIdentifier(default, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
+      handleIdentifier(deferred, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
+      handleIdentifier(deferred, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+      handleIdentifier(do, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
+      handleIdentifier(do, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
+      handleIdentifier(dynamic, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
+      handleIdentifier(dynamic, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+      handleIdentifier(else, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
+      handleIdentifier(else, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+      handleIdentifier(enum, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
+      handleIdentifier(enum, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
+      handleIdentifier(export, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
+      handleIdentifier(export, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+      handleIdentifier(extends, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
+      handleIdentifier(extends, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
+      handleIdentifier(extension, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
+      handleIdentifier(extension, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
+      handleIdentifier(external, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
+      handleIdentifier(external, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
+      handleIdentifier(factory, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
+      handleIdentifier(factory, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+      handleIdentifier(false, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
+      handleIdentifier(false, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+      handleIdentifier(final, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
+      handleIdentifier(final, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+      handleIdentifier(finally, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
+      handleIdentifier(finally, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+      handleIdentifier(for, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
+      handleIdentifier(for, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
+      handleIdentifier(Function, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
+      handleIdentifier(Function, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
+      handleIdentifier(get, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
+      handleIdentifier(get, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(hide, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(hide, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+      handleIdentifier(if, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
+      handleIdentifier(if, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
+      handleIdentifier(implements, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
+      handleIdentifier(implements, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
+      handleIdentifier(import, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
+      handleIdentifier(import, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+      handleIdentifier(in, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
+      handleIdentifier(in, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(inout, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(inout, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
+      handleIdentifier(interface, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
+      handleIdentifier(interface, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+      handleIdentifier(is, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
+      handleIdentifier(is, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
+      handleIdentifier(late, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
+      handleIdentifier(late, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
+      handleIdentifier(library, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
+      handleIdentifier(library, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
+      handleIdentifier(mixin, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
+      handleIdentifier(mixin, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(native, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(native, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+      handleIdentifier(new, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
+      handleIdentifier(new, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+      handleIdentifier(null, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
+      handleIdentifier(null, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(of, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(of, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(on, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(on, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
+      handleIdentifier(operator, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
+      handleIdentifier(operator, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(out, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(out, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
+      handleIdentifier(part, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
+      handleIdentifier(part, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(patch, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(patch, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
+      handleIdentifier(required, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
+      handleIdentifier(required, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+      handleIdentifier(rethrow, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
+      handleIdentifier(rethrow, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+      handleIdentifier(return, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
+      handleIdentifier(return, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
+      handleIdentifier(set, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
+      handleIdentifier(set, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(show, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(show, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(source, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(source, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
+      handleIdentifier(static, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
+      handleIdentifier(static, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+      handleIdentifier(super, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
+      handleIdentifier(super, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+      handleIdentifier(switch, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
+      handleIdentifier(switch, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(sync, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(sync, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+      handleIdentifier(this, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
+      handleIdentifier(this, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+      handleIdentifier(throw, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
+      handleIdentifier(throw, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+      handleIdentifier(true, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
+      handleIdentifier(true, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+      handleIdentifier(try, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
+      handleIdentifier(try, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
+      handleIdentifier(typedef, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
+      handleIdentifier(typedef, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+      handleIdentifier(var, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
+      handleIdentifier(var, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
+      handleIdentifier(void, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
+      handleIdentifier(, typedefDeclaration)
+      handleNoTypeVariables(=)
+      handleRecoverableError(MissingTypedefParameters, =, =)
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(=)
+  beginMetadataStar(=)
+  endMetadataStar(0)
+  beginTopLevelMember(=)
+    handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
+    handleInvalidTopLevelDeclaration(=)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(=, null)
+      handleVoidKeyword(void)
+      handleIdentifier(Function, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(ExpectedBody, ;, ;)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(void, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+      handleIdentifier(while, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
+      handleIdentifier(while, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleVoidKeyword(void)
+      handleIdentifier(yield, typedefDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.FunctionTypeAlias)
+      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
+    endFunctionTypeAlias(typedef, null, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(yield, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(140, )
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 80fc687..6802b71 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
@@ -9,6 +9,7 @@
     parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -30,6 +31,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
@@ -54,6 +56,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -75,6 +78,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
@@ -99,6 +103,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -120,6 +125,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
@@ -144,6 +150,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -163,6 +170,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(async, typedefDeclaration)
@@ -185,6 +193,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -204,6 +213,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(await, typedefDeclaration)
@@ -226,6 +236,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -247,6 +258,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
@@ -271,6 +283,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -292,6 +305,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
@@ -316,6 +330,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -337,6 +352,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
@@ -361,6 +377,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -382,6 +399,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
@@ -406,6 +424,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -427,6 +446,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
@@ -451,6 +471,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -472,6 +493,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
@@ -496,6 +518,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -517,6 +540,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
@@ -541,6 +565,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -562,6 +587,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
@@ -586,6 +612,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -607,6 +634,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
@@ -631,6 +659,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -652,6 +681,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
@@ -676,6 +706,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -697,6 +728,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
@@ -721,6 +753,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -742,6 +775,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
@@ -766,6 +800,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -787,6 +822,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
@@ -811,6 +847,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -832,6 +869,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
@@ -856,6 +894,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -877,6 +916,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
@@ -901,6 +941,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -922,6 +963,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
@@ -946,6 +988,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -967,6 +1010,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
@@ -991,6 +1035,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1012,6 +1057,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
@@ -1036,6 +1082,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1057,6 +1104,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
@@ -1081,6 +1129,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1102,6 +1151,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
@@ -1126,6 +1176,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1147,6 +1198,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
@@ -1171,6 +1223,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1192,6 +1245,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
@@ -1216,6 +1270,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1237,6 +1292,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(Function, Instance of 'Template<(Token) => Message>')
@@ -1261,6 +1317,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1282,6 +1339,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
@@ -1306,6 +1364,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1325,6 +1384,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(hide, typedefDeclaration)
@@ -1347,6 +1407,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1368,6 +1429,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
@@ -1392,6 +1454,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1413,6 +1476,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
@@ -1437,6 +1501,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1458,6 +1523,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
@@ -1482,6 +1548,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1503,6 +1570,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
@@ -1527,6 +1595,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1546,6 +1615,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(inout, typedefDeclaration)
@@ -1568,6 +1638,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1589,6 +1660,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
@@ -1613,6 +1685,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1634,6 +1707,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
@@ -1658,6 +1732,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1679,6 +1754,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
@@ -1703,6 +1779,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1724,6 +1801,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
@@ -1748,6 +1826,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1769,6 +1848,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
@@ -1793,6 +1873,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1812,6 +1893,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(native, typedefDeclaration)
@@ -1834,6 +1916,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1855,6 +1938,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
@@ -1879,6 +1963,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1900,6 +1985,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
@@ -1924,6 +2010,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1943,6 +2030,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(of, typedefDeclaration)
@@ -1965,6 +2053,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -1984,6 +2073,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(on, typedefDeclaration)
@@ -2006,6 +2096,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2027,6 +2118,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
@@ -2051,6 +2143,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2070,6 +2163,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(out, typedefDeclaration)
@@ -2092,6 +2186,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2113,6 +2208,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
@@ -2137,6 +2233,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2156,6 +2253,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(patch, typedefDeclaration)
@@ -2178,6 +2276,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2199,6 +2298,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
@@ -2223,6 +2323,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2244,6 +2345,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
@@ -2268,6 +2370,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2289,6 +2392,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
@@ -2313,6 +2417,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2334,6 +2439,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
@@ -2358,6 +2464,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2377,6 +2484,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(show, typedefDeclaration)
@@ -2399,6 +2507,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2418,6 +2527,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(source, typedefDeclaration)
@@ -2440,6 +2550,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2461,6 +2572,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
@@ -2485,6 +2597,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2506,6 +2619,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
@@ -2530,6 +2644,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2551,6 +2666,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
@@ -2575,6 +2691,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2594,6 +2711,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(sync, typedefDeclaration)
@@ -2616,6 +2734,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2637,6 +2756,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
@@ -2661,6 +2781,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2682,6 +2803,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
@@ -2706,6 +2828,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2727,6 +2850,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
@@ -2751,6 +2875,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2772,6 +2897,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
@@ -2796,6 +2922,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2817,6 +2944,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
@@ -2841,6 +2969,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2862,6 +2991,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
@@ -2886,6 +3016,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2907,6 +3038,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, false)
@@ -2974,6 +3106,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -2995,6 +3128,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
@@ -3019,6 +3153,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -3040,6 +3175,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
@@ -3064,6 +3200,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
@@ -3083,6 +3220,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(yield, typedefDeclaration)
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 18cdecd..24b5d80 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
@@ -58,89 +58,91 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(with)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, fieldDeclaration)
-          beginFieldInitializer(=)
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+            handleIdentifier(with, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(7)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, get, with)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+            handleIdentifier(with, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
             handleLiteralInt(7)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, get, with)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(get)
-          handleType(int, null)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, methodDeclaration)
-          handleNoTypeVariables(=>)
-          handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          handleLiteralInt(7)
-          handleExpressionFunctionBody(=>, ;)
-        endClassMethod(get, int, =>, null, ;)
-      endMember()
-      beginMetadataStar(void)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, set, with)
-          handleVoidKeyword(void)
-          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-          handleIdentifier(with, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-        endClassMethod(set, void, (, null, })
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 4, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  beginTopLevelMethod(}, null)
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(with)
-    handleType(int, null)
-    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-    handleIdentifier(with, topLevelFunctionDeclaration)
-    handleNoTypeVariables(()
-    beginFormalParameters((, MemberKind.TopLevelMethod)
-    endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-    handleAsyncModifier(null, null)
-    handleLiteralInt(7)
-    handleExpressionFunctionBody(=>, ;)
-  endTopLevelMethod(int, null, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(with)
-  handleType(int, null)
-  handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
-  handleIdentifier(with, topLevelVariableDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(7)
-  endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration()
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, int, =>, null, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, set, with)
+            handleVoidKeyword(void)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+            handleIdentifier(with, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, void, (, null, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(with)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralInt(7)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(int, null, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(with)
+      handleType(int, null)
+      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
+      handleIdentifier(with, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(7)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(3, )
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 5086644..4ff4bb0 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
@@ -79,6 +79,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, C, true)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -238,6 +239,7 @@
       isReservedKeyword(with)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
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 efaa895..305c185 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
@@ -31,84 +31,86 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(With)
-          handleType(int, null)
-          handleIdentifier(With, fieldDeclaration)
-          beginFieldInitializer(=)
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(With)
+            handleType(int, null)
+            handleIdentifier(With, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(7)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, get, With)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(With, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
             handleLiteralInt(7)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, get, With)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(get)
-          handleType(int, null)
-          handleIdentifier(With, methodDeclaration)
-          handleNoTypeVariables(=>)
-          handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          handleLiteralInt(7)
-          handleExpressionFunctionBody(=>, ;)
-        endClassMethod(get, int, =>, null, ;)
-      endMember()
-      beginMetadataStar(void)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, set, With)
-          handleVoidKeyword(void)
-          handleIdentifier(With, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(int)
-            endMetadataStar(0)
-            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(int, typeReference)
-              handleNoTypeArguments(x)
-              handleType(int, null)
-              handleIdentifier(x, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-        endClassMethod(set, void, (, null, })
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 4, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  beginTopLevelMethod(}, null)
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(With)
-    handleType(int, null)
-    handleIdentifier(With, topLevelFunctionDeclaration)
-    handleNoTypeVariables(()
-    beginFormalParameters((, MemberKind.TopLevelMethod)
-    endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-    handleAsyncModifier(null, null)
-    handleLiteralInt(7)
-    handleExpressionFunctionBody(=>, ;)
-  endTopLevelMethod(int, null, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(With)
-  handleType(int, null)
-  handleIdentifier(With, topLevelVariableDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(7)
-  endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration()
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, int, =>, null, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, set, With)
+            handleVoidKeyword(void)
+            handleIdentifier(With, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, void, (, null, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(With)
+      handleType(int, null)
+      handleIdentifier(With, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralInt(7)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(int, null, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(With)
+      handleType(int, null)
+      handleIdentifier(With, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(7)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(3, )
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 cf0e350..d3b26af 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
@@ -73,6 +73,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.Class, C, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
                 listener: handleType(int, null)
@@ -216,6 +217,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(With)
         listener: handleType(int, null)
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 b8be769..83a76f8 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
@@ -39,41 +39,44 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
-    handleNoType(})
-    handleIdentifier(foo, topLevelVariableDeclaration)
-    handleNoFieldInitializer(class)
-    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
-  endTopLevelFields(null, null, null, null, null, 1, foo, ;)
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-  handleIdentifier(M1, classOrMixinDeclaration)
-  handleNoTypeVariables({)
-  beginClassDeclaration(class, null, M1)
-    handleNoType(M1)
-    handleClassExtends(null, 1)
-    handleClassNoWithClause()
-    handleClassOrMixinImplements(null, 0)
-    handleClassHeader(class, class, null)
-    beginClassOrMixinBody(DeclarationKind.Class, {)
-      beginMetadataStar(foo)
-      endMetadataStar(0)
-      beginMember()
-        handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
-        handleNoType({)
-        handleIdentifier(foo, fieldDeclaration)
-        handleNoFieldInitializer(class)
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
-      endClassFields(null, null, null, null, null, null, 1, foo, ;)
-    endMember()
-    beginMetadataStar(class)
-    endMetadataStar(0)
-    beginMember()
-      handleRecoverableError(ClassInClass, class, class)
-      handleInvalidMember(class)
-    endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+    beginFields(})
+      handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
+      handleNoType(})
+      handleIdentifier(foo, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
+    endTopLevelFields(null, null, null, null, null, 1, foo, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(M1, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, M1)
+      handleNoType(M1)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(foo)
+        endMetadataStar(0)
+        beginMember()
+          beginFields({)
+            handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
+            handleNoType({)
+            handleIdentifier(foo, fieldDeclaration)
+            handleNoFieldInitializer(class)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
+          endClassFields(null, null, null, null, null, null, 1, foo, ;)
+        endMember()
+        beginMetadataStar(class)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(ClassInClass, class, class)
+          handleInvalidMember(class)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(3, )
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 d6a21e4..1696c43 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
@@ -39,6 +39,7 @@
       isReservedKeyword(class)
       indicatesMethodOrField(M1)
       parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(})
         reportRecoverableError(foo, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
         listener: handleNoType(})
@@ -85,6 +86,7 @@
               isReservedKeyword(class)
               indicatesMethodOrField(M2)
               parseFields({, null, null, null, null, null, null, {, Instance of 'NoType', foo, DeclarationKind.Class, M1, false)
+                listener: beginFields({)
                 reportRecoverableError(foo, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
                 listener: handleNoType({)
@@ -109,6 +111,7 @@
                   reportRecoverableError(class, ClassInClass)
                     listener: handleRecoverableError(ClassInClass, class, class)
                   listener: handleInvalidMember(class)
+                  listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
index 5df1db7..7b27d65 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
Binary files differ
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
index 3b6dbdb..28afeda 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
@@ -29,6 +29,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(C)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(/)
         listener: handleIdentifier(C, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(C, null)
@@ -49,6 +50,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(p)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(p, typeReference)
         listener: handleNoTypeArguments(y)
         listener: handleType(p, null)
@@ -69,6 +71,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(r, null)
@@ -89,6 +92,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(g)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(g, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(g, null)
@@ -201,6 +205,7 @@
     parseTopLevelMemberImpl(,)
       listener: beginTopLevelMember(t)
       parseFields(,, null, null, null, null, null, null, ,, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(,)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -221,6 +226,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', D, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(D)
         listener: handleType(e, null)
@@ -241,6 +247,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(a, null)
@@ -261,6 +268,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', p, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(p)
         listener: handleType(t, null)
@@ -281,6 +289,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(r, null)
@@ -301,6 +310,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(j)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(j, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(j, null)
@@ -321,6 +331,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(c, null)
@@ -341,6 +352,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(a, null)
@@ -361,6 +373,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -381,6 +394,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(o, null)
@@ -401,6 +415,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, prefixedTypeReference)
         listener: handleIdentifier(P, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -423,6 +438,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(e, null)
@@ -443,6 +459,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -463,6 +480,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -483,6 +501,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
@@ -503,6 +522,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(h, null)
@@ -523,6 +543,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(A)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(A, null)
@@ -543,6 +564,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', H, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(H)
         listener: handleType(T, null)
@@ -563,6 +585,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(O)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', R, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(O, typeReference)
         listener: handleNoTypeArguments(R)
         listener: handleType(O, null)
@@ -583,6 +606,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(S)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(S, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(S, null)
@@ -603,6 +627,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(i, null)
@@ -624,6 +649,7 @@
       listener: beginTopLevelMember(e)
       isReservedKeyword(/)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         reportRecoverableError(e, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, e, e)
         listener: handleNoType(;)
@@ -664,6 +690,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(f)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(/)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(f, null)
@@ -684,6 +711,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(r, null)
@@ -704,6 +732,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
@@ -724,6 +753,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(a, null)
@@ -790,6 +820,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(A)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(.)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(A, null)
@@ -810,6 +841,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(l, null)
@@ -830,6 +862,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(i, null)
@@ -850,6 +883,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(h, null)
@@ -870,6 +904,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(s, null)
@@ -890,6 +925,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(e, null)
@@ -910,6 +946,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
@@ -930,6 +967,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
@@ -950,6 +988,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(d, prefixedTypeReference)
         listener: handleIdentifier(U, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -972,6 +1011,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(e, null)
@@ -992,6 +1032,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(f, null)
@@ -1012,6 +1053,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(h, null)
@@ -1032,6 +1074,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(s, null)
@@ -1052,6 +1095,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
@@ -1072,6 +1116,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(r, null)
@@ -1092,6 +1137,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(e, null)
@@ -1112,6 +1158,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(o, null)
@@ -1132,6 +1179,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(e, null)
@@ -1152,6 +1200,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(s, null)
@@ -1172,6 +1221,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', v, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(v)
         listener: handleType(o, null)
@@ -1192,6 +1242,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
@@ -1212,6 +1263,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(n, null)
@@ -1232,6 +1284,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(d, null)
@@ -1252,6 +1305,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(y, null)
@@ -1292,6 +1346,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(B)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', S, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(/)
         listener: handleIdentifier(B, typeReference)
         listener: handleNoTypeArguments(S)
         listener: handleType(B, null)
@@ -1313,6 +1368,7 @@
       listener: beginTopLevelMember(D)
       isReservedKeyword(-)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', D, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         reportRecoverableError(D, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, D, D)
         listener: handleNoType(;)
@@ -1343,6 +1399,7 @@
     parseTopLevelMemberImpl(-)
       listener: beginTopLevelMember(s)
       parseFields(-, null, null, null, null, null, null, -, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(-)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(s, null)
@@ -1363,6 +1420,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(y, null)
@@ -1383,6 +1441,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(e, null)
@@ -1403,6 +1462,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(i, null)
@@ -1423,6 +1483,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(e, null)
@@ -1443,6 +1504,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -1463,6 +1525,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -1483,6 +1546,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(a, null)
@@ -1503,6 +1567,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(c, null)
@@ -1523,6 +1588,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(n, null)
@@ -1543,6 +1609,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(e, null)
@@ -1563,6 +1630,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
@@ -1583,6 +1651,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(n, null)
@@ -1603,6 +1672,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(i, null)
@@ -1623,6 +1693,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -1643,6 +1714,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', L, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(L)
         listener: handleType(e, null)
@@ -1663,6 +1735,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(I)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', C, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(I, typeReference)
         listener: handleNoTypeArguments(C)
         listener: handleType(I, null)
@@ -1683,6 +1756,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(E)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', N, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(E, typeReference)
         listener: handleNoTypeArguments(N)
         listener: handleType(E, null)
@@ -1749,6 +1823,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(.)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(m, null)
@@ -1769,6 +1844,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
@@ -1855,6 +1931,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(T)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(/)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(T, null)
@@ -1875,6 +1952,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
@@ -1895,6 +1973,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
@@ -1915,6 +1994,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(l, null)
@@ -1935,6 +2015,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
@@ -1955,6 +2036,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(s, null)
@@ -1975,6 +2057,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
@@ -1995,6 +2078,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(d, null)
@@ -2015,6 +2099,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(s, null)
@@ -2035,6 +2120,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', F, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(F)
         listener: handleType(T, null)
@@ -2131,6 +2217,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(.)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(m, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
index 92e6161..4013553 100644
--- a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
@@ -31,7 +31,7 @@
         handleLiteralInt(7)
       endArguments(1, (, ))
       handleSend(value, ;)
-      endBinaryExpression(.)
+      handleEndingBinaryExpression(.)
       handleExpressionFunctionBody(=>, ;)
     endTopLevelMethod(Future, null, ;)
   endTopLevelDeclaration(List)
diff --git a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
index 17191fa..d4b22ff 100644
--- a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
@@ -62,7 +62,7 @@
                                       listener: handleLiteralInt(7)
                             listener: endArguments(1, (, ))
                       listener: handleSend(value, ;)
-                listener: endBinaryExpression(.)
+                listener: handleEndingBinaryExpression(.)
             ensureSemicolon())
             listener: handleExpressionFunctionBody(=>, ;)
             inGenerator()
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
index aa10717..5bdec1e 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
@@ -57,72 +57,74 @@
   beginMetadataStar(y)
   endMetadataStar(0)
   beginTopLevelMember(y)
-    handleRecoverableError(MissingConstFinalVarOrType, y, y)
-    handleNoType(.)
-    handleIdentifier(y, topLevelVariableDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endTopLevelFields(null, null, null, null, null, 1, y, ;)
-endTopLevelDeclaration(x)
-beginMetadataStar(x)
-endMetadataStar(0)
-beginTopLevelMember(x)
-  beginTopLevelMethod(;, null)
-    handleNoType(;)
-    handleIdentifier(x, topLevelFunctionDeclaration)
-    handleNoTypeVariables(.)
-    handleRecoverableError(MissingFunctionParameters, x, x)
-    beginFormalParameters((, MemberKind.TopLevelMethod)
-    endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-    handleAsyncModifier(null, null)
-    handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {token: .}], ., .)
-    handleInvalidFunctionBody({)
-  endTopLevelMethod(x, null, })
-endTopLevelDeclaration(.)
-beginMetadataStar(.)
-endMetadataStar(0)
-beginTopLevelMember(.)
-  handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '.'., null, {token: .}], ., .)
-  handleInvalidTopLevelDeclaration(.)
-endTopLevelDeclaration(z)
-beginMetadataStar(z)
-endMetadataStar(0)
-beginTopLevelMember(z)
-  handleRecoverableError(MissingConstFinalVarOrType, z, z)
-  handleNoType(.)
-  handleIdentifier(z, topLevelVariableDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralBool(true)
-  endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, z, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginTopLevelMethod(;, null)
-  handleVoidKeyword(void)
-  handleIdentifier(foo, topLevelFunctionDeclaration)
-  handleNoTypeVariables(()
-  beginFormalParameters((, MemberKind.TopLevelMethod)
-  endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-  handleAsyncModifier(null, null)
-  beginBlockFunctionBody({)
-    beginIfStatement(if)
-      handleIdentifier(x, expression)
-      handleNoTypeArguments(!=)
-      handleNoArguments(!=)
-      handleSend(x, !=)
-      beginBinaryExpression(!=)
-      handleLiteralNull(null)
-      endBinaryExpression(!=)
-      handleParenthesizedCondition(()
-      beginThenStatement({)
-        beginBlock({, BlockKind(statement))
-        endBlock(0, {, }, BlockKind(statement))
-      endThenStatement(})
-    endIfStatement(if, null)
-  endBlockFunctionBody(1, {, })
-endTopLevelMethod(void, null, })
-endTopLevelDeclaration()
+    beginFields(.)
+      handleRecoverableError(MissingConstFinalVarOrType, y, y)
+      handleNoType(.)
+      handleIdentifier(y, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, y, ;)
+  endTopLevelDeclaration(x)
+  beginMetadataStar(x)
+  endMetadataStar(0)
+  beginTopLevelMember(x)
+    beginTopLevelMethod(;, null)
+      handleNoType(;)
+      handleIdentifier(x, topLevelFunctionDeclaration)
+      handleNoTypeVariables(.)
+      handleRecoverableError(MissingFunctionParameters, x, x)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {token: .}], ., .)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(x, null, })
+  endTopLevelDeclaration(.)
+  beginMetadataStar(.)
+  endMetadataStar(0)
+  beginTopLevelMember(.)
+    handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '.'., null, {token: .}], ., .)
+    handleInvalidTopLevelDeclaration(.)
+  endTopLevelDeclaration(z)
+  beginMetadataStar(z)
+  endMetadataStar(0)
+  beginTopLevelMember(z)
+    beginFields(.)
+      handleRecoverableError(MissingConstFinalVarOrType, z, z)
+      handleNoType(.)
+      handleIdentifier(z, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralBool(true)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, z, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null)
+      handleVoidKeyword(void)
+      handleIdentifier(foo, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(!=)
+          handleNoArguments(!=)
+          handleSend(x, !=)
+          beginBinaryExpression(!=)
+            handleLiteralNull(null)
+          endBinaryExpression(!=)
+          handleParenthesizedCondition(()
+          beginThenStatement({)
+            beginBlock({, BlockKind(statement))
+            endBlock(0, {, }, BlockKind(statement))
+          endThenStatement(})
+        endIfStatement(if, null)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
 endCompilationUnit(7, )
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
index 10197c8..ef23755 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
@@ -55,6 +55,7 @@
       listener: beginTopLevelMember(y)
       isReservedKeyword(=)
       parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(.)
         reportRecoverableError(y, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, y, y)
         listener: handleNoType(.)
@@ -124,6 +125,7 @@
       listener: beginTopLevelMember(z)
       isReservedKeyword(=)
       parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', z, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(.)
         reportRecoverableError(z, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, z, z)
         listener: handleNoType(.)
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 b92e229..6dc22ff 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
@@ -14,244 +14,264 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(abstract)
-          handleType(int, null)
-          handleIdentifier(abstract, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(as)
-        handleType(int, null)
-        handleIdentifier(as, fieldDeclaration)
-        beginFieldInitializer(=)
-          handleLiteralInt(42)
-        endFieldInitializer(=, ;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(int)
-    endMetadataStar(0)
-    beginMember()
-      handleIdentifier(int, typeReference)
-      handleNoTypeArguments(covariant)
-      handleType(int, null)
-      handleIdentifier(covariant, fieldDeclaration)
-      beginFieldInitializer(=)
-        handleLiteralInt(42)
-      endFieldInitializer(=, ;)
-    endClassFields(null, null, null, null, null, null, 1, int, ;)
-  endMember()
-  beginMetadataStar(int)
-  endMetadataStar(0)
-  beginMember()
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(deferred)
-    handleType(int, null)
-    handleIdentifier(deferred, fieldDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(dynamic)
-  handleType(int, null)
-  handleIdentifier(dynamic, fieldDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(42)
-  endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(export)
-handleType(int, null)
-handleIdentifier(export, fieldDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(external)
-handleType(int, null)
-handleIdentifier(external, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(factory)
-handleType(int, null)
-handleIdentifier(factory, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(Function)
-handleType(int, null)
-handleIdentifier(Function, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(get)
-handleType(int, null)
-handleIdentifier(get, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(implements)
-handleType(int, null)
-handleIdentifier(implements, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(import)
-handleType(int, null)
-handleIdentifier(import, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(interface)
-handleType(int, null)
-handleIdentifier(interface, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(library)
-handleType(int, null)
-handleIdentifier(library, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(operator)
-handleType(int, null)
-handleIdentifier(operator, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(mixin)
-handleType(int, null)
-handleIdentifier(mixin, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(part)
-handleType(int, null)
-handleIdentifier(part, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(set)
-handleType(int, null)
-handleIdentifier(set, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(static)
-handleType(int, null)
-handleIdentifier(static, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-beginMetadataStar(int)
-endMetadataStar(0)
-beginMember()
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(typedef)
-handleType(int, null)
-handleIdentifier(typedef, fieldDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, null, null, null, 1, int, ;)
-endMember()
-endClassOrMixinBody(DeclarationKind.Class, 20, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 20, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 768939b..de178ad 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -56,6 +57,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -79,6 +81,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -102,6 +105,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -125,6 +129,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -148,6 +153,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -171,6 +177,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -194,6 +201,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -217,6 +225,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -241,6 +250,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -264,6 +274,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -287,6 +298,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -310,6 +322,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -333,6 +346,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -357,6 +371,7 @@
               listener: beginMember()
               isUnaryMinus(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -380,6 +395,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -403,6 +419,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -427,6 +444,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -450,6 +468,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -473,6 +492,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
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 fcefd36..64f045a 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
@@ -40,7 +40,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -58,7 +58,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(abstract, ;)
@@ -95,7 +95,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -113,7 +113,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(as, ;)
@@ -150,7 +150,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -168,7 +168,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(covariant, ;)
@@ -205,7 +205,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -223,7 +223,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(deferred, ;)
@@ -260,7 +260,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -278,7 +278,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(dynamic, ;)
@@ -315,7 +315,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -333,7 +333,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(export, ;)
@@ -370,7 +370,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -388,7 +388,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(external, ;)
@@ -425,7 +425,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -443,7 +443,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(factory, ;)
@@ -480,7 +480,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -498,7 +498,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(Function, ;)
@@ -535,7 +535,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -553,7 +553,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(get, ;)
@@ -590,7 +590,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -608,7 +608,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(implements, ;)
@@ -645,7 +645,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -663,7 +663,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(import, ;)
@@ -700,7 +700,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -718,7 +718,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(interface, ;)
@@ -755,7 +755,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -773,7 +773,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(library, ;)
@@ -810,7 +810,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -828,7 +828,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(operator, ;)
@@ -865,7 +865,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -883,7 +883,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(mixin, ;)
@@ -920,7 +920,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -938,7 +938,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(part, ;)
@@ -975,7 +975,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -993,7 +993,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(set, ;)
@@ -1030,7 +1030,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1048,7 +1048,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(static, ;)
@@ -1085,7 +1085,7 @@
                 handleNoArguments(==)
                 handleSend(x, ==)
                 beginBinaryExpression(==)
-                handleLiteralInt(0)
+                  handleLiteralInt(0)
                 endBinaryExpression(==)
                 handleParenthesizedCondition(()
                 beginThenStatement(return)
@@ -1103,7 +1103,7 @@
                   handleNoArguments(-)
                   handleSend(x, -)
                   beginBinaryExpression(-)
-                  handleLiteralInt(1)
+                    handleLiteralInt(1)
                   endBinaryExpression(-)
                 endArguments(1, (, ))
                 handleSend(typedef, ;)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
index 5276e05..ede19ca 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
@@ -2,241 +2,261 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    handleIdentifier(int, typeReference)
-    handleNoTypeArguments(abstract)
-    handleType(int, null)
-    handleIdentifier(abstract, topLevelVariableDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(42)
-    endFieldInitializer(=, ;)
-  endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-  handleIdentifier(int, typeReference)
-  handleNoTypeArguments(as)
-  handleType(int, null)
-  handleIdentifier(as, topLevelVariableDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(42)
-  endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(covariant)
-handleType(int, null)
-handleIdentifier(covariant, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(deferred)
-handleType(int, null)
-handleIdentifier(deferred, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(dynamic)
-handleType(int, null)
-handleIdentifier(dynamic, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(export)
-handleType(int, null)
-handleIdentifier(export, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(external)
-handleType(int, null)
-handleIdentifier(external, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(factory)
-handleType(int, null)
-handleIdentifier(factory, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(Function)
-handleType(int, null)
-handleIdentifier(Function, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(get)
-handleType(int, null)
-handleIdentifier(get, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(implements)
-handleType(int, null)
-handleIdentifier(implements, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(import)
-handleType(int, null)
-handleIdentifier(import, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(interface)
-handleType(int, null)
-handleIdentifier(interface, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(library)
-handleType(int, null)
-handleIdentifier(library, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(operator)
-handleType(int, null)
-handleIdentifier(operator, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(mixin)
-handleType(int, null)
-handleIdentifier(mixin, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(part)
-handleType(int, null)
-handleIdentifier(part, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(set)
-handleType(int, null)
-handleIdentifier(set, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(static)
-handleType(int, null)
-handleIdentifier(static, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration(int)
-beginMetadataStar(int)
-endMetadataStar(0)
-beginTopLevelMember(int)
-handleIdentifier(int, typeReference)
-handleNoTypeArguments(typedef)
-handleType(int, null)
-handleIdentifier(typedef, topLevelVariableDeclaration)
-beginFieldInitializer(=)
-handleLiteralInt(42)
-endFieldInitializer(=, ;)
-endTopLevelFields(null, null, null, null, null, 1, int, ;)
-endTopLevelDeclaration()
+    beginFields()
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(abstract)
+      handleType(int, null)
+      handleIdentifier(abstract, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(as)
+      handleType(int, null)
+      handleIdentifier(as, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(covariant)
+      handleType(int, null)
+      handleIdentifier(covariant, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(deferred)
+      handleType(int, null)
+      handleIdentifier(deferred, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(dynamic)
+      handleType(int, null)
+      handleIdentifier(dynamic, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(export)
+      handleType(int, null)
+      handleIdentifier(export, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(external)
+      handleType(int, null)
+      handleIdentifier(external, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(factory)
+      handleType(int, null)
+      handleIdentifier(factory, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(Function)
+      handleType(int, null)
+      handleIdentifier(Function, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(get, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(int, null)
+      handleIdentifier(implements, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(import)
+      handleType(int, null)
+      handleIdentifier(import, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(interface)
+      handleType(int, null)
+      handleIdentifier(interface, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(library)
+      handleType(int, null)
+      handleIdentifier(library, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(operator)
+      handleType(int, null)
+      handleIdentifier(operator, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(mixin)
+      handleType(int, null)
+      handleIdentifier(mixin, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(part)
+      handleType(int, null)
+      handleIdentifier(part, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(set)
+      handleType(int, null)
+      handleIdentifier(set, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(static)
+      handleType(int, null)
+      handleIdentifier(static, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginFields(;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(typedef)
+      handleType(int, null)
+      handleIdentifier(typedef, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(42)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, int, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(20, )
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
index bc882c3..21b408a 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
@@ -9,6 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
+        listener: beginFields()
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -32,6 +33,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -55,6 +57,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -78,6 +81,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -101,6 +105,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -124,6 +129,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -147,6 +153,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -170,6 +177,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -193,6 +201,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -216,6 +225,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -239,6 +249,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -262,6 +273,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -285,6 +297,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -308,6 +321,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -331,6 +345,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -354,6 +369,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -377,6 +393,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -400,6 +417,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -423,6 +441,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -446,6 +465,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
index e32cd8e..024c844 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
@@ -27,7 +27,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -45,7 +45,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(abstract, ;)
@@ -81,7 +81,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -99,7 +99,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(as, ;)
@@ -135,7 +135,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -153,7 +153,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(covariant, ;)
@@ -189,7 +189,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -207,7 +207,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(deferred, ;)
@@ -243,7 +243,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -261,7 +261,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(dynamic, ;)
@@ -297,7 +297,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -315,7 +315,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(export, ;)
@@ -351,7 +351,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -369,7 +369,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(external, ;)
@@ -405,7 +405,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -423,7 +423,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(factory, ;)
@@ -459,7 +459,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -477,7 +477,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(Function, ;)
@@ -513,7 +513,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -531,7 +531,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(get, ;)
@@ -567,7 +567,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -585,7 +585,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(implements, ;)
@@ -621,7 +621,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -639,7 +639,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(import, ;)
@@ -675,7 +675,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -693,7 +693,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(interface, ;)
@@ -729,7 +729,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -747,7 +747,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(library, ;)
@@ -783,7 +783,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -801,7 +801,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(operator, ;)
@@ -837,7 +837,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -855,7 +855,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(mixin, ;)
@@ -891,7 +891,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -909,7 +909,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(part, ;)
@@ -945,7 +945,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -963,7 +963,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(set, ;)
@@ -999,7 +999,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1017,7 +1017,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(static, ;)
@@ -1053,7 +1053,7 @@
           handleNoArguments(==)
           handleSend(x, ==)
           beginBinaryExpression(==)
-          handleLiteralInt(0)
+            handleLiteralInt(0)
           endBinaryExpression(==)
           handleParenthesizedCondition(()
           beginThenStatement(return)
@@ -1071,7 +1071,7 @@
             handleNoArguments(-)
             handleSend(x, -)
             beginBinaryExpression(-)
-            handleLiteralInt(1)
+              handleLiteralInt(1)
             endBinaryExpression(-)
           endArguments(1, (, ))
           handleSend(typedef, ;)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
index dd320e8..8486437 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
@@ -28,7 +28,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, ()
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNoTypeArguments(()
         beginArguments(()
         endArguments(0, (, ))
diff --git a/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
index 09fc946..f8eda7a 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
@@ -68,7 +68,7 @@
                                   listener: beginArguments(()
                                   listener: endArguments(0, (, ))
                             listener: handleSend(f, ()
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         listener: handleNoTypeArguments(()
                         parseArguments())
diff --git a/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
index b0f0952..d970ac1 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
@@ -28,7 +28,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, <)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         beginTypeArguments(<)
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(>)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
index 468279f..60cdf99 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
@@ -68,7 +68,7 @@
                                   listener: beginArguments(()
                                   listener: endArguments(0, (, ))
                             listener: handleSend(f, <)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
index 0b1c727b..1155593 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
@@ -28,7 +28,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, ))
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleParenthesizedExpression(()
         beginTypeArguments(<)
           handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
index 781d73c..79a8099 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
@@ -77,7 +77,7 @@
                                                     listener: beginArguments(()
                                                     listener: endArguments(0, (, ))
                                               listener: handleSend(f, ))
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                     ensureCloseParen(), ()
                                 listener: handleParenthesizedExpression(()
                         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
index c112801..35f2f36 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
@@ -32,7 +32,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, <)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         beginTypeArguments(<)
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(>)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
index 9480d6c..b2e38f4 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
@@ -72,7 +72,7 @@
                                   listener: beginArguments(()
                                   listener: endArguments(0, (, ))
                             listener: handleSend(f, <)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
diff --git a/pkg/front_end/parser_testcases/general/for.dart.expect b/pkg/front_end/parser_testcases/general/for.dart.expect
index 03a3fbd..33fd303 100644
--- a/pkg/front_end/parser_testcases/general/for.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for.dart.expect
@@ -30,7 +30,7 @@
           handleNoArguments(<)
           handleSend(i, <)
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleExpressionStatement(;)
           handleIdentifier(i, expression)
diff --git a/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect b/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
index bbe4ce5..9ea424a 100644
--- a/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
@@ -34,7 +34,7 @@
           handleNoArguments(<)
           handleSend(i, <)
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleExpressionStatement(;)
           handleIdentifier(i, expression)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
index 695f582..7378081 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
@@ -1,984 +1,1014 @@
 beginCompilationUnit(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
-  beginFunctionTypeAlias(typedef)
-    handleIdentifier(E1, typedefDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginFunctionType(void)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E1, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          handleTypeVariablesDefined(T, 1)
+          handleNoType(T)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E2, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          handleTypeVariablesDefined(num, 1)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(>)
+          handleType(num, null)
+        endTypeVariable(>, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E3, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          beginMetadataStar(S)
+          endMetadataStar(0)
+          handleIdentifier(S, typeVariableDeclaration)
+          beginTypeVariable(S)
+            handleTypeVariablesDefined(S, 2)
+            handleNoType(S)
+          endTypeVariable(>, 1, null, null)
+          handleNoType(T)
+        endTypeVariable(,, 0, null, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E4, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          beginMetadataStar(S)
+          endMetadataStar(0)
+          handleIdentifier(S, typeVariableDeclaration)
+          beginTypeVariable(S)
+            handleTypeVariablesDefined(num, 2)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(>)
+            handleType(num, null)
+          endTypeVariable(>, 1, extends, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(,)
+          handleType(num, null)
+        endTypeVariable(,, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E5, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          beginMetadataStar(S)
+          endMetadataStar(0)
+          handleIdentifier(S, typeVariableDeclaration)
+          beginTypeVariable(S)
+            handleTypeVariablesDefined(num, 2)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(>)
+            handleType(num, null)
+          endTypeVariable(>, 1, extends, null)
+          handleIdentifier(S, typeReference)
+          handleNoTypeArguments(,)
+          handleType(S, null)
+        endTypeVariable(,, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(E6, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          beginMetadataStar(S)
+          endMetadataStar(0)
+          handleIdentifier(S, typeVariableDeclaration)
+          beginTypeVariable(S)
+            handleTypeVariablesDefined(T, 2)
+            handleIdentifier(T, typeReference)
+            handleNoTypeArguments(>)
+            handleType(T, null)
+          endTypeVariable(>, 1, extends, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(,)
+          handleType(num, null)
+        endTypeVariable(,, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F1, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(T, 1)
+            handleNoType(T)
+          endTypeVariable(>, 0, null, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F2, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(num, 1)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(>)
+            handleType(num, null)
+          endTypeVariable(>, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F3, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(S, 2)
+              handleNoType(S)
+            endTypeVariable(>, 1, null, null)
+            handleNoType(T)
+          endTypeVariable(,, 0, null, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F4, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(num, 2)
+              handleIdentifier(num, typeReference)
+              handleNoTypeArguments(>)
+              handleType(num, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(,)
+            handleType(num, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F5, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(num, 2)
+              handleIdentifier(num, typeReference)
+              handleNoTypeArguments(>)
+              handleType(num, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(S, typeReference)
+            handleNoTypeArguments(,)
+            handleType(S, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(F6, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(T, 2)
+              handleIdentifier(T, typeReference)
+              handleNoTypeArguments(>)
+              handleType(T, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(,)
+            handleType(num, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G1, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          handleTypeVariablesDefined(X, 1)
+          handleNoType(X)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(X, 1)
+            handleIdentifier(X, typeReference)
+            handleNoTypeArguments(>)
+            handleType(X, null)
+          endTypeVariable(>, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G2, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          handleTypeVariablesDefined(num, 1)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(>)
+          handleType(num, null)
+        endTypeVariable(>, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(X, 1)
+            handleIdentifier(X, typeReference)
+            handleNoTypeArguments(>)
+            handleType(X, null)
+          endTypeVariable(>, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G3, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          beginMetadataStar(Y)
+          endMetadataStar(0)
+          handleIdentifier(Y, typeVariableDeclaration)
+          beginTypeVariable(Y)
+            handleTypeVariablesDefined(Y, 2)
+            handleNoType(Y)
+          endTypeVariable(>, 1, null, null)
+          handleNoType(X)
+        endTypeVariable(,, 0, null, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(Y, 2)
+              handleIdentifier(Y, typeReference)
+              handleNoTypeArguments(>)
+              handleType(Y, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(X, typeReference)
+            handleNoTypeArguments(,)
+            handleType(X, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G4, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          beginMetadataStar(Y)
+          endMetadataStar(0)
+          handleIdentifier(Y, typeVariableDeclaration)
+          beginTypeVariable(Y)
+            handleTypeVariablesDefined(num, 2)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(>)
+            handleType(num, null)
+          endTypeVariable(>, 1, extends, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(,)
+          handleType(num, null)
+        endTypeVariable(,, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(Y, 2)
+              handleIdentifier(Y, typeReference)
+              handleNoTypeArguments(>)
+              handleType(Y, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(X, typeReference)
+            handleNoTypeArguments(,)
+            handleType(X, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G5, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          handleTypeVariablesDefined(num, 1)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(>)
+          handleType(num, null)
+        endTypeVariable(>, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(X, 2)
+              handleIdentifier(X, typeReference)
+              handleNoTypeArguments(>)
+              handleType(X, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(S, typeReference)
+            handleNoTypeArguments(,)
+            handleType(S, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(G6, typedefDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(X)
+        endMetadataStar(0)
+        handleIdentifier(X, typeVariableDeclaration)
+        beginTypeVariable(X)
+          handleTypeVariablesDefined(num, 1)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(>)
+          handleType(num, null)
+        endTypeVariable(>, 0, extends, null)
+      endTypeVariables(<, >)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(T, 2)
+              handleIdentifier(T, typeReference)
+              handleNoTypeArguments(>)
+              handleType(T, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(X, typeReference)
+            handleNoTypeArguments(,)
+            handleType(X, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H1, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  handleTypeVariablesDefined(T, 1)
+                  handleNoType(T)
+                endTypeVariable(>, 0, null, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H2, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  handleTypeVariablesDefined(num, 1)
+                  handleIdentifier(num, typeReference)
+                  handleNoTypeArguments(>)
+                  handleType(num, null)
+                endTypeVariable(>, 0, extends, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H3, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  beginMetadataStar(S)
+                  endMetadataStar(0)
+                  handleIdentifier(S, typeVariableDeclaration)
+                  beginTypeVariable(S)
+                    handleTypeVariablesDefined(S, 2)
+                    handleNoType(S)
+                  endTypeVariable(>, 1, null, null)
+                  handleNoType(T)
+                endTypeVariable(,, 0, null, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H4, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  beginMetadataStar(S)
+                  endMetadataStar(0)
+                  handleIdentifier(S, typeVariableDeclaration)
+                  beginTypeVariable(S)
+                    handleTypeVariablesDefined(num, 2)
+                    handleIdentifier(num, typeReference)
+                    handleNoTypeArguments(>)
+                    handleType(num, null)
+                  endTypeVariable(>, 1, extends, null)
+                  handleIdentifier(num, typeReference)
+                  handleNoTypeArguments(,)
+                  handleType(num, null)
+                endTypeVariable(,, 0, extends, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H5, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  beginMetadataStar(S)
+                  endMetadataStar(0)
+                  handleIdentifier(S, typeVariableDeclaration)
+                  beginTypeVariable(S)
+                    handleTypeVariablesDefined(num, 2)
+                    handleIdentifier(num, typeReference)
+                    handleNoTypeArguments(>)
+                    handleType(num, null)
+                  endTypeVariable(>, 1, extends, null)
+                  handleIdentifier(S, typeReference)
+                  handleNoTypeArguments(,)
+                  handleType(S, null)
+                endTypeVariable(,, 0, extends, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(typedef)
+  beginMetadataStar(typedef)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(typedef)
+    beginFunctionTypeAlias(typedef)
+      handleIdentifier(H6, typedefDeclaration)
+      handleNoTypeVariables(=)
+      beginFunctionType(void)
+        handleNoTypeVariables(()
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+          beginMetadataStar(void)
+          endMetadataStar(0)
+          beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
+            beginFunctionType(void)
+              beginTypeVariables(<)
+                beginMetadataStar(T)
+                endMetadataStar(0)
+                handleIdentifier(T, typeVariableDeclaration)
+                beginTypeVariable(T)
+                  beginMetadataStar(S)
+                  endMetadataStar(0)
+                  handleIdentifier(S, typeVariableDeclaration)
+                  beginTypeVariable(S)
+                    handleTypeVariablesDefined(T, 2)
+                    handleIdentifier(T, typeReference)
+                    handleNoTypeArguments(>)
+                    handleType(T, null)
+                  endTypeVariable(>, 1, extends, null)
+                  handleIdentifier(num, typeReference)
+                  handleNoTypeArguments(,)
+                  handleType(num, null)
+                endTypeVariable(,, 0, extends, null)
+              endTypeVariables(<, >)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+            endFunctionType(Function, null)
+            handleNoName())
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+    endFunctionTypeAlias(typedef, =, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(T, 1)
+            handleNoType(T)
+          endTypeVariable(>, 0, null, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f1, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            handleTypeVariablesDefined(num, 1)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(>)
+            handleType(num, null)
+          endTypeVariable(>, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f2, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(S, 2)
+              handleNoType(S)
+            endTypeVariable(>, 1, null, null)
+            handleNoType(T)
+          endTypeVariable(,, 0, null, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f3, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(num, 2)
+              handleIdentifier(num, typeReference)
+              handleNoTypeArguments(>)
+              handleType(num, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(,)
+            handleType(num, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f4, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(num, 2)
+              handleIdentifier(num, typeReference)
+              handleNoTypeArguments(>)
+              handleType(num, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(S, typeReference)
+            handleNoTypeArguments(,)
+            handleType(S, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f5, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginFields(;)
+      beginFunctionType(void)
+        beginTypeVariables(<)
+          beginMetadataStar(T)
+          endMetadataStar(0)
+          handleIdentifier(T, typeVariableDeclaration)
+          beginTypeVariable(T)
+            beginMetadataStar(S)
+            endMetadataStar(0)
+            handleIdentifier(S, typeVariableDeclaration)
+            beginTypeVariable(S)
+              handleTypeVariablesDefined(T, 2)
+              handleIdentifier(T, typeReference)
+              handleNoTypeArguments(>)
+              handleType(T, null)
+            endTypeVariable(>, 1, extends, null)
+            handleIdentifier(num, typeReference)
+            handleNoTypeArguments(,)
+            handleType(num, null)
+          endTypeVariable(,, 0, extends, null)
+        endTypeVariables(<, >)
+        handleVoidKeyword(void)
+        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
+      endFunctionType(Function, null)
+      handleIdentifier(f6, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, void, ;)
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(;, null)
+      handleNoType(;)
+      handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
-      handleVoidKeyword(void)
-      beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-      endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-    endFunctionType(Function, null)
-  endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-  handleIdentifier(E2, typedefDeclaration)
-  beginTypeVariables(<)
-    beginMetadataStar(T)
-    endMetadataStar(0)
-    handleIdentifier(T, typeVariableDeclaration)
-    beginTypeVariable(T)
-      handleTypeVariablesDefined(num, 1)
-      handleIdentifier(num, typeReference)
-      handleNoTypeArguments(>)
-      handleType(num, null)
-    endTypeVariable(>, 0, extends, null)
-  endTypeVariables(<, >)
-  beginFunctionType(void)
-    handleNoTypeVariables(()
-    handleVoidKeyword(void)
-    beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-    endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-  endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(E3, typedefDeclaration)
-beginTypeVariables(<)
-  beginMetadataStar(T)
-  endMetadataStar(0)
-  handleIdentifier(T, typeVariableDeclaration)
-  beginTypeVariable(T)
-    beginMetadataStar(S)
-    endMetadataStar(0)
-    handleIdentifier(S, typeVariableDeclaration)
-    beginTypeVariable(S)
-      handleTypeVariablesDefined(S, 2)
-      handleNoType(S)
-    endTypeVariable(>, 1, null, null)
-    handleNoType(T)
-  endTypeVariable(,, 0, null, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-  handleNoTypeVariables(()
-  handleVoidKeyword(void)
-  beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-  endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(E4, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-  beginMetadataStar(S)
-  endMetadataStar(0)
-  handleIdentifier(S, typeVariableDeclaration)
-  beginTypeVariable(S)
-    handleTypeVariablesDefined(num, 2)
-    handleIdentifier(num, typeReference)
-    handleNoTypeArguments(>)
-    handleType(num, null)
-  endTypeVariable(>, 1, extends, null)
-  handleIdentifier(num, typeReference)
-  handleNoTypeArguments(,)
-  handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(E5, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-  handleTypeVariablesDefined(num, 2)
-  handleIdentifier(num, typeReference)
-  handleNoTypeArguments(>)
-  handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(S, typeReference)
-handleNoTypeArguments(,)
-handleType(S, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(E6, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(T, 2)
-handleIdentifier(T, typeReference)
-handleNoTypeArguments(>)
-handleType(T, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F1, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(T, 1)
-handleNoType(T)
-endTypeVariable(>, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F2, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F3, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(S, 2)
-handleNoType(S)
-endTypeVariable(>, 1, null, null)
-handleNoType(T)
-endTypeVariable(,, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F4, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F5, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(S, typeReference)
-handleNoTypeArguments(,)
-handleType(S, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(F6, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(T, 2)
-handleIdentifier(T, typeReference)
-handleNoTypeArguments(>)
-handleType(T, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G1, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-handleTypeVariablesDefined(X, 1)
-handleNoType(X)
-endTypeVariable(>, 0, null, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(X, 1)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(>)
-handleType(X, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G2, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(X, 1)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(>)
-handleType(X, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G3, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-beginMetadataStar(Y)
-endMetadataStar(0)
-handleIdentifier(Y, typeVariableDeclaration)
-beginTypeVariable(Y)
-handleTypeVariablesDefined(Y, 2)
-handleNoType(Y)
-endTypeVariable(>, 1, null, null)
-handleNoType(X)
-endTypeVariable(,, 0, null, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(Y, 2)
-handleIdentifier(Y, typeReference)
-handleNoTypeArguments(>)
-handleType(Y, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(,)
-handleType(X, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G4, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-beginMetadataStar(Y)
-endMetadataStar(0)
-handleIdentifier(Y, typeVariableDeclaration)
-beginTypeVariable(Y)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(Y, 2)
-handleIdentifier(Y, typeReference)
-handleNoTypeArguments(>)
-handleType(Y, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(,)
-handleType(X, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G5, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(X, 2)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(>)
-handleType(X, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(S, typeReference)
-handleNoTypeArguments(,)
-handleType(S, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(G6, typedefDeclaration)
-beginTypeVariables(<)
-beginMetadataStar(X)
-endMetadataStar(0)
-handleIdentifier(X, typeVariableDeclaration)
-beginTypeVariable(X)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(T, 2)
-handleIdentifier(T, typeReference)
-handleNoTypeArguments(>)
-handleType(T, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(X, typeReference)
-handleNoTypeArguments(,)
-handleType(X, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H1, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(T, 1)
-handleNoType(T)
-endTypeVariable(>, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H2, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H3, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(S, 2)
-handleNoType(S)
-endTypeVariable(>, 1, null, null)
-handleNoType(T)
-endTypeVariable(,, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H4, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H5, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(S, typeReference)
-handleNoTypeArguments(,)
-handleType(S, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(typedef)
-beginMetadataStar(typedef)
-endMetadataStar(0)
-beginFunctionTypeAlias(typedef)
-handleIdentifier(H6, typedefDeclaration)
-handleNoTypeVariables(=)
-beginFunctionType(void)
-handleNoTypeVariables(()
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(T, 2)
-handleIdentifier(T, typeReference)
-handleNoTypeArguments(>)
-handleType(T, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleNoName())
-handleFormalParameterWithoutValue())
-endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
-endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-endFunctionTypeAlias(typedef, =, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(T, 1)
-handleNoType(T)
-endTypeVariable(>, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f1, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-handleTypeVariablesDefined(num, 1)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f2, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(S, 2)
-handleNoType(S)
-endTypeVariable(>, 1, null, null)
-handleNoType(T)
-endTypeVariable(,, 0, null, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f3, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f4, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(num, 2)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(>)
-handleType(num, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(S, typeReference)
-handleNoTypeArguments(,)
-handleType(S, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f5, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(void)
-beginMetadataStar(void)
-endMetadataStar(0)
-beginTopLevelMember(void)
-beginFunctionType(void)
-beginTypeVariables(<)
-beginMetadataStar(T)
-endMetadataStar(0)
-handleIdentifier(T, typeVariableDeclaration)
-beginTypeVariable(T)
-beginMetadataStar(S)
-endMetadataStar(0)
-handleIdentifier(S, typeVariableDeclaration)
-beginTypeVariable(S)
-handleTypeVariablesDefined(T, 2)
-handleIdentifier(T, typeReference)
-handleNoTypeArguments(>)
-handleType(T, null)
-endTypeVariable(>, 1, extends, null)
-handleIdentifier(num, typeReference)
-handleNoTypeArguments(,)
-handleType(num, null)
-endTypeVariable(,, 0, extends, null)
-endTypeVariables(<, >)
-handleVoidKeyword(void)
-beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
-endFunctionType(Function, null)
-handleIdentifier(f6, topLevelVariableDeclaration)
-handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, void, ;)
-endTopLevelDeclaration(main)
-beginMetadataStar(main)
-endMetadataStar(0)
-beginTopLevelMember(main)
-beginTopLevelMethod(;, null)
-handleNoType(;)
-handleIdentifier(main, topLevelFunctionDeclaration)
-handleNoTypeVariables(()
-beginFormalParameters((, MemberKind.TopLevelMethod)
-endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-handleAsyncModifier(null, null)
-beginBlockFunctionBody({)
-endBlockFunctionBody(0, {, })
-endTopLevelMethod(main, null, })
-endTopLevelDeclaration()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
 endCompilationUnit(31, )
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 7cb72fd..916c8ba 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
@@ -9,6 +9,7 @@
     parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E1, typedefDeclaration)
@@ -39,6 +40,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E2, typedefDeclaration)
@@ -73,6 +75,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E3, typedefDeclaration)
@@ -113,6 +116,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E4, typedefDeclaration)
@@ -157,6 +161,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E5, typedefDeclaration)
@@ -201,6 +206,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E6, typedefDeclaration)
@@ -245,6 +251,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F1, typedefDeclaration)
@@ -275,6 +282,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F2, typedefDeclaration)
@@ -309,6 +317,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F3, typedefDeclaration)
@@ -349,6 +358,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F4, typedefDeclaration)
@@ -393,6 +403,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F5, typedefDeclaration)
@@ -437,6 +448,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F6, typedefDeclaration)
@@ -481,6 +493,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G1, typedefDeclaration)
@@ -523,6 +536,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G2, typedefDeclaration)
@@ -569,6 +583,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G3, typedefDeclaration)
@@ -631,6 +646,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G4, typedefDeclaration)
@@ -697,6 +713,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G5, typedefDeclaration)
@@ -753,6 +770,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G6, typedefDeclaration)
@@ -809,6 +827,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H1, typedefDeclaration)
@@ -855,6 +874,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H2, typedefDeclaration)
@@ -905,6 +925,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H3, typedefDeclaration)
@@ -961,6 +982,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H4, typedefDeclaration)
@@ -1021,6 +1043,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H5, typedefDeclaration)
@@ -1081,6 +1104,7 @@
     parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
+        listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginFunctionTypeAlias(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H6, typedefDeclaration)
@@ -1141,6 +1165,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f1, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         listener: beginMetadataStar(T)
@@ -1170,6 +1195,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f2, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1203,6 +1229,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f3, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1242,6 +1269,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f4, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1285,6 +1313,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f5, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1328,6 +1357,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f6, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
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 9c8e9bd..5d40379 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -56,248 +56,249 @@
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(Configuration, typeReference)
-          handleNoTypeArguments(_configuration)
-          handleType(Configuration, null)
-          handleIdentifier(_configuration, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, Configuration, ;)
-      endMember()
-      beginMetadataStar(ConfigurationService)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, ConfigurationService)
-          handleNoType(;)
-          handleIdentifier(ConfigurationService, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(Configuration)
-            endMetadataStar(0)
-            beginFormalParameter(Configuration, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(Configuration, typeReference)
-              handleNoTypeArguments(configuration)
-              handleType(Configuration, null)
-              handleIdentifier(configuration, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          beginInitializers(:)
-            beginInitializer(assert)
-              beginAssert(assert, Assert.Initializer)
-                handleIdentifier(configuration, expression)
-                handleNoTypeArguments(!=)
-                handleNoArguments(!=)
-                handleSend(configuration, !=)
-                beginBinaryExpression(!=)
-                handleLiteralNull(null)
-                endBinaryExpression(!=)
-              endAssert(assert, Assert.Initializer, (, null, ,)
-            endInitializer(,)
-            beginInitializer(_configuration)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(=)
-              handleNoArguments(=)
-              handleSend(_configuration, =)
-              handleIdentifier(configuration, expression)
-              handleNoTypeArguments({)
-              handleNoArguments({)
-              handleSend(configuration, {)
-              handleAssignmentExpression(=)
-            endInitializer({)
-          endInitializers(2, :, {)
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-        endClassConstructor(null, ConfigurationService, (, :, })
-      endMember()
-      beginMetadataStar(void)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, set, configuration)
-          handleVoidKeyword(void)
-          handleIdentifier(configuration, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-            beginMetadataStar(Configuration)
-            endMetadataStar(0)
-            beginFormalParameter(Configuration, MemberKind.NonStaticMethod, null, null, null)
-              handleIdentifier(Configuration, typeReference)
-              handleNoTypeArguments(configuration)
-              handleType(Configuration, null)
-              handleIdentifier(configuration, formalParameterDeclaration)
-              handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-          beginInitializers(:)
-            beginInitializer(assert)
-              beginAssert(assert, Assert.Initializer)
-                handleIdentifier(configuration, expression)
-                handleNoTypeArguments(!=)
-                handleNoArguments(!=)
-                handleSend(configuration, !=)
-                beginBinaryExpression(!=)
-                handleLiteralNull(null)
-                endBinaryExpression(!=)
-              endAssert(assert, Assert.Initializer, (, null, ,)
-            endInitializer(,)
-            beginInitializer(_configuration)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(=)
-              handleNoArguments(=)
-              handleSend(_configuration, =)
-              handleIdentifier(configuration, expression)
-              handleNoTypeArguments({)
-              handleNoArguments({)
-              handleSend(configuration, {)
-              handleAssignmentExpression(=)
-            endInitializer({)
-          endInitializers(2, :, {)
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-          handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
-          handleRecoverableError(SetterConstructor, set, set)
-          handleRecoverableError(ConstructorWithReturnType, void, void)
-        endClassConstructor(set, void, (, :, })
-      endMember()
-      beginMetadataStar(Configuration)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, get, configuration)
-          handleIdentifier(Configuration, typeReference)
-          handleNoTypeArguments(get)
-          handleType(Configuration, null)
-          handleIdentifier(configuration, methodDeclaration)
-          handleNoTypeVariables(:)
-          handleRecoverableError(MissingMethodParameters, configuration, configuration)
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-          beginInitializers(:)
-            beginInitializer(assert)
-              beginAssert(assert, Assert.Initializer)
+          beginFields({)
+            handleIdentifier(Configuration, typeReference)
+            handleNoTypeArguments(_configuration)
+            handleType(Configuration, null)
+            handleIdentifier(_configuration, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, Configuration, ;)
+        endMember()
+        beginMetadataStar(ConfigurationService)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, ConfigurationService)
+            handleNoType(;)
+            handleIdentifier(ConfigurationService, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(Configuration)
+              endMetadataStar(0)
+              beginFormalParameter(Configuration, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(Configuration, typeReference)
+                handleNoTypeArguments(configuration)
+                handleType(Configuration, null)
+                handleIdentifier(configuration, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(configuration, expression)
+                  handleNoTypeArguments(!=)
+                  handleNoArguments(!=)
+                  handleSend(configuration, !=)
+                  beginBinaryExpression(!=)
+                    handleLiteralNull(null)
+                  endBinaryExpression(!=)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(_configuration)
                 handleIdentifier(_configuration, expression)
-                handleNoTypeArguments(!=)
-                handleNoArguments(!=)
-                handleSend(_configuration, !=)
-                beginBinaryExpression(!=)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(_configuration, =)
+                handleIdentifier(configuration, expression)
+                handleNoTypeArguments({)
+                handleNoArguments({)
+                handleSend(configuration, {)
+                handleAssignmentExpression(=)
+              endInitializer({)
+            endInitializers(2, :, {)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassConstructor(null, ConfigurationService, (, :, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, set, configuration)
+            handleVoidKeyword(void)
+            handleIdentifier(configuration, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(Configuration)
+              endMetadataStar(0)
+              beginFormalParameter(Configuration, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(Configuration, typeReference)
+                handleNoTypeArguments(configuration)
+                handleType(Configuration, null)
+                handleIdentifier(configuration, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(configuration, expression)
+                  handleNoTypeArguments(!=)
+                  handleNoArguments(!=)
+                  handleSend(configuration, !=)
+                  beginBinaryExpression(!=)
+                    handleLiteralNull(null)
+                  endBinaryExpression(!=)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(_configuration)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(_configuration, =)
+                handleIdentifier(configuration, expression)
+                handleNoTypeArguments({)
+                handleNoArguments({)
+                handleSend(configuration, {)
+                handleAssignmentExpression(=)
+              endInitializer({)
+            endInitializers(2, :, {)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
+            handleRecoverableError(SetterConstructor, set, set)
+            handleRecoverableError(ConstructorWithReturnType, void, void)
+          endClassConstructor(set, void, (, :, })
+        endMember()
+        beginMetadataStar(Configuration)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, get, configuration)
+            handleIdentifier(Configuration, typeReference)
+            handleNoTypeArguments(get)
+            handleType(Configuration, null)
+            handleIdentifier(configuration, methodDeclaration)
+            handleNoTypeVariables(:)
+            handleRecoverableError(MissingMethodParameters, configuration, configuration)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(_configuration, expression)
+                  handleNoTypeArguments(!=)
+                  handleNoArguments(!=)
+                  handleSend(_configuration, !=)
+                  beginBinaryExpression(!=)
+                    handleLiteralNull(null)
+                  endBinaryExpression(!=)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(_configuration)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(_configuration, =)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(.)
+                handleNoArguments(.)
+                handleSend(_configuration, .)
+                handleIdentifier(foo, expressionContinuation)
+                handleNoTypeArguments({)
+                handleNoArguments({)
+                handleSend(foo, {)
+                handleEndingBinaryExpression(.)
+                handleAssignmentExpression(=)
+              endInitializer({)
+            endInitializers(2, :, {)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginReturnStatement(return)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(;)
+                handleNoArguments(;)
+                handleSend(_configuration, ;)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(1, {, })
+            handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
+            handleRecoverableError(GetterConstructor, get, get)
+            handleRecoverableError(ConstructorWithReturnType, Configuration, Configuration)
+          endClassConstructor(get, Configuration, (, :, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(_configuration)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(_configuration, =)
                 handleLiteralNull(null)
-                endBinaryExpression(!=)
-              endAssert(assert, Assert.Initializer, (, null, ,)
-            endInitializer(,)
-            beginInitializer(_configuration)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(=)
-              handleNoArguments(=)
-              handleSend(_configuration, =)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(.)
-              handleNoArguments(.)
-              handleSend(_configuration, .)
-              handleIdentifier(foo, expressionContinuation)
-              handleNoTypeArguments({)
-              handleNoArguments({)
-              handleSend(foo, {)
-              endBinaryExpression(.)
-              handleAssignmentExpression(=)
-            endInitializer({)
-          endInitializers(2, :, {)
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-            beginReturnStatement(return)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(;)
-              handleNoArguments(;)
-              handleSend(_configuration, ;)
-            endReturnStatement(true, return, ;)
-          endBlockFunctionBody(1, {, })
-          handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
-          handleRecoverableError(GetterConstructor, get, get)
-          handleRecoverableError(ConstructorWithReturnType, Configuration, Configuration)
-        endClassConstructor(get, Configuration, (, :, })
-      endMember()
-      beginMetadataStar(void)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, method)
-          handleVoidKeyword(void)
-          handleIdentifier(method, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-          beginInitializers(:)
-            beginInitializer(_configuration)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(=)
-              handleNoArguments(=)
-              handleSend(_configuration, =)
-              handleLiteralNull(null)
-              handleAssignmentExpression(=)
-            endInitializer({)
-          endInitializers(1, :, {)
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-          handleRecoverableError(ConstructorWithWrongName, method, method)
-          handleRecoverableError(ConstructorWithReturnType, void, void)
-        endClassConstructor(null, void, (, :, })
-      endMember()
-      beginMetadataStar(Foo)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, null, Foo)
-          handleNoType(})
-          handleIdentifier(Foo, methodDeclaration)
-          handleNoTypeVariables(()
-          beginFormalParameters((, MemberKind.NonStaticMethod)
-          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-          beginInitializers(:)
-            beginInitializer(_configuration)
-              handleIdentifier(_configuration, expression)
-              handleNoTypeArguments(=)
-              handleNoArguments(=)
-              handleSend(_configuration, =)
-              handleLiteralNull(null)
-              handleAssignmentExpression(=)
-            endInitializer({)
-          endInitializers(1, :, {)
-          handleAsyncModifier(null, null)
-          beginBlockFunctionBody({)
-          endBlockFunctionBody(0, {, })
-          handleRecoverableError(ConstructorWithWrongName, Foo, Foo)
-        endClassConstructor(null, Foo, (, :, })
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 6, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-  handleIdentifier(Configuration, classOrMixinDeclaration)
-  handleNoTypeVariables({)
-  beginClassDeclaration(class, null, Configuration)
-    handleNoType(Configuration)
-    handleClassExtends(null, 1)
-    handleClassNoWithClause()
-    handleClassOrMixinImplements(null, 0)
-    handleClassHeader(class, class, null)
-    beginClassOrMixinBody(DeclarationKind.Class, {)
-      beginMetadataStar(Configuration)
-      endMetadataStar(0)
-      beginMember()
-        beginMethod(null, null, null, null, get, foo)
-          handleIdentifier(Configuration, typeReference)
-          handleNoTypeArguments(get)
-          handleType(Configuration, null)
-          handleIdentifier(foo, methodDeclaration)
-          handleNoTypeVariables(=>)
-          handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
-          handleNoInitializers()
-          handleAsyncModifier(null, null)
-          handleThisExpression(this, expression)
-          handleExpressionFunctionBody(=>, ;)
-        endClassMethod(get, Configuration, =>, null, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+                handleAssignmentExpression(=)
+              endInitializer({)
+            endInitializers(1, :, {)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstructorWithWrongName, method, method)
+            handleRecoverableError(ConstructorWithReturnType, void, void)
+          endClassConstructor(null, void, (, :, })
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(})
+            handleIdentifier(Foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(_configuration)
+                handleIdentifier(_configuration, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(_configuration, =)
+                handleLiteralNull(null)
+                handleAssignmentExpression(=)
+              endInitializer({)
+            endInitializers(1, :, {)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstructorWithWrongName, Foo, Foo)
+          endClassConstructor(null, Foo, (, :, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Configuration, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Configuration)
+      handleNoType(Configuration)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(Configuration)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, get, foo)
+            handleIdentifier(Configuration, typeReference)
+            handleNoTypeArguments(get)
+            handleType(Configuration, null)
+            handleIdentifier(foo, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleThisExpression(this, expression)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, Configuration, =>, null, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(2, )
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 2f233a3..1dbb08a 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', _configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginFields({)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(_configuration)
                 listener: handleType(Configuration, null)
@@ -331,7 +332,7 @@
                                     parseArgumentsOpt(foo)
                                       listener: handleNoArguments({)
                                     listener: handleSend(foo, {)
-                              listener: endBinaryExpression(.)
+                              listener: handleEndingBinaryExpression(.)
                             listener: handleAssignmentExpression(=)
                         listener: endInitializer({)
                     listener: endInitializers(2, :, {)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
index 6eeb8df..91800c7 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
@@ -28,7 +28,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(f, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleNoTypeArguments(()
         beginArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
index 0da40dd..a733856 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
@@ -65,7 +65,7 @@
                             parseArgumentsOpt(f)
                               listener: handleNoArguments(!)
                             listener: handleSend(f, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         listener: handleNoTypeArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
index 88e02a1..65cb64b 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
@@ -28,7 +28,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(f, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleNoTypeArguments(()
         beginArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
index d7698cf..ece1474 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
@@ -65,7 +65,7 @@
                             parseArgumentsOpt(f)
                               listener: handleNoArguments(!)
                             listener: handleSend(f, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         listener: handleNoTypeArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
index 56b0356..06fd0eb 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
@@ -29,7 +29,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, ))
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleParenthesizedExpression(()
         handleNonNullAssertExpression(!)
         beginTypeArguments(<)
@@ -51,7 +51,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(f, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleParenthesizedExpression(()
         beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
index c9412c6..e434bf5 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
@@ -78,7 +78,7 @@
                                                     listener: beginArguments(()
                                                     listener: endArguments(0, (, ))
                                               listener: handleSend(f, ))
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                     ensureCloseParen(), ()
                                 listener: handleParenthesizedExpression(()
                         listener: handleNonNullAssertExpression(!)
@@ -136,7 +136,7 @@
                                                     listener: beginArguments(()
                                                     listener: endArguments(0, (, ))
                                               listener: handleSend(f, !)
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                         listener: handleNonNullAssertExpression(!)
                                     ensureCloseParen(!, ()
                                 listener: handleParenthesizedExpression(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
index 8233523..ff032b1 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
@@ -28,7 +28,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(f, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         beginTypeArguments(<)
           handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
index 4bafcd1..3e1777e 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
@@ -65,7 +65,7 @@
                             parseArgumentsOpt(f)
                               listener: handleNoArguments(!)
                             listener: handleSend(f, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
index ab7611a..07545c6 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
@@ -28,7 +28,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(f, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleNoTypeArguments(()
         beginArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
index 2824282..137c323 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
@@ -65,7 +65,7 @@
                             parseArgumentsOpt(f)
                               listener: handleNoArguments(!)
                             listener: handleSend(f, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         listener: handleNoTypeArguments(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
index 6f2b4e7..9d5b29e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
@@ -29,14 +29,14 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(f, !)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleNonNullAssertExpression(!)
           handleIdentifier(g, expressionContinuation)
           handleNoTypeArguments(()
           beginArguments(()
           endArguments(0, (, ))
           handleSend(g, ..)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
         endCascade()
         beginCascade(..)
           handleIdentifier(h, expressionContinuation)
@@ -44,7 +44,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(h, ;)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
         endCascade()
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
index e2adb1f..26b246c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
@@ -67,7 +67,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(f, !)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         listener: handleNonNullAssertExpression(!)
                         parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseSend(., expressionContinuation)
@@ -80,7 +80,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(g, ..)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         listener: endCascade()
@@ -96,7 +96,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(h, ;)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         listener: endCascade()
                   ensureSemicolon())
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
index f33d4b8..ce48ee0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
@@ -29,14 +29,14 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(f, !)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleNonNullAssertExpression(!)
           handleIdentifier(g, expressionContinuation)
           handleNoTypeArguments(()
           beginArguments(()
           endArguments(0, (, ))
           handleSend(g, [)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           beginLiteralString('Hi!')
           endLiteralString(0, ])
           handleIndexedExpression(null, [, ])
@@ -48,13 +48,13 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(h, !)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleNonNullAssertExpression(!)
           handleIdentifier(y, expressionContinuation)
           handleNoTypeArguments(=)
           handleNoArguments(=)
           handleSend(y, =)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleLiteralInt(2)
           handleAssignmentExpression(=)
         endCascade()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
index 565b2a5..f2c02d6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
@@ -67,7 +67,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(f, !)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         listener: handleNonNullAssertExpression(!)
                         parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseSend(., expressionContinuation)
@@ -80,7 +80,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(g, [)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                           parseExpression([)
                             parsePrecedenceExpression([, 1, true)
@@ -107,7 +107,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(h, !)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         listener: handleNonNullAssertExpression(!)
                         parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseSend(., expressionContinuation)
@@ -117,7 +117,7 @@
                           parseArgumentsOpt(y)
                             listener: handleNoArguments(=)
                           listener: handleSend(y, =)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                         parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                         parseExpressionWithoutCascade(=)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
index 0f816d7..0664454 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
@@ -29,13 +29,13 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(f, .)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleIdentifier(g, expressionContinuation)
           handleNoTypeArguments(()
           beginArguments(()
           endArguments(0, (, ))
           handleSend(g, [)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           beginLiteralString('Hi!')
           endLiteralString(0, ])
           handleIndexedExpression(null, [, ])
@@ -46,12 +46,12 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(h, .)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleIdentifier(y, expressionContinuation)
           handleNoTypeArguments(=)
           handleNoArguments(=)
           handleSend(y, =)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleLiteralInt(2)
           handleAssignmentExpression(=)
         endCascade()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
index c3c6ad7..edb5617 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
@@ -67,7 +67,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(f, .)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseSend(., expressionContinuation)
                           ensureIdentifier(., expressionContinuation)
                             listener: handleIdentifier(g, expressionContinuation)
@@ -78,7 +78,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(g, [)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                           parseExpression([)
                             parsePrecedenceExpression([, 1, true)
@@ -103,7 +103,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(h, .)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseSend(., expressionContinuation)
                           ensureIdentifier(., expressionContinuation)
                             listener: handleIdentifier(y, expressionContinuation)
@@ -111,7 +111,7 @@
                           parseArgumentsOpt(y)
                             listener: handleNoArguments(=)
                           listener: handleSend(y, =)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                         parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                         parseExpressionWithoutCascade(=)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
index aa04042..bd6398b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
@@ -29,13 +29,13 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(f, .)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
           handleIdentifier(g, expressionContinuation)
           handleNoTypeArguments(()
           beginArguments(()
           endArguments(0, (, ))
           handleSend(g, ..)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
         endCascade()
         beginCascade(..)
           handleIdentifier(h, expressionContinuation)
@@ -43,7 +43,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(h, ;)
-          endBinaryExpression(..)
+          handleEndingBinaryExpression(..)
         endCascade()
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
index 7b12b5f..2bcc2ac 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
@@ -67,7 +67,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(f, .)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseSend(., expressionContinuation)
                           ensureIdentifier(., expressionContinuation)
                             listener: handleIdentifier(g, expressionContinuation)
@@ -78,7 +78,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(g, ..)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         listener: endCascade()
@@ -94,7 +94,7 @@
                                 listener: beginArguments(()
                                 listener: endArguments(0, (, ))
                           listener: handleSend(h, ;)
-                        listener: endBinaryExpression(..)
+                        listener: handleEndingBinaryExpression(..)
                         parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                         listener: endCascade()
                   ensureSemicolon())
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
index 7646da2..0b8bec0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
@@ -26,7 +26,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(1)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleLiteralInt(42)
         handleAssignmentExpression(=)
         handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
index 2acd198..07e059f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
@@ -73,7 +73,7 @@
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(1)
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                       parsePrecedenceExpression(=, 1, true)
                         parseUnaryExpression(=, true)
                           parsePrimary(=, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
index 3392c1f..8254bd8 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
@@ -18,7 +18,7 @@
       handleNoTypeArguments([)
       handleNoArguments([)
       handleSend(current, [)
-      endBinaryExpression(.)
+      handleEndingBinaryExpression(.)
       handleIdentifier(logKey, expression)
       handleNoTypeArguments(])
       handleNoArguments(])
@@ -31,10 +31,10 @@
       endAsOperatorType(as)
       handleAsOperator(as)
       beginBinaryExpression(??)
-      handleIdentifier(_default, expression)
-      handleNoTypeArguments(;)
-      handleNoArguments(;)
-      handleSend(_default, ;)
+        handleIdentifier(_default, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(_default, ;)
       endBinaryExpression(??)
       handleExpressionFunctionBody(=>, ;)
     endTopLevelMethod(Logger, get, ;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
index 1efe9cc..2084814 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
@@ -45,7 +45,7 @@
                       parseArgumentsOpt(current)
                         listener: handleNoArguments([)
                       listener: handleSend(current, [)
-                listener: endBinaryExpression(.)
+                listener: handleEndingBinaryExpression(.)
                 parseArgumentOrIndexStar(current, Instance of 'NoTypeParamOrArg', false)
                   parseExpression([)
                     parsePrecedenceExpression([, 1, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
index 0656ee2..683bb10 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
@@ -18,7 +18,7 @@
       handleNoTypeArguments([)
       handleNoArguments([)
       handleSend(current, [)
-      endBinaryExpression(.)
+      handleEndingBinaryExpression(.)
       handleIdentifier(logKey, expression)
       handleNoTypeArguments(])
       handleNoArguments(])
@@ -32,10 +32,10 @@
       handleAsOperator(as)
       handleParenthesizedExpression(()
       beginBinaryExpression(??)
-      handleIdentifier(_default, expression)
-      handleNoTypeArguments(;)
-      handleNoArguments(;)
-      handleSend(_default, ;)
+        handleIdentifier(_default, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(_default, ;)
       endBinaryExpression(??)
       handleExpressionFunctionBody(=>, ;)
     endTopLevelMethod(Logger, get, ;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
index b83104f..3049622 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
@@ -53,7 +53,7 @@
                                       parseArgumentsOpt(current)
                                         listener: handleNoArguments([)
                                       listener: handleSend(current, [)
-                                listener: endBinaryExpression(.)
+                                listener: handleEndingBinaryExpression(.)
                                 parseArgumentOrIndexStar(current, Instance of 'NoTypeParamOrArg', false)
                                   parseExpression([)
                                     parsePrecedenceExpression([, 1, true)
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 7296a62..325d346 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -75,7 +75,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(toString, ;)
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(!)
@@ -85,7 +85,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(42)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(!)
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 9d5ceaf..5d6b616 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
@@ -174,7 +174,7 @@
                                   listener: beginArguments(()
                                   listener: endArguments(0, (, ))
                             listener: handleSend(toString, ;)
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon())
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, a)
@@ -206,7 +206,7 @@
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(42)
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon(])
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, 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 6fd348f..b461804c 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
@@ -76,7 +76,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(toString, ;)
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(!)
@@ -87,7 +87,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(42)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(!)
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 39b35af..50f71df 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
@@ -185,7 +185,7 @@
                                     listener: beginArguments(()
                                     listener: endArguments(0, (, ))
                               listener: handleSend(toString, ;)
-                        listener: endBinaryExpression(?.)
+                        listener: handleEndingBinaryExpression(?.)
                     ensureSemicolon())
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, ()
@@ -228,7 +228,7 @@
                                     parseLiteralInt([)
                                       listener: handleLiteralInt(42)
                             listener: handleLiteralList(1, [, null, ])
-                        listener: endBinaryExpression(?.)
+                        listener: handleEndingBinaryExpression(?.)
                     ensureSemicolon(])
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, ()
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 7679ad7..0e1c227 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -40,64 +40,70 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
-          handleNoType(late)
-          handleIdentifier(x1, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, late, null, 1, late, ;)
-      endMember()
-      beginMetadataStar(static)
-      endMetadataStar(0)
-      beginMember()
-        handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
-        handleNoType(late)
-        handleIdentifier(x2, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, static, null, late, null, 1, static, ;)
-    endMember()
-    beginMetadataStar(covariant)
-    endMetadataStar(0)
-    beginMember()
-      handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
-      handleNoType(late)
-      handleIdentifier(x3, fieldDeclaration)
-      handleNoFieldInitializer(;)
-    endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
-  endMember()
-  beginMetadataStar(late)
-  endMetadataStar(0)
-  beginMember()
-    handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
-    handleNoType(late)
-    handleIdentifier(x4, fieldDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(0)
-    endFieldInitializer(=, ;)
-  endClassFields(null, null, null, null, late, null, 1, late, ;)
-endMember()
-beginMetadataStar(static)
-endMetadataStar(0)
-beginMember()
-  handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
-  handleNoType(late)
-  handleIdentifier(x5, fieldDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(0)
-  endFieldInitializer(=, ;)
-endClassFields(null, null, static, null, late, null, 1, static, ;)
-endMember()
-beginMetadataStar(covariant)
-endMetadataStar(0)
-beginMember()
-handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
-handleNoType(late)
-handleIdentifier(x6, fieldDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(0)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
-endMember()
-endClassOrMixinBody(DeclarationKind.Class, 6, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
+            handleNoType(late)
+            handleIdentifier(x1, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, late, null, 1, late, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
+            handleNoType(late)
+            handleIdentifier(x2, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, static, null, late, null, 1, static, ;)
+        endMember()
+        beginMetadataStar(covariant)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
+            handleNoType(late)
+            handleIdentifier(x3, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+        endMember()
+        beginMetadataStar(late)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
+            handleNoType(late)
+            handleIdentifier(x4, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, late, null, 1, late, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
+            handleNoType(late)
+            handleIdentifier(x5, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, static, null, late, null, 1, static, ;)
+        endMember()
+        beginMetadataStar(covariant)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
+            handleNoType(late)
+            handleIdentifier(x6, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 e830646..4dd48dd 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
@@ -34,6 +34,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields({, null, null, null, null, late, null, late, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
+                listener: beginFields({)
                 reportRecoverableError(x1, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
                 listener: handleNoType(late)
@@ -51,6 +52,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 reportRecoverableError(x2, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
                 listener: handleNoType(late)
@@ -68,6 +70,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 reportRecoverableError(x3, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
                 listener: handleNoType(late)
@@ -85,6 +88,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, late, null, late, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 reportRecoverableError(x4, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
                 listener: handleNoType(late)
@@ -109,6 +113,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 reportRecoverableError(x5, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
                 listener: handleNoType(late)
@@ -133,6 +138,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 reportRecoverableError(x6, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
                 listener: handleNoType(late)
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 69d129c..2cb3c26 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
@@ -14,58 +14,64 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         beginMember()
-          handleNoType(var)
-          handleIdentifier(x1, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, var, 1, var, ;)
-      endMember()
-      beginMetadataStar(static)
-      endMetadataStar(0)
-      beginMember()
-        handleNoType(var)
-        handleIdentifier(x2, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, static, null, null, var, 1, static, ;)
-    endMember()
-    beginMetadataStar(covariant)
-    endMetadataStar(0)
-    beginMember()
-      handleNoType(var)
-      handleIdentifier(x3, fieldDeclaration)
-      handleNoFieldInitializer(;)
-    endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
-  endMember()
-  beginMetadataStar(var)
-  endMetadataStar(0)
-  beginMember()
-    handleNoType(var)
-    handleIdentifier(x4, fieldDeclaration)
-    beginFieldInitializer(=)
-      handleLiteralInt(0)
-    endFieldInitializer(=, ;)
-  endClassFields(null, null, null, null, null, var, 1, var, ;)
-endMember()
-beginMetadataStar(static)
-endMetadataStar(0)
-beginMember()
-  handleNoType(var)
-  handleIdentifier(x5, fieldDeclaration)
-  beginFieldInitializer(=)
-    handleLiteralInt(0)
-  endFieldInitializer(=, ;)
-endClassFields(null, null, static, null, null, var, 1, static, ;)
-endMember()
-beginMetadataStar(covariant)
-endMetadataStar(0)
-beginMember()
-handleNoType(var)
-handleIdentifier(x6, fieldDeclaration)
-beginFieldInitializer(=)
-  handleLiteralInt(0)
-endFieldInitializer(=, ;)
-endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
-endMember()
-endClassOrMixinBody(DeclarationKind.Class, 6, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleNoType(var)
+            handleIdentifier(x1, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, var, 1, var, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleNoType(var)
+            handleIdentifier(x2, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, static, null, null, var, 1, static, ;)
+        endMember()
+        beginMetadataStar(covariant)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleNoType(var)
+            handleIdentifier(x3, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+        endMember()
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleNoType(var)
+            handleIdentifier(x4, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, var, 1, var, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleNoType(var)
+            handleIdentifier(x5, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, static, null, null, var, 1, static, ;)
+        endMember()
+        beginMetadataStar(covariant)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleNoType(var)
+            handleIdentifier(x6, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 45d8491..db54e68 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, var, var, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
+                listener: beginFields({)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x1, fieldDeclaration)
@@ -47,6 +48,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x2, fieldDeclaration)
@@ -61,6 +63,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x3, fieldDeclaration)
@@ -75,6 +78,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x4, fieldDeclaration)
@@ -96,6 +100,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x5, fieldDeclaration)
@@ -117,6 +122,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
+                listener: beginFields(;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x6, fieldDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
index 51ede43..537e3e4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
@@ -79,7 +79,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(toString, :)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleConditionalExpressionColon()
           handleIdentifier(c, expression)
           handleNoTypeArguments(;)
@@ -103,7 +103,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(toString, :)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleConditionalExpressionColon()
           handleIdentifier(c, expression)
           handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
index caa1810..433eec8 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
@@ -297,7 +297,7 @@
                                         listener: beginArguments(()
                                         listener: endArguments(0, (, ))
                                   listener: handleSend(toString, :)
-                            listener: endBinaryExpression(.)
+                            listener: handleEndingBinaryExpression(.)
                         ensureColon())
                         listener: handleConditionalExpressionColon()
                         parseExpressionWithoutCascade(:)
@@ -397,7 +397,7 @@
                                         listener: beginArguments(()
                                         listener: endArguments(0, (, ))
                                   listener: handleSend(toString, :)
-                            listener: endBinaryExpression(.)
+                            listener: handleEndingBinaryExpression(.)
                         ensureColon())
                         listener: handleConditionalExpressionColon()
                         parseExpressionWithoutCascade(:)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
index 760e325..abcfbe6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
@@ -33,7 +33,7 @@
         handleNoArguments(])
         handleSend(b, ])
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(?)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
index 45d26ab..c170335 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
@@ -86,7 +86,7 @@
                                         listener: handleNoArguments(])
                                       listener: handleSend(b, ])
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon(])
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, a)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
index e9a9536..c8c2deb 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
@@ -37,7 +37,7 @@
         handleNoArguments(])
         handleSend(b, ])
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleIdentifier(c, expression)
         handleNoTypeArguments(;)
         handleNoArguments(;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
index 30dbcff..9a4dd5e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
@@ -93,7 +93,7 @@
                                         listener: handleNoArguments(])
                                       listener: handleSend(b, ])
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                       parsePrecedenceExpression(=, 1, true)
                         parseUnaryExpression(=, true)
                           parsePrimary(=, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
index 29249f9..60b2d3b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
@@ -26,7 +26,7 @@
         handleLiteralInt(0)
         handleIndexedExpression(?, [, ])
         beginBinaryExpression(+)
-        handleLiteralInt(1)
+          handleLiteralInt(1)
         endBinaryExpression(+)
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
index df0efbe..1990760 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
@@ -46,7 +46,7 @@
           handleSend(b, ))
         endArguments(1, (, ))
         handleSend(call, ;)
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(?)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
index 65987de..093950e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
@@ -95,7 +95,7 @@
                                               listener: handleSend(b, ))
                                   listener: endArguments(1, (, ))
                             listener: handleSend(call, ;)
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon())
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, a)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
index 8839c76..0b56e4b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
@@ -62,7 +62,7 @@
           handleSend(b, ))
         endArguments(1, (, ))
         handleSend(call, ;)
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(a, expression)
         handleNoTypeArguments(?)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
index 76f08fd..5fdde51 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
@@ -99,7 +99,7 @@
                                               listener: handleSend(b, ))
                                   listener: endArguments(1, (, ))
                             listener: handleSend(call, ;)
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon())
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, a)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
index 44d2997..a7ed1d5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
@@ -28,10 +28,10 @@
           handleNoTypeArguments(!)
           handleNoArguments(!)
           handleSend(value, !)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleNonNullAssertExpression(!)
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleParenthesizedCondition(()
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
index c45375f..6fc667d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
@@ -65,7 +65,7 @@
                               parseArgumentsOpt(value)
                                 listener: handleNoArguments(!)
                               listener: handleSend(value, !)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         listener: handleNonNullAssertExpression(!)
                         listener: beginBinaryExpression(<)
                         parsePrecedenceExpression(<, 9, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
index bb7bea4..384f089 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
@@ -28,11 +28,11 @@
           handleNoTypeArguments(!)
           handleNoArguments(!)
           handleSend(value, !)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleNonNullAssertExpression(!)
           handleParenthesizedExpression(()
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleParenthesizedCondition(()
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
index 4895f75..484f431 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
@@ -73,7 +73,7 @@
                                               parseArgumentsOpt(value)
                                                 listener: handleNoArguments(!)
                                               listener: handleSend(value, !)
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                         listener: handleNonNullAssertExpression(!)
                                     ensureCloseParen(!, ()
                                 listener: handleParenthesizedExpression(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
index 9784d4e..2e30ef7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
@@ -28,10 +28,10 @@
           handleNoTypeArguments())
           handleNoArguments())
           handleSend(value, ))
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleParenthesizedExpression(()
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleParenthesizedCondition(()
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
index 89547a0..79a4016 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
@@ -73,7 +73,7 @@
                                               parseArgumentsOpt(value)
                                                 listener: handleNoArguments())
                                               listener: handleSend(value, ))
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                     ensureCloseParen(value, ()
                                 listener: handleParenthesizedExpression(()
                         listener: beginBinaryExpression(<)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
index fcbb3c9..fee2dc9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
@@ -28,9 +28,9 @@
           handleNoTypeArguments(<)
           handleNoArguments(<)
           handleSend(value, <)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           beginBinaryExpression(<)
-          handleLiteralInt(10)
+            handleLiteralInt(10)
           endBinaryExpression(<)
           handleParenthesizedCondition(()
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
index ae0ddb4..7da58ec 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
@@ -65,7 +65,7 @@
                               parseArgumentsOpt(value)
                                 listener: handleNoArguments(<)
                               listener: handleSend(value, <)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         listener: beginBinaryExpression(<)
                         parsePrecedenceExpression(<, 9, true)
                           parseUnaryExpression(<, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
index d456544..fb4318c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
@@ -27,9 +27,9 @@
         handleNoTypeArguments(<)
         handleNoArguments(<)
         handleSend(x, <)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         beginBinaryExpression(<)
-        handleLiteralInt(10)
+          handleLiteralInt(10)
         endBinaryExpression(<)
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
index 4dfab55..192785b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
@@ -64,7 +64,7 @@
                             parseArgumentsOpt(x)
                               listener: handleNoArguments(<)
                             listener: handleSend(x, <)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: beginBinaryExpression(<)
                       parsePrecedenceExpression(<, 9, true)
                         parseUnaryExpression(<, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
index c4ddcf5..68b4a22 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
@@ -27,10 +27,10 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(x, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         beginBinaryExpression(<)
-        handleLiteralInt(10)
+          handleLiteralInt(10)
         endBinaryExpression(<)
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
index 9b6f454..9bb83fa 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
@@ -64,7 +64,7 @@
                             parseArgumentsOpt(x)
                               listener: handleNoArguments(!)
                             listener: handleSend(x, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       listener: beginBinaryExpression(<)
                       parsePrecedenceExpression(<, 9, true)
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 7c818a2..5e881e6 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
@@ -14,14 +14,15 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 9c4a02e..1680edc 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
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 f228d46..b28c309 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
@@ -20,17 +20,18 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, fieldDeclaration)
-          handleRecoverableError(FinalAndCovariantLateWithInitializer, covariant, covariant)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, late, final, 1, covariant, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, fieldDeclaration)
+            handleRecoverableError(FinalAndCovariantLateWithInitializer, covariant, covariant)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, late, final, 1, covariant, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 4d308f2..6b1e244 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
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 25f761d..a3cfa19 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
@@ -20,17 +20,18 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          handleRecoverableError(FinalAndCovariant, covariant, covariant)
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(x)
-          handleType(int, null)
-          handleIdentifier(x, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, final, 1, covariant, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleRecoverableError(FinalAndCovariant, covariant, covariant)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, final, 1, covariant, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 dc89a35..5664402 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, null, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields({)
                 reportRecoverableError(covariant, FinalAndCovariant)
                   listener: handleRecoverableError(FinalAndCovariant, covariant, covariant)
                 listener: handleIdentifier(int, typeReference)
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 1c8b158..0624ab1 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
@@ -14,329 +14,331 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(String, typeReference)
-          handleNoTypeArguments(?)
-          handleType(String, ?)
-          handleIdentifier(x, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, String, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(y)
-        handleType(int, null)
-        handleIdentifier(y, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(Object)
-          endMetadataStar(0)
-          beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(Object, typeReference)
+          beginFields({)
+            handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
-            handleType(Object, ?)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(as)
-            handleNoArguments(as)
-            handleSend(o, as)
-            beginAsOperatorType(as)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, ?)
-            endAsOperatorType(as)
-            handleAsOperator(as)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleLiteralInt(0)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleIdentifier(a, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(o)
-            handleType(dynamic, null)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(is)
-            handleNoArguments(is)
-            handleSend(o, is)
-            beginIsOperatorType(is)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, null)
-            endIsOperatorType(is)
-            handleIsOperator(is, null)
-            beginConditionalExpression(?)
-              handleIdentifier(o, expression)
-              handleNoTypeArguments(.)
-              handleNoArguments(.)
-              handleSend(o, .)
-              handleIdentifier(length, expressionContinuation)
-              handleNoTypeArguments(:)
-              handleNoArguments(:)
-              handleSend(length, :)
-              endBinaryExpression(.)
-              handleConditionalExpressionColon()
-              handleLiteralNull(null)
-            endConditionalExpression(?, :)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleLiteralNull(null)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleIdentifier(b, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(o)
-            handleType(dynamic, null)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(is)
-            handleNoArguments(is)
-            handleSend(o, is)
-            beginIsOperatorType(is)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, ?)
-            endIsOperatorType(is)
-            handleIsOperator(is, null)
-            beginConditionalExpression(?)
-              handleIdentifier(o, expression)
-              handleNoTypeArguments(.)
-              handleNoArguments(.)
-              handleSend(o, .)
-              handleIdentifier(length, expressionContinuation)
-              handleNoTypeArguments(:)
-              handleNoArguments(:)
-              handleSend(length, :)
-              endBinaryExpression(.)
-              handleConditionalExpressionColon()
-              handleLiteralNull(null)
-            endConditionalExpression(?, :)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleLiteralNull(null)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleIdentifier(c, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(o)
-            handleType(dynamic, null)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(as)
-            handleNoArguments(as)
-            handleSend(o, as)
-            beginAsOperatorType(as)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, null)
-            endAsOperatorType(as)
-            handleAsOperator(as)
-            beginConditionalExpression(?)
-              handleIdentifier(o, expression)
-              handleNoTypeArguments(.)
-              handleNoArguments(.)
-              handleSend(o, .)
-              handleIdentifier(length, expressionContinuation)
-              handleNoTypeArguments(:)
-              handleNoArguments(:)
-              handleSend(length, :)
-              endBinaryExpression(.)
-              handleConditionalExpressionColon()
-              handleLiteralNull(null)
-            endConditionalExpression(?, :)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleLiteralNull(null)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleIdentifier(d, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(o)
-            handleType(dynamic, null)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(as)
-            handleNoArguments(as)
-            handleSend(o, as)
-            beginAsOperatorType(as)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, ?)
-            endAsOperatorType(as)
-            handleAsOperator(as)
-            beginConditionalExpression(?)
-              handleIdentifier(o, expression)
-              handleNoTypeArguments(.)
-              handleNoArguments(.)
-              handleSend(o, .)
-              handleIdentifier(length, expressionContinuation)
-              handleNoTypeArguments(:)
-              handleNoArguments(:)
-              handleSend(length, :)
-              endBinaryExpression(.)
-              handleConditionalExpressionColon()
-              handleLiteralNull(null)
-            endConditionalExpression(?, :)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleLiteralNull(null)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 7, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+            handleType(String, ?)
+            handleIdentifier(x, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, String, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(Object)
+              endMetadataStar(0)
+              beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(Object, typeReference)
+                handleNoTypeArguments(?)
+                handleType(Object, ?)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(as)
+                handleNoArguments(as)
+                handleSend(o, as)
+                beginAsOperatorType(as)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, ?)
+                endAsOperatorType(as)
+                handleAsOperator(as)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleIdentifier(a, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(o)
+                handleType(dynamic, null)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(o, is)
+                beginIsOperatorType(is)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, null)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                beginConditionalExpression(?)
+                  handleIdentifier(o, expression)
+                  handleNoTypeArguments(.)
+                  handleNoArguments(.)
+                  handleSend(o, .)
+                  handleIdentifier(length, expressionContinuation)
+                  handleNoTypeArguments(:)
+                  handleNoArguments(:)
+                  handleSend(length, :)
+                  handleEndingBinaryExpression(.)
+                  handleConditionalExpressionColon()
+                  handleLiteralNull(null)
+                endConditionalExpression(?, :)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleLiteralNull(null)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleIdentifier(b, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(o)
+                handleType(dynamic, null)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(o, is)
+                beginIsOperatorType(is)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, ?)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                beginConditionalExpression(?)
+                  handleIdentifier(o, expression)
+                  handleNoTypeArguments(.)
+                  handleNoArguments(.)
+                  handleSend(o, .)
+                  handleIdentifier(length, expressionContinuation)
+                  handleNoTypeArguments(:)
+                  handleNoArguments(:)
+                  handleSend(length, :)
+                  handleEndingBinaryExpression(.)
+                  handleConditionalExpressionColon()
+                  handleLiteralNull(null)
+                endConditionalExpression(?, :)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleLiteralNull(null)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleIdentifier(c, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(o)
+                handleType(dynamic, null)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(as)
+                handleNoArguments(as)
+                handleSend(o, as)
+                beginAsOperatorType(as)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, null)
+                endAsOperatorType(as)
+                handleAsOperator(as)
+                beginConditionalExpression(?)
+                  handleIdentifier(o, expression)
+                  handleNoTypeArguments(.)
+                  handleNoArguments(.)
+                  handleSend(o, .)
+                  handleIdentifier(length, expressionContinuation)
+                  handleNoTypeArguments(:)
+                  handleNoArguments(:)
+                  handleSend(length, :)
+                  handleEndingBinaryExpression(.)
+                  handleConditionalExpressionColon()
+                  handleLiteralNull(null)
+                endConditionalExpression(?, :)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleLiteralNull(null)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleIdentifier(d, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(o)
+                handleType(dynamic, null)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(as)
+                handleNoArguments(as)
+                handleSend(o, as)
+                beginAsOperatorType(as)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, ?)
+                endAsOperatorType(as)
+                handleAsOperator(as)
+                beginConditionalExpression(?)
+                  handleIdentifier(o, expression)
+                  handleNoTypeArguments(.)
+                  handleNoArguments(.)
+                  handleSend(o, .)
+                  handleIdentifier(length, expressionContinuation)
+                  handleNoTypeArguments(:)
+                  handleNoArguments(:)
+                  handleSend(length, :)
+                  handleEndingBinaryExpression(.)
+                  handleConditionalExpressionColon()
+                  handleLiteralNull(null)
+                endConditionalExpression(?, :)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleLiteralNull(null)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 7, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 8c591ce..170bf38 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields({)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -49,6 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
@@ -258,7 +260,7 @@
                                           parseArgumentsOpt(length)
                                             listener: handleNoArguments(:)
                                           listener: handleSend(length, :)
-                                    listener: endBinaryExpression(.)
+                                    listener: handleEndingBinaryExpression(.)
                                 ensureColon(length)
                                 listener: handleConditionalExpressionColon()
                                 parseExpressionWithoutCascade(:)
@@ -398,7 +400,7 @@
                                           parseArgumentsOpt(length)
                                             listener: handleNoArguments(:)
                                           listener: handleSend(length, :)
-                                    listener: endBinaryExpression(.)
+                                    listener: handleEndingBinaryExpression(.)
                                 ensureColon(length)
                                 listener: handleConditionalExpressionColon()
                                 parseExpressionWithoutCascade(:)
@@ -538,7 +540,7 @@
                                           parseArgumentsOpt(length)
                                             listener: handleNoArguments(:)
                                           listener: handleSend(length, :)
-                                    listener: endBinaryExpression(.)
+                                    listener: handleEndingBinaryExpression(.)
                                 ensureColon(length)
                                 listener: handleConditionalExpressionColon()
                                 parseExpressionWithoutCascade(:)
@@ -678,7 +680,7 @@
                                           parseArgumentsOpt(length)
                                             listener: handleNoArguments(:)
                                           listener: handleSend(length, :)
-                                    listener: endBinaryExpression(.)
+                                    listener: handleEndingBinaryExpression(.)
                                 ensureColon(length)
                                 listener: handleConditionalExpressionColon()
                                 parseExpressionWithoutCascade(:)
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 44a6b48..89bb893 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
@@ -14,73 +14,75 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(String, typeReference)
-          handleNoTypeArguments(?)
-          handleType(String, ?)
-          handleIdentifier(x, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, String, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(y)
-        handleType(int, null)
-        handleIdentifier(y, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(Object)
-          endMetadataStar(0)
-          beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(Object, typeReference)
+          beginFields({)
+            handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
-            handleType(Object, ?)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(as)
-            handleNoArguments(as)
-            handleSend(o, as)
-            beginAsOperatorType(as)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(,)
-              handleType(String, null)
-            endAsOperatorType(as)
-            handleAsOperator(as)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleLiteralInt(0)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 3, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+            handleType(String, ?)
+            handleIdentifier(x, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, String, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(Object)
+              endMetadataStar(0)
+              beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(Object, typeReference)
+                handleNoTypeArguments(?)
+                handleType(Object, ?)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(as)
+                handleNoArguments(as)
+                handleSend(o, as)
+                beginAsOperatorType(as)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(,)
+                  handleType(String, null)
+                endAsOperatorType(as)
+                handleAsOperator(as)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 5edc2bf..651f195 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields({)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -49,6 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
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 aa81a89..1efd65e 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
@@ -14,198 +14,200 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(String, typeReference)
-          handleNoTypeArguments(?)
-          handleType(String, ?)
-          handleIdentifier(x, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, String, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(y)
-        handleType(int, null)
-        handleIdentifier(y, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-    beginMetadataStar(Foo)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, Foo)
-        handleNoType(;)
-        handleIdentifier(Foo, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(Object)
-          endMetadataStar(0)
-          beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(Object, typeReference)
+          beginFields({)
+            handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
-            handleType(Object, ?)
-            handleIdentifier(o, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(x)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(x, =)
-            handleIdentifier(o, expression)
-            handleNoTypeArguments(!=)
-            handleNoArguments(!=)
-            handleSend(o, !=)
-            beginBinaryExpression(!=)
-            handleLiteralNull(null)
-            endBinaryExpression(!=)
-            beginConditionalExpression(?)
-              handleIdentifier(o, expression)
-              handleNoTypeArguments(as)
-              handleNoArguments(as)
-              handleSend(o, as)
-              beginAsOperatorType(as)
-                handleIdentifier(String, typeReference)
+            handleType(String, ?)
+            handleIdentifier(x, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, String, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(Foo)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, Foo)
+            handleNoType(;)
+            handleIdentifier(Foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(Object)
+              endMetadataStar(0)
+              beginFormalParameter(Object, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
-                handleType(String, ?)
-              endAsOperatorType(as)
-              handleAsOperator(as)
-              handleConditionalExpressionColon()
-              handleLiteralNull(null)
-            endConditionalExpression(?, :)
-            handleAssignmentExpression(=)
-          endInitializer(,)
-          beginInitializer(y)
-            handleIdentifier(y, expression)
-            handleNoTypeArguments(=)
-            handleNoArguments(=)
-            handleSend(y, =)
-            handleLiteralInt(0)
-            handleAssignmentExpression(=)
-          endInitializer(;)
-        endInitializers(2, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, Foo, (, :, ;)
-    endMember()
-    beginMetadataStar(void)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, foo)
-        handleVoidKeyword(void)
-        handleIdentifier(foo, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(x)
-            handleType(dynamic, null)
-            handleIdentifier(x, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        handleNoInitializers()
-        handleAsyncModifier(null, null)
-        beginBlockFunctionBody({)
-          beginIfStatement(if)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(is)
-            handleNoArguments(is)
-            handleSend(x, is)
-            beginIsOperatorType(is)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, ?)
-            endIsOperatorType(is)
-            handleIsOperator(is, null)
-            beginConditionalExpression(?)
-              handleLiteralInt(4)
-              handleConditionalExpressionColon()
-              handleLiteralInt(2)
-              beginBinaryExpression(==)
-              handleLiteralInt(4)
-              endBinaryExpression(==)
-            endConditionalExpression(?, :)
-            handleParenthesizedCondition(()
-            beginThenStatement({)
-              beginBlock({, BlockKind(statement))
-                handleIdentifier(print, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  beginLiteralString("hello")
-                  endLiteralString(0, ))
-                endArguments(1, (, ))
-                handleSend(print, ;)
-                handleExpressionStatement(;)
-              endBlock(1, {, }, BlockKind(statement))
-            endThenStatement(})
-          endIfStatement(if, null)
-        endBlockFunctionBody(1, {, })
-      endClassMethod(null, void, (, null, })
-    endMember()
-    beginMetadataStar(void)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, bar)
-        handleVoidKeyword(void)
-        handleIdentifier(bar, methodDeclaration)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-          beginMetadataStar(dynamic)
-          endMetadataStar(0)
-          beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
-            handleIdentifier(dynamic, typeReference)
-            handleNoTypeArguments(x)
-            handleType(dynamic, null)
-            handleIdentifier(x, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-        endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-        handleNoInitializers()
-        handleAsyncModifier(null, null)
-        beginBlockFunctionBody({)
-          beginIfStatement(if)
-            handleIdentifier(x, expression)
-            handleNoTypeArguments(is)
-            handleNoArguments(is)
-            handleSend(x, is)
-            beginIsOperatorType(is)
-              handleIdentifier(String, typeReference)
-              handleNoTypeArguments(?)
-              handleType(String, null)
-            endIsOperatorType(is)
-            handleIsOperator(is, null)
-            beginConditionalExpression(?)
-              handleLiteralInt(4)
-              handleConditionalExpressionColon()
-              handleLiteralInt(2)
-              beginBinaryExpression(==)
-              handleLiteralInt(4)
-              endBinaryExpression(==)
-            endConditionalExpression(?, :)
-            handleParenthesizedCondition(()
-            beginThenStatement({)
-              beginBlock({, BlockKind(statement))
-                handleIdentifier(print, expression)
-                handleNoTypeArguments(()
-                beginArguments(()
-                  beginLiteralString("hello")
-                  endLiteralString(0, ))
-                endArguments(1, (, ))
-                handleSend(print, ;)
-                handleExpressionStatement(;)
-              endBlock(1, {, }, BlockKind(statement))
-            endThenStatement(})
-          endIfStatement(if, null)
-        endBlockFunctionBody(1, {, })
-      endClassMethod(null, void, (, null, })
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 5, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+                handleType(Object, ?)
+                handleIdentifier(o, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, =)
+                handleIdentifier(o, expression)
+                handleNoTypeArguments(!=)
+                handleNoArguments(!=)
+                handleSend(o, !=)
+                beginBinaryExpression(!=)
+                  handleLiteralNull(null)
+                endBinaryExpression(!=)
+                beginConditionalExpression(?)
+                  handleIdentifier(o, expression)
+                  handleNoTypeArguments(as)
+                  handleNoArguments(as)
+                  handleSend(o, as)
+                  beginAsOperatorType(as)
+                    handleIdentifier(String, typeReference)
+                    handleNoTypeArguments(?)
+                    handleType(String, ?)
+                  endAsOperatorType(as)
+                  handleAsOperator(as)
+                  handleConditionalExpressionColon()
+                  handleLiteralNull(null)
+                endConditionalExpression(?, :)
+                handleAssignmentExpression(=)
+              endInitializer(,)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, Foo, (, :, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, foo)
+            handleVoidKeyword(void)
+            handleIdentifier(foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(x)
+                handleType(dynamic, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(x, is)
+                beginIsOperatorType(is)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, ?)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                beginConditionalExpression(?)
+                  handleLiteralInt(4)
+                  handleConditionalExpressionColon()
+                  handleLiteralInt(2)
+                  beginBinaryExpression(==)
+                    handleLiteralInt(4)
+                  endBinaryExpression(==)
+                endConditionalExpression(?, :)
+                handleParenthesizedCondition(()
+                beginThenStatement({)
+                  beginBlock({, BlockKind(statement))
+                    handleIdentifier(print, expression)
+                    handleNoTypeArguments(()
+                    beginArguments(()
+                      beginLiteralString("hello")
+                      endLiteralString(0, ))
+                    endArguments(1, (, ))
+                    handleSend(print, ;)
+                    handleExpressionStatement(;)
+                  endBlock(1, {, }, BlockKind(statement))
+                endThenStatement(})
+              endIfStatement(if, null)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, bar)
+            handleVoidKeyword(void)
+            handleIdentifier(bar, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments(x)
+                handleType(dynamic, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(x, is)
+                beginIsOperatorType(is)
+                  handleIdentifier(String, typeReference)
+                  handleNoTypeArguments(?)
+                  handleType(String, null)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                beginConditionalExpression(?)
+                  handleLiteralInt(4)
+                  handleConditionalExpressionColon()
+                  handleLiteralInt(2)
+                  beginBinaryExpression(==)
+                    handleLiteralInt(4)
+                  endBinaryExpression(==)
+                endConditionalExpression(?, :)
+                handleParenthesizedCondition(()
+                beginThenStatement({)
+                  beginBlock({, BlockKind(statement))
+                    handleIdentifier(print, expression)
+                    handleNoTypeArguments(()
+                    beginArguments(()
+                      beginLiteralString("hello")
+                      endLiteralString(0, ))
+                    endArguments(1, (, ))
+                    handleSend(print, ;)
+                    handleExpressionStatement(;)
+                  endBlock(1, {, }, BlockKind(statement))
+                endThenStatement(})
+              endIfStatement(if, null)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(1, )
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 4a96eb21..1246230 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
@@ -33,6 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields({)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -49,6 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
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 e2450db..8553682 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -2,145 +2,147 @@
   beginMetadataStar(bool)
   endMetadataStar(0)
   beginTopLevelMember(bool)
-    handleIdentifier(bool, typeReference)
-    handleNoTypeArguments(x)
-    handleType(bool, null)
-    handleIdentifier(x, topLevelVariableDeclaration)
-    handleNoFieldInitializer(;)
-  endTopLevelFields(null, null, null, null, null, 1, bool, ;)
-endTopLevelDeclaration(bool)
-beginMetadataStar(bool)
-endMetadataStar(0)
-beginTopLevelMember(bool)
-  handleIdentifier(bool, typeReference)
-  handleNoTypeArguments(x)
-  handleType(bool, null)
-  handleIdentifier(x, topLevelVariableDeclaration)
-  handleNoFieldInitializer(;)
-endTopLevelFields(null, null, null, null, null, 1, bool, ;)
-endTopLevelDeclaration(errors)
-beginMetadataStar(errors)
-endMetadataStar(0)
-beginTopLevelMember(errors)
-beginTopLevelMethod(;, null)
-  handleNoType(;)
-  handleIdentifier(errors, topLevelFunctionDeclaration)
-  handleNoTypeVariables(()
-  beginFormalParameters((, MemberKind.TopLevelMethod)
-  endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-  handleAsyncModifier(null, null)
-  beginBlockFunctionBody({)
-    handleIdentifier(print, expression)
-    handleNoTypeArguments(()
-    beginArguments(()
-      handleIdentifier(x, expression)
-      handleNoTypeArguments())
-      handleNoArguments())
-      handleSend(x, ))
-    endArguments(1, (, ))
-    handleSend(print, ;)
-    handleExpressionStatement(;)
-    handleIdentifier(print, expression)
-    handleNoTypeArguments(()
-    beginArguments(()
-      handleIdentifier(x, expression)
-      handleNoTypeArguments(!)
-      handleNoArguments(!)
-      handleSend(x, !)
-      handleNonNullAssertExpression(!)
-    endArguments(1, (, ))
-    handleSend(print, ;)
-    handleExpressionStatement(;)
-    handleIdentifier(print, expression)
-    handleNoTypeArguments(()
-    beginArguments(()
-      handleIdentifier(x, expression)
-      handleNoTypeArguments())
-      handleNoArguments())
-      handleSend(x, ))
-      handleUnaryPrefixExpression(!)
-    endArguments(1, (, ))
-    handleSend(print, ;)
-    handleExpressionStatement(;)
-  endBlockFunctionBody(3, {, })
-endTopLevelMethod(errors, null, })
-endTopLevelDeclaration(class)
-beginMetadataStar(class)
-endMetadataStar(0)
-beginClassOrNamedMixinApplicationPrelude(class)
-handleIdentifier(C, classOrMixinDeclaration)
-handleNoTypeVariables({)
-beginClassDeclaration(class, null, C)
-  handleNoType(C)
-  handleClassExtends(null, 1)
-  handleClassNoWithClause()
-  handleClassOrMixinImplements(null, 0)
-  handleClassHeader(class, class, null)
-  beginClassOrMixinBody(DeclarationKind.Class, {)
-    beginMetadataStar(C)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, C)
-        handleNoType({)
-        handleIdentifier(C, methodDeclaration)
-        handleIdentifier(c0, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-        endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(super)
-            handleSuperExpression(super, expression)
-            handleNoTypeArguments(()
-            beginArguments(()
-            endArguments(0, (, ))
-            handleSend(super, ;)
-          endInitializer(;)
-        endInitializers(1, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, C, (, :, ;)
-    endMember()
-    beginMetadataStar(C)
-    endMetadataStar(0)
-    beginMember()
-      beginMethod(null, null, null, null, null, C)
-        handleNoType(;)
-        handleIdentifier(C, methodDeclaration)
-        handleIdentifier(c1, methodDeclarationContinuation)
-        handleQualified(.)
-        handleNoTypeVariables(()
-        beginFormalParameters((, MemberKind.NonStaticMethod)
-        endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
-        beginInitializers(:)
-          beginInitializer(super)
-            handleSuperExpression(super, expression)
-            handleNoTypeArguments(()
-            beginArguments(()
-            endArguments(0, (, ))
-            handleSend(super, !)
-            handleNonNullAssertExpression(!)
-          endInitializer(;)
-        endInitializers(1, :, ;)
-        handleAsyncModifier(null, null)
-        handleEmptyFunctionBody(;)
-      endClassConstructor(null, C, (, :, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration(main)
-beginMetadataStar(main)
-endMetadataStar(0)
-beginTopLevelMember(main)
-beginTopLevelMethod(}, null)
-  handleNoType(})
-  handleIdentifier(main, topLevelFunctionDeclaration)
-  handleNoTypeVariables(()
-  beginFormalParameters((, MemberKind.TopLevelMethod)
-  endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
-  handleAsyncModifier(null, null)
-  beginBlockFunctionBody({)
-  endBlockFunctionBody(0, {, })
-endTopLevelMethod(main, null, })
-endTopLevelDeclaration()
+    beginFields()
+      handleIdentifier(bool, typeReference)
+      handleNoTypeArguments(x)
+      handleType(bool, null)
+      handleIdentifier(x, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, bool, ;)
+  endTopLevelDeclaration(bool)
+  beginMetadataStar(bool)
+  endMetadataStar(0)
+  beginTopLevelMember(bool)
+    beginFields(;)
+      handleIdentifier(bool, typeReference)
+      handleNoTypeArguments(x)
+      handleType(bool, null)
+      handleIdentifier(x, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, bool, ;)
+  endTopLevelDeclaration(errors)
+  beginMetadataStar(errors)
+  endMetadataStar(0)
+  beginTopLevelMember(errors)
+    beginTopLevelMethod(;, null)
+      handleNoType(;)
+      handleIdentifier(errors, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(x, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(!)
+          handleNoArguments(!)
+          handleSend(x, !)
+          handleNonNullAssertExpression(!)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(x, ))
+          handleUnaryPrefixExpression(!)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(errors, null, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(c0, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                endArguments(0, (, ))
+                handleSend(super, ;)
+              endInitializer(;)
+            endInitializers(1, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(null, null, null, null, null, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(c1, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                endArguments(0, (, ))
+                handleSend(super, !)
+                handleNonNullAssertExpression(!)
+              endInitializer(;)
+            endInitializers(1, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
 endCompilationUnit(5, )
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 bb28e5b..80be6b7 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
@@ -9,6 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(bool)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
+        listener: beginFields()
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
@@ -25,6 +26,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(bool)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(;)
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
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 c9fe677..5447d9d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -39,7 +39,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(x, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -60,7 +60,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(y, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -120,7 +120,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(x, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -141,7 +141,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(y, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -201,7 +201,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(x, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -223,7 +223,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(y, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -283,7 +283,7 @@
             handleNoTypeArguments(=)
             handleNoArguments(=)
             handleSend(x, =)
-            endBinaryExpression(..)
+            handleEndingBinaryExpression(..)
             handleIdentifier(json, expression)
             handleNoTypeArguments([)
             handleNoArguments([)
@@ -318,24 +318,26 @@
         beginMetadataStar(List)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(List, typeReference)
-          handleNoTypeArguments(?)
-          handleType(List, ?)
-          handleIdentifier(x, fieldDeclaration)
-          handleNoFieldInitializer(;)
-        endClassFields(null, null, null, null, null, null, 1, List, ;)
-      endMember()
-      beginMetadataStar(int)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(int, typeReference)
-        handleNoTypeArguments(?)
-        handleType(int, ?)
-        handleIdentifier(y, fieldDeclaration)
-        handleNoFieldInitializer(;)
-      endClassFields(null, null, null, null, null, null, 1, int, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(List, typeReference)
+            handleNoTypeArguments(?)
+            handleType(List, ?)
+            handleIdentifier(x, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, List, ;)
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(?)
+            handleType(int, ?)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(5, )
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 c196fb5..b50f901 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
@@ -77,7 +77,7 @@
                         parseArgumentsOpt(x)
                           listener: handleNoArguments(=)
                         listener: handleSend(x, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(x, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -121,7 +121,7 @@
                         parseArgumentsOpt(y)
                           listener: handleNoArguments(=)
                         listener: handleSend(y, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -238,7 +238,7 @@
                         parseArgumentsOpt(x)
                           listener: handleNoArguments(=)
                         listener: handleSend(x, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(x, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -282,7 +282,7 @@
                         parseArgumentsOpt(y)
                           listener: handleNoArguments(=)
                         listener: handleSend(y, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -399,7 +399,7 @@
                         parseArgumentsOpt(x)
                           listener: handleNoArguments(=)
                         listener: handleSend(x, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(x, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -453,7 +453,7 @@
                         parseArgumentsOpt(y)
                           listener: handleNoArguments(=)
                         listener: handleSend(y, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -570,7 +570,7 @@
                         parseArgumentsOpt(x)
                           listener: handleNoArguments(=)
                         listener: handleSend(x, =)
-                      listener: endBinaryExpression(..)
+                      listener: handleEndingBinaryExpression(..)
                       parseArgumentOrIndexStar(x, Instance of 'NoTypeParamOrArg', false)
                       parseExpressionWithoutCascade(=)
                         parsePrecedenceExpression(=, 1, false)
@@ -643,6 +643,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Order, false)
+                listener: beginFields({)
                 listener: handleIdentifier(List, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(List, ?)
@@ -659,6 +660,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleNullableType', y, DeclarationKind.Class, Order, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(int, ?)
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 a13f528..4db9fb9 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -46,7 +46,7 @@
               handleNoTypeArguments(;)
               handleNoArguments(;)
               handleSend(late, ;)
-              endBinaryExpression(.)
+              handleEndingBinaryExpression(.)
             endVariableInitializer(=)
           endInitializedIdentifier(bar)
         endVariablesDeclaration(1, ;)
@@ -76,7 +76,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(late, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
         beginNewExpression(new)
           handleIdentifier(Y, constructorReference)
@@ -91,7 +91,7 @@
         handleNoTypeArguments(;)
         handleNoArguments(;)
         handleSend(late, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
     endTopLevelMethod(main, null, })
@@ -171,16 +171,17 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(late)
-          handleType(int, null)
-          handleIdentifier(late, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
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 5eea6a8..36d7e57 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
@@ -107,7 +107,7 @@
                                 parseArgumentsOpt(late)
                                   listener: handleNoArguments(;)
                                 listener: handleSend(late, ;)
-                          listener: endBinaryExpression(.)
+                          listener: handleEndingBinaryExpression(.)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(bar)
                   ensureSemicolon(late)
@@ -204,7 +204,7 @@
                                     listener: beginArguments(()
                                     listener: endArguments(0, (, ))
                               listener: handleSend(late, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon())
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, new)
@@ -244,7 +244,7 @@
                               parseArgumentsOpt(late)
                                 listener: handleNoArguments(;)
                               listener: handleSend(late, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon(late)
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, })
@@ -433,6 +433,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
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 c8f987c..d7696f5 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -46,7 +46,7 @@
               handleNoTypeArguments(;)
               handleNoArguments(;)
               handleSend(late, ;)
-              endBinaryExpression(.)
+              handleEndingBinaryExpression(.)
             endVariableInitializer(=)
           endInitializedIdentifier(bar)
         endVariablesDeclaration(1, ;)
@@ -76,7 +76,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(late, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
         beginNewExpression(new)
           handleIdentifier(Y, constructorReference)
@@ -91,7 +91,7 @@
         handleNoTypeArguments(;)
         handleNoArguments(;)
         handleSend(late, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -189,16 +189,17 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(late)
-          handleType(int, null)
-          handleIdentifier(late, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
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 8e0a141..5395458 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
@@ -107,7 +107,7 @@
                                 parseArgumentsOpt(late)
                                   listener: handleNoArguments(;)
                                 listener: handleSend(late, ;)
-                          listener: endBinaryExpression(.)
+                          listener: handleEndingBinaryExpression(.)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(bar)
                   ensureSemicolon(late)
@@ -204,7 +204,7 @@
                                     listener: beginArguments(()
                                     listener: endArguments(0, (, ))
                               listener: handleSend(late, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon())
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, new)
@@ -244,7 +244,7 @@
                               parseArgumentsOpt(late)
                                 listener: handleNoArguments(;)
                               listener: handleSend(late, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon(late)
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, late)
@@ -481,6 +481,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
index 9189542..3b88ac0 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
@@ -18,13 +18,13 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleIdentifier(baz, expressionContinuation)
         handleNoTypeArguments([)
         handleNoArguments([)
         handleSend(baz, [)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
         handleNoArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
index d874387..bdbfb93 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
@@ -53,7 +53,7 @@
                             parseArgumentsOpt(bar)
                               listener: handleNoArguments(!)
                             listener: handleSend(bar, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parsePrimary(., expressionContinuation)
                         parseSendOrFunctionLiteral(., expressionContinuation)
@@ -64,7 +64,7 @@
                             parseArgumentsOpt(baz)
                               listener: handleNoArguments([)
                             listener: handleSend(baz, [)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       parseArgumentOrIndexStar(baz, Instance of 'NoTypeParamOrArg', false)
                         parseExpression([)
                           parsePrecedenceExpression([, 1, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
index 25b8a57..27a18c6 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
@@ -18,14 +18,14 @@
         handleNoTypeArguments())
         handleNoArguments())
         handleSend(bar, ))
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleParenthesizedExpression(()
         handleNonNullAssertExpression(!)
         handleIdentifier(baz, expressionContinuation)
         handleNoTypeArguments([)
         handleNoArguments([)
         handleSend(baz, [)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
         handleNoArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
index ab2b8a7..34634cc 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
@@ -62,7 +62,7 @@
                                               parseArgumentsOpt(bar)
                                                 listener: handleNoArguments())
                                               listener: handleSend(bar, ))
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                     ensureCloseParen(bar, ()
                                 listener: handleParenthesizedExpression(()
                         listener: handleNonNullAssertExpression(!)
@@ -75,7 +75,7 @@
                               parseArgumentsOpt(baz)
                                 listener: handleNoArguments([)
                               listener: handleSend(baz, [)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                         parseArgumentOrIndexStar(baz, Instance of 'NoTypeParamOrArg', false)
                           parseExpression([)
                             parsePrecedenceExpression([, 1, true)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
index 67ac636..5050179 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
@@ -18,7 +18,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
index 927470a..350b5b0 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
@@ -53,7 +53,7 @@
                             parseArgumentsOpt(bar)
                               listener: handleNoArguments(!)
                             listener: handleSend(bar, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseExpression([)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
index c560018..096a6b9 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
@@ -18,7 +18,7 @@
         handleNoTypeArguments())
         handleNoArguments())
         handleSend(bar, ))
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleParenthesizedExpression(()
         handleNonNullAssertExpression(!)
         handleIdentifier(arg, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
index eac1369..1ce8a71 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
@@ -62,7 +62,7 @@
                                               parseArgumentsOpt(bar)
                                                 listener: handleNoArguments())
                                               listener: handleSend(bar, ))
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                     ensureCloseParen(bar, ()
                                 listener: handleParenthesizedExpression(()
                         listener: handleNonNullAssertExpression(!)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
index cba8456..e58d1a7 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
@@ -19,7 +19,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
index 728bae3..c995f0b 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
@@ -54,7 +54,7 @@
                             parseArgumentsOpt(bar)
                               listener: handleNoArguments(!)
                             listener: handleSend(bar, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseExpression([)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
index 033a883..547ae08 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
@@ -20,7 +20,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleParenthesizedExpression(()
         handleIdentifier(arg, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
index d1e5df3..4aff390 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
@@ -73,7 +73,7 @@
                                               parseArgumentsOpt(bar)
                                                 listener: handleNoArguments(!)
                                               listener: handleSend(bar, !)
-                                        listener: endBinaryExpression(.)
+                                        listener: handleEndingBinaryExpression(.)
                                         listener: handleNonNullAssertExpression(!)
                                     ensureCloseParen(!, ()
                                 listener: handleParenthesizedExpression(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
index 76089e7..24c1311 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
@@ -18,7 +18,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
index 211e2d3..d32485b 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
@@ -53,7 +53,7 @@
                             parseArgumentsOpt(bar)
                               listener: handleNoArguments(!)
                             listener: handleSend(bar, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseExpression([)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
index 7220e37..3683c7e 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
@@ -18,7 +18,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleParenthesizedExpression(()
         handleIdentifier(arg, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
index a61f951..381b7e2 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
@@ -78,7 +78,7 @@
                                                                               parseArgumentsOpt(bar)
                                                                                 listener: handleNoArguments(!)
                                                                               listener: handleSend(bar, !)
-                                                                        listener: endBinaryExpression(.)
+                                                                        listener: handleEndingBinaryExpression(.)
                                                                         listener: handleNonNullAssertExpression(!)
                                                                     ensureCloseParen(!, ()
                                                                 listener: handleParenthesizedExpression(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
index e3a2c5e..2cec617 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
@@ -19,7 +19,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleIdentifier(arg, expression)
         handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
index 219e830..d994cdc 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
@@ -54,7 +54,7 @@
                             parseArgumentsOpt(bar)
                               listener: handleNoArguments(!)
                             listener: handleSend(bar, !)
-                      listener: endBinaryExpression(.)
+                      listener: handleEndingBinaryExpression(.)
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, Instance of 'NoTypeParamOrArg', false)
                         parseExpression([)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
index cfa73d5..013e4c7 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
@@ -20,7 +20,7 @@
         handleNoTypeArguments(!)
         handleNoArguments(!)
         handleSend(bar, !)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleNonNullAssertExpression(!)
         handleParenthesizedExpression(()
         handleIdentifier(arg, expression)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
index 3e57f89..748dbfd 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
@@ -89,7 +89,7 @@
                                                                               parseArgumentsOpt(bar)
                                                                                 listener: handleNoArguments(!)
                                                                               listener: handleSend(bar, !)
-                                                                        listener: endBinaryExpression(.)
+                                                                        listener: handleEndingBinaryExpression(.)
                                                                         listener: handleNonNullAssertExpression(!)
                                                                     ensureCloseParen(!, ()
                                                                 listener: handleParenthesizedExpression(()
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 939cdb7..dda2592 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
@@ -105,7 +105,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(0)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleExpressionStatement(;)
         handleIdentifier(c1, expression)
         handleNoTypeArguments(?.)
@@ -114,7 +114,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(0)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleLiteralInt(1)
         handleAssignmentExpression(=)
         handleExpressionStatement(;)
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 89f7fa9..bf3ff98 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
@@ -214,7 +214,7 @@
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(0)
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                   ensureSemicolon(])
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, c1)
@@ -245,7 +245,7 @@
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(0)
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                       parsePrecedenceExpression(=, 1, true)
                         parseUnaryExpression(=, true)
                           parsePrimary(=, expression)
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 2258220..ec54bee 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -46,7 +46,7 @@
               handleNoTypeArguments(;)
               handleNoArguments(;)
               handleSend(required, ;)
-              endBinaryExpression(.)
+              handleEndingBinaryExpression(.)
             endVariableInitializer(=)
           endInitializedIdentifier(bar)
         endVariablesDeclaration(1, ;)
@@ -76,7 +76,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(required, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
         beginNewExpression(new)
           handleIdentifier(Y, constructorReference)
@@ -91,7 +91,7 @@
         handleNoTypeArguments(;)
         handleNoArguments(;)
         handleSend(required, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
     endTopLevelMethod(main, null, })
@@ -171,16 +171,17 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(required)
-          handleType(int, null)
-          handleIdentifier(required, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
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 d9fa92e..98b6c31 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
@@ -107,7 +107,7 @@
                                 parseArgumentsOpt(required)
                                   listener: handleNoArguments(;)
                                 listener: handleSend(required, ;)
-                          listener: endBinaryExpression(.)
+                          listener: handleEndingBinaryExpression(.)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(bar)
                   ensureSemicolon(required)
@@ -204,7 +204,7 @@
                                     listener: beginArguments(()
                                     listener: endArguments(0, (, ))
                               listener: handleSend(required, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon())
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, new)
@@ -244,7 +244,7 @@
                               parseArgumentsOpt(required)
                                 listener: handleNoArguments(;)
                               listener: handleSend(required, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon(required)
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, })
@@ -433,6 +433,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
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 31a989f..7ef46c8 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -46,7 +46,7 @@
               handleNoTypeArguments(;)
               handleNoArguments(;)
               handleSend(required, ;)
-              endBinaryExpression(.)
+              handleEndingBinaryExpression(.)
             endVariableInitializer(=)
           endInitializedIdentifier(bar)
         endVariablesDeclaration(1, ;)
@@ -76,7 +76,7 @@
         beginArguments(()
         endArguments(0, (, ))
         handleSend(required, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
         beginNewExpression(new)
           handleIdentifier(Y, constructorReference)
@@ -91,7 +91,7 @@
         handleNoTypeArguments(;)
         handleNoArguments(;)
         handleSend(required, ;)
-        endBinaryExpression(.)
+        handleEndingBinaryExpression(.)
         handleExpressionStatement(;)
       endBlockFunctionBody(6, {, })
     endTopLevelMethod(main, null, })
@@ -182,16 +182,17 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(int, typeReference)
-          handleNoTypeArguments(required)
-          handleType(int, null)
-          handleIdentifier(required, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleLiteralInt(42)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, int, ;)
-      endMember()
-    endClassOrMixinBody(DeclarationKind.Class, 1, {, })
-  endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(42)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(4, )
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 3acf91c..48cd79f 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
@@ -107,7 +107,7 @@
                                 parseArgumentsOpt(required)
                                   listener: handleNoArguments(;)
                                 listener: handleSend(required, ;)
-                          listener: endBinaryExpression(.)
+                          listener: handleEndingBinaryExpression(.)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(bar)
                   ensureSemicolon(required)
@@ -204,7 +204,7 @@
                                     listener: beginArguments(()
                                     listener: endArguments(0, (, ))
                               listener: handleSend(required, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon())
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, new)
@@ -244,7 +244,7 @@
                               parseArgumentsOpt(required)
                                 listener: handleNoArguments(;)
                               listener: handleSend(required, ;)
-                        listener: endBinaryExpression(.)
+                        listener: handleEndingBinaryExpression(.)
                     ensureSemicolon(required)
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, })
@@ -449,6 +449,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
+                listener: beginFields({)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
index 1b5dade..00c203f 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
@@ -26,7 +26,7 @@
         handleNoTypeArguments([)
         handleLiteralInt(1)
         handleLiteralList(1, [, null, ])
-        endBinaryExpression(?.)
+        handleEndingBinaryExpression(?.)
         handleLiteralInt(42)
         handleAssignmentExpression(=)
         handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
index 4fc4b624..410d504 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
@@ -73,7 +73,7 @@
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(1)
                           listener: handleLiteralList(1, [, null, ])
-                      listener: endBinaryExpression(?.)
+                      listener: handleEndingBinaryExpression(?.)
                       parsePrecedenceExpression(=, 1, true)
                         parseUnaryExpression(=, true)
                           parsePrimary(=, expression)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
index 51ede43..537e3e4 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
@@ -79,7 +79,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(toString, :)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleConditionalExpressionColon()
           handleIdentifier(c, expression)
           handleNoTypeArguments(;)
@@ -103,7 +103,7 @@
           beginArguments(()
           endArguments(0, (, ))
           handleSend(toString, :)
-          endBinaryExpression(.)
+          handleEndingBinaryExpression(.)
           handleConditionalExpressionColon()
           handleIdentifier(c, expression)
           handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
index caa1810..433eec8 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
@@ -297,7 +297,7 @@
                                         listener: beginArguments(()
                                         listener: endArguments(0, (, ))
                                   listener: handleSend(toString, :)
-                            listener: endBinaryExpression(.)
+                            listener: handleEndingBinaryExpression(.)
                         ensureColon())
                         listener: handleConditionalExpressionColon()
                         parseExpressionWithoutCascade(:)
@@ -397,7 +397,7 @@
                                         listener: beginArguments(()
                                         listener: endArguments(0, (, ))
                                   listener: handleSend(toString, :)
-                            listener: endBinaryExpression(.)
+                            listener: handleEndingBinaryExpression(.)
                         ensureColon())
                         listener: handleConditionalExpressionColon()
                         parseExpressionWithoutCascade(:)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
index b24106f..7570ccb 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(!=)
           handleSend(a, !=)
           beginBinaryExpression(!=)
-          handleLiteralNull(null)
+            handleLiteralNull(null)
           endBinaryExpression(!=)
           beginConditionalExpression(?)
             handleNoTypeArguments([)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
index 00b2f6a..5a22804 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
@@ -2,83 +2,84 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    handleNoType(var)
-    handleIdentifier(a, topLevelVariableDeclaration)
-    handleNoFieldInitializer(,)
-    handleIdentifier(b, topLevelVariableDeclaration)
-    handleNoFieldInitializer(,)
-    handleIdentifier(c, topLevelVariableDeclaration)
-    handleNoFieldInitializer(,)
-    handleIdentifier(d, topLevelVariableDeclaration)
-    handleNoFieldInitializer(,)
-    handleIdentifier(e, topLevelVariableDeclaration)
-    handleNoFieldInitializer(;)
-  endTopLevelFields(null, null, null, null, var, 5, var, ;)
-endTopLevelDeclaration(List)
-beginMetadataStar(List)
-endMetadataStar(0)
-beginTopLevelMember(List)
-  beginTopLevelMethod(;, null)
-    handleIdentifier(List, typeReference)
-    handleNoTypeArguments(get)
-    handleType(List, null)
-    handleIdentifier(f, topLevelFunctionDeclaration)
-    handleNoTypeVariables(=>)
-    handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
-    handleAsyncModifier(null, null)
-    handleIdentifier(a, expression)
-    handleNoTypeArguments(..)
-    handleNoArguments(..)
-    handleSend(a, ..)
-    beginCascade(..)
-      handleIdentifier(addAll, expressionContinuation)
-      handleNoTypeArguments(()
-      beginArguments(()
-        handleIdentifier(b, expression)
-        handleNoTypeArguments(&&)
-        handleNoArguments(&&)
-        handleSend(b, &&)
-        handleUnaryPrefixExpression(!)
-        beginBinaryExpression(&&)
-        handleIdentifier(c, expression)
-        handleNoTypeArguments([)
-        handleNoArguments([)
-        handleSend(c, [)
-        handleIdentifier(d, expression)
-        handleNoTypeArguments(])
-        handleNoArguments(])
-        handleSend(d, ])
-        handleIndexedExpression(null, [, ])
-        endBinaryExpression(&&)
-        beginConditionalExpression(?)
-          handleNoTypeArguments([)
-          handleIdentifier(a, expression)
-          handleNoTypeArguments(,)
-          handleNoArguments(,)
-          handleSend(a, ,)
-          handleIdentifier(e, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-            handleIdentifier(f, expression)
-            handleNoTypeArguments())
-            handleNoArguments())
-            handleSend(f, ))
-          endArguments(1, (, ))
-          handleSend(e, ])
-          handleLiteralList(2, [, null, ])
-          handleConditionalExpressionColon()
-          handleNoTypeArguments([)
-          handleIdentifier(a, expression)
-          handleNoTypeArguments(])
-          handleNoArguments(])
-          handleSend(a, ])
-          handleLiteralList(1, [, null, ])
-        endConditionalExpression(?, :)
-      endArguments(1, (, ))
-      handleSend(addAll, ;)
-      endBinaryExpression(..)
-    endCascade()
-    handleExpressionFunctionBody(=>, ;)
-  endTopLevelMethod(List, get, ;)
-endTopLevelDeclaration()
+    beginFields()
+      handleNoType(var)
+      handleIdentifier(a, topLevelVariableDeclaration)
+      handleNoFieldInitializer(,)
+      handleIdentifier(b, topLevelVariableDeclaration)
+      handleNoFieldInitializer(,)
+      handleIdentifier(c, topLevelVariableDeclaration)
+      handleNoFieldInitializer(,)
+      handleIdentifier(d, topLevelVariableDeclaration)
+      handleNoFieldInitializer(,)
+      handleIdentifier(e, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, var, 5, var, ;)
+  endTopLevelDeclaration(List)
+  beginMetadataStar(List)
+  endMetadataStar(0)
+  beginTopLevelMember(List)
+    beginTopLevelMethod(;, null)
+      handleIdentifier(List, typeReference)
+      handleNoTypeArguments(get)
+      handleType(List, null)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(=>)
+      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleIdentifier(a, expression)
+      handleNoTypeArguments(..)
+      handleNoArguments(..)
+      handleSend(a, ..)
+      beginCascade(..)
+        handleIdentifier(addAll, expressionContinuation)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(&&)
+          handleNoArguments(&&)
+          handleSend(b, &&)
+          handleUnaryPrefixExpression(!)
+          beginBinaryExpression(&&)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments([)
+            handleNoArguments([)
+            handleSend(c, [)
+            handleIdentifier(d, expression)
+            handleNoTypeArguments(])
+            handleNoArguments(])
+            handleSend(d, ])
+            handleIndexedExpression(null, [, ])
+          endBinaryExpression(&&)
+          beginConditionalExpression(?)
+            handleNoTypeArguments([)
+            handleIdentifier(a, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(a, ,)
+            handleIdentifier(e, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+              handleIdentifier(f, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(f, ))
+            endArguments(1, (, ))
+            handleSend(e, ])
+            handleLiteralList(2, [, null, ])
+            handleConditionalExpressionColon()
+            handleNoTypeArguments([)
+            handleIdentifier(a, expression)
+            handleNoTypeArguments(])
+            handleNoArguments(])
+            handleSend(a, ])
+            handleLiteralList(1, [, null, ])
+          endConditionalExpression(?, :)
+        endArguments(1, (, ))
+        handleSend(addAll, ;)
+        handleEndingBinaryExpression(..)
+      endCascade()
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(List, get, ;)
+  endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
index 8be1d99..ffb0a66 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
@@ -9,6 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
       parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields()
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
@@ -329,7 +330,7 @@
                                 listener: endConditionalExpression(?, :)
                           listener: endArguments(1, (, ))
                     listener: handleSend(addAll, ;)
-                  listener: endBinaryExpression(..)
+                  listener: handleEndingBinaryExpression(..)
                   parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                   listener: endCascade()
             ensureSemicolon())
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 da71b09..e1e42f2 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
@@ -76,36 +76,38 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(late, typeReference)
-          handleNoTypeArguments(l)
-          handleType(late, null)
-          handleIdentifier(l, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleIdentifier(late, expression)
-            handleNoTypeArguments(()
-            beginArguments(()
-            endArguments(0, (, ))
-            handleSend(late, ;)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, late, ;)
-      endMember()
-      beginMetadataStar(required)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(required, typeReference)
-        handleNoTypeArguments(r)
-        handleType(required, null)
-        handleIdentifier(r, fieldDeclaration)
-        beginFieldInitializer(=)
-          handleIdentifier(required, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-          endArguments(0, (, ))
-          handleSend(required, ;)
-        endFieldInitializer(=, ;)
-      endClassFields(null, null, null, null, null, null, 1, required, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(late, typeReference)
+            handleNoTypeArguments(l)
+            handleType(late, null)
+            handleIdentifier(l, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleIdentifier(late, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(late, ;)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, late, ;)
+        endMember()
+        beginMetadataStar(required)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(required, typeReference)
+            handleNoTypeArguments(r)
+            handleType(required, null)
+            handleIdentifier(r, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleIdentifier(required, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(required, ;)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, required, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(3, )
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 00d7363..7c38bab 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
@@ -163,6 +163,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
+                listener: beginFields({)
                 listener: handleIdentifier(late, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(late, null)
@@ -196,6 +197,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(required, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(required, null)
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 6a706d5..fd1c433 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
@@ -76,36 +76,38 @@
         beginMetadataStar(Xlate)
         endMetadataStar(0)
         beginMember()
-          handleIdentifier(Xlate, typeReference)
-          handleNoTypeArguments(l)
-          handleType(Xlate, null)
-          handleIdentifier(l, fieldDeclaration)
-          beginFieldInitializer(=)
-            handleIdentifier(Xlate, expression)
-            handleNoTypeArguments(()
-            beginArguments(()
-            endArguments(0, (, ))
-            handleSend(Xlate, ;)
-          endFieldInitializer(=, ;)
-        endClassFields(null, null, null, null, null, null, 1, Xlate, ;)
-      endMember()
-      beginMetadataStar(Xrequired)
-      endMetadataStar(0)
-      beginMember()
-        handleIdentifier(Xrequired, typeReference)
-        handleNoTypeArguments(r)
-        handleType(Xrequired, null)
-        handleIdentifier(r, fieldDeclaration)
-        beginFieldInitializer(=)
-          handleIdentifier(Xrequired, expression)
-          handleNoTypeArguments(()
-          beginArguments(()
-          endArguments(0, (, ))
-          handleSend(Xrequired, ;)
-        endFieldInitializer(=, ;)
-      endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
-    endMember()
-  endClassOrMixinBody(DeclarationKind.Class, 2, {, })
-endClassDeclaration(class, })
-endTopLevelDeclaration()
+          beginFields({)
+            handleIdentifier(Xlate, typeReference)
+            handleNoTypeArguments(l)
+            handleType(Xlate, null)
+            handleIdentifier(l, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleIdentifier(Xlate, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(Xlate, ;)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, Xlate, ;)
+        endMember()
+        beginMetadataStar(Xrequired)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(;)
+            handleIdentifier(Xrequired, typeReference)
+            handleNoTypeArguments(r)
+            handleType(Xrequired, null)
+            handleIdentifier(r, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleIdentifier(Xrequired, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(Xrequired, ;)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
+        endMember()
+      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
 endCompilationUnit(3, )
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 b8149b9..715a0d3 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
@@ -163,6 +163,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
+                listener: beginFields({)
                 listener: handleIdentifier(Xlate, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(Xlate, null)
@@ -196,6 +197,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
+                listener: beginFields(;)
                 listener: handleIdentifier(Xrequired, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(Xrequired, null)
diff --git a/pkg/front_end/parser_testcases/parser_all.status b/pkg/front_end/parser_testcases/parser_all.status
new file mode 100644
index 0000000..e22cfe5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/parser_all.status
@@ -0,0 +1,3 @@
+# Copyright (c) 2019, 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.md file.
diff --git a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
index 1cdea58..8e0033f 100644
--- a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
@@ -206,7 +206,7 @@
         'handleNoArguments )',
         'handleSend a )',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         // nested for (b in c)
         'beginForControlFlow null for',
         'handleIdentifier b expression',
@@ -344,7 +344,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleLiteralInt 2',
         'endIfControlFlow 2',
         'handleLiteralList 1, [, null, ]',
@@ -359,7 +359,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleLiteralInt 2',
         'handleElseControlFlow else',
         'handleLiteralInt 5',
@@ -377,7 +377,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         // nested for (x in y)
         'beginForControlFlow null for',
         'handleIdentifier x expression',
@@ -411,7 +411,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         // nested for (a in b)
         'beginForControlFlow null for',
         'handleIdentifier a expression',
@@ -439,7 +439,7 @@
         'handleNoArguments )',
         'handleSend c )',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         // nested for (d in e)
         'beginForControlFlow null for',
         'handleIdentifier d expression',
@@ -474,7 +474,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleNoTypeArguments [',
         'handleLiteralInt 2',
         'handleLiteralList 1, [, null, ]',
@@ -492,7 +492,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleNoTypeArguments [',
         'handleLiteralInt 2',
         'handleLiteralList 1, [, null, ]',
@@ -772,7 +772,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleLiteralInt 2',
         'handleLiteralInt 3',
         'handleLiteralMapEntry :, ',
@@ -788,7 +788,7 @@
         'beginIfControlFlow if',
         'handleLiteralBool true',
         'handleParenthesizedCondition (',
-        'beginThenControlFlow )',
+        'handleThenControlFlow )',
         'handleNoTypeArguments {',
         'handleLiteralInt 2',
         'handleLiteralInt 3',
@@ -887,8 +887,8 @@
   }
 
   @override
-  void beginThenControlFlow(Token token) {
-    calls.add('beginThenControlFlow $token');
+  void handleThenControlFlow(Token token) {
+    calls.add('handleThenControlFlow $token');
   }
 
   @override
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index db48578..2905b1b 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -162,6 +162,7 @@
 class FolderOptions {
   final Map<ExperimentalFlag, bool> _experimentalFlags;
   final bool forceLateLowering;
+  final bool forceStaticFieldLowering;
   final bool forceNoExplicitGetterCalls;
   final bool nnbdAgnosticMode;
   final String target;
@@ -169,12 +170,14 @@
 
   FolderOptions(this._experimentalFlags,
       {this.forceLateLowering: false,
+      this.forceStaticFieldLowering: false,
       this.forceNoExplicitGetterCalls: false,
       this.nnbdAgnosticMode: false,
       this.target: "vm",
       // can be null
       this.overwriteCurrentSdkVersion})
       : assert(forceLateLowering != null),
+        assert(forceStaticFieldLowering != null),
         assert(forceNoExplicitGetterCalls != null),
         assert(nnbdAgnosticMode != null),
         assert(target != null);
@@ -314,12 +317,14 @@
     FolderOptions folderOptions = _folderOptions[directory.uri];
     if (folderOptions == null) {
       bool forceLateLowering = false;
+      bool forceStaticFieldLowering = false;
       bool forceNoExplicitGetterCalls = false;
       bool nnbdAgnosticMode = false;
       String target = "vm";
       if (directory.uri == baseUri) {
         folderOptions = new FolderOptions({},
             forceLateLowering: forceLateLowering,
+            forceStaticFieldLowering: forceStaticFieldLowering,
             forceNoExplicitGetterCalls: forceNoExplicitGetterCalls,
             nnbdAgnosticMode: nnbdAgnosticMode,
             target: target);
@@ -339,6 +344,8 @@
                   line.substring(overwriteCurrentSdkVersion.length);
             } else if (line.startsWith(Flags.forceLateLowering)) {
               forceLateLowering = true;
+            } else if (line.startsWith(Flags.forceStaticFieldLowering)) {
+              forceStaticFieldLowering = true;
             } else if (line.startsWith(Flags.forceNoExplicitGetterCalls)) {
               forceNoExplicitGetterCalls = true;
             } else if (line.startsWith(Flags.forceNoExplicitGetterCalls)) {
@@ -360,6 +367,7 @@
                   onWarning: (String message) =>
                       throw new ArgumentError(message)),
               forceLateLowering: forceLateLowering,
+              forceStaticFieldLowering: forceStaticFieldLowering,
               forceNoExplicitGetterCalls: forceNoExplicitGetterCalls,
               nnbdAgnosticMode: nnbdAgnosticMode,
               target: target,
@@ -831,6 +839,7 @@
         await context.computeUriTranslator(description);
     TargetFlags targetFlags = new TargetFlags(
       forceLateLoweringForTesting: testOptions.forceLateLowering,
+      forceStaticFieldLoweringForTesting: testOptions.forceStaticFieldLowering,
       forceNoExplicitGetterCallsForTesting:
           testOptions.forceNoExplicitGetterCalls,
       enableNullSafety: !context.weak,
diff --git a/pkg/front_end/test/parser_all_suite.dart b/pkg/front_end/test/parser_all_suite.dart
new file mode 100644
index 0000000..543dbf9
--- /dev/null
+++ b/pkg/front_end/test/parser_all_suite.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2020, 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 'dart:async' show Future;
+
+import 'package:testing/testing.dart' show Chain, ChainContext, runMe;
+
+import 'parser_suite.dart';
+
+main([List<String> arguments = const []]) =>
+    runMe(arguments, createContext, configurationPath: "../testing.json");
+
+Future<ChainContext> createContext(
+    Chain suite, Map<String, String> environment) async {
+  return new ContextChecksOnly(suite.name);
+}
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index f4d996b..5e65244 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -15,6 +15,8 @@
 
 import 'package:front_end/src/fasta/messages.dart' show Message;
 
+import 'package:front_end/src/fasta/util/direct_parser_ast.dart' show getAST;
+
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
     show Parser, lengthOfSpan;
 
@@ -29,6 +31,9 @@
 import 'package:front_end/src/fasta/source/stack_listener_impl.dart'
     show offsetForToken;
 
+import 'package:front_end/src/fasta/util/direct_parser_ast_helper.dart'
+    show DirectParserASTContent;
+
 import 'package:kernel/ast.dart';
 
 import 'package:testing/testing.dart'
@@ -91,16 +96,61 @@
   final List<Step> steps = const <Step>[
     const TokenStep(true, ".scanner.expect"),
     const TokenStep(false, ".parser.expect"),
-    const ListenerStep(),
+    const ListenerStep(true),
     const IntertwinedStep(),
   ];
 
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
+
+  // Override special handling of negative tests.
+  @override
+  Result processTestResult(
+      TestDescription description, Result result, bool last) {
+    return result;
+  }
+}
+
+class ContextChecksOnly extends Context {
+  ContextChecksOnly(String suiteName) : super(suiteName, false, false, false);
+
+  final List<Step> steps = const <Step>[
+    const ListenerStep(false),
+    const DirectParserASTStep(),
+  ];
+
+  final ExpectationSet expectationSet =
+      new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
+
+  // Override special handling of negative tests.
+  @override
+  Result processTestResult(
+      TestDescription description, Result result, bool last) {
+    return result;
+  }
+}
+
+class DirectParserASTStep
+    extends Step<TestDescription, TestDescription, Context> {
+  const DirectParserASTStep();
+  String get name => "DirectParserAST";
+  Future<Result<TestDescription>> run(
+      TestDescription description, Context context) {
+    Uri uri = description.uri;
+    File f = new File.fromUri(uri);
+    List<int> rawBytes = f.readAsBytesSync();
+    DirectParserASTContent ast = getAST(rawBytes);
+    if (ast.what != "CompilationUnit") {
+      throw "Expected a single element for 'CompilationUnit' "
+          "but got ${ast.what}";
+    }
+    return new Future.value(new Result<TestDescription>.pass(description));
+  }
 }
 
 class ListenerStep extends Step<TestDescription, TestDescription, Context> {
-  const ListenerStep();
+  final bool doExpects;
+  const ListenerStep(this.doExpects);
 
   String get name => "listener";
 
@@ -134,8 +184,12 @@
           "${parserTestListener.errors.join("\n\n")}\n\n";
     }
 
-    return context.match<TestDescription>(".expect",
-        "${errors}${parserTestListener.sb}", description.uri, description);
+    if (doExpects) {
+      return context.match<TestDescription>(".expect",
+          "${errors}${parserTestListener.sb}", description.uri, description);
+    } else {
+      return new Future.value(new Result<TestDescription>.pass(description));
+    }
   }
 }
 
@@ -350,6 +404,20 @@
       bool trace, this.annotateLines, this.source, this.shortName)
       : super(trace);
 
+  void doPrint(String s) {
+    super.doPrint(s);
+    if (s.startsWith("beginCompilationUnit(") ||
+        s.startsWith("endCompilationUnit(")) {
+      if (indent != 0) {
+        throw "Incorrect indents: '$s' (indent = $indent).\n\n${sb.toString()}";
+      }
+    } else {
+      if (indent <= 0) {
+        throw "Incorrect indents: '$s' (indent = $indent).\n\n${sb.toString()}";
+      }
+    }
+  }
+
   void seen(Token token) {
     if (!annotateLines) return;
     if (token == null) return;
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index d9e3e7e..63a1210 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -101,19 +101,6 @@
         '$errorCode)');
   }
 
-  void endInvalidYieldStatement(Token beginToken, Token starToken,
-      Token endToken, MessageCode errorCode) {
-    indent--;
-    seen(beginToken);
-    seen(starToken);
-    seen(endToken);
-    doPrint('endInvalidYieldStatement('
-        '$beginToken, '
-        '$starToken, '
-        '$endToken, '
-        '$errorCode)');
-  }
-
   void beginBlock(Token token, BlockKind blockKind) {
     seen(token);
     doPrint('beginBlock(' '$token, ' '$blockKind)');
@@ -247,6 +234,12 @@
     doPrint('endMixinDeclaration(' '$mixinKeyword, ' '$endToken)');
   }
 
+  void beginUncategorizedTopLevelDeclaration(Token token) {
+    seen(token);
+    doPrint('beginUncategorizedTopLevelDeclaration(' '$token)');
+    indent++;
+  }
+
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     seen(extensionKeyword);
     doPrint('beginExtensionDeclarationPrelude(' '$extensionKeyword)');
@@ -1431,10 +1424,10 @@
     doPrint('endRethrowStatement(' '$rethrowToken, ' '$endToken)');
   }
 
-  void endTopLevelDeclaration(Token token) {
+  void endTopLevelDeclaration(Token nextToken) {
     indent--;
-    seen(token);
-    doPrint('endTopLevelDeclaration(' '$token)');
+    seen(nextToken);
+    doPrint('endTopLevelDeclaration(' '$nextToken)');
   }
 
   void handleInvalidTopLevelDeclaration(Token endToken) {
@@ -1448,6 +1441,12 @@
     indent++;
   }
 
+  void beginFields(Token lastConsumed) {
+    seen(lastConsumed);
+    doPrint('beginFields(' '$lastConsumed)');
+    indent++;
+  }
+
   void endTopLevelFields(
       Token externalToken,
       Token staticToken,
@@ -1698,13 +1697,20 @@
   void beginBinaryExpression(Token token) {
     seen(token);
     doPrint('beginBinaryExpression(' '$token)');
+    indent++;
   }
 
   void endBinaryExpression(Token token) {
+    indent--;
     seen(token);
     doPrint('endBinaryExpression(' '$token)');
   }
 
+  void handleEndingBinaryExpression(Token token) {
+    seen(token);
+    doPrint('handleEndingBinaryExpression(' '$token)');
+  }
+
   void beginConditionalExpression(Token question) {
     seen(question);
     doPrint('beginConditionalExpression(' '$question)');
@@ -1759,10 +1765,9 @@
     indent++;
   }
 
-  void beginThenControlFlow(Token token) {
+  void handleThenControlFlow(Token token) {
     seen(token);
-    doPrint('beginThenControlFlow(' '$token)');
-    indent++;
+    doPrint('handleThenControlFlow(' '$token)');
   }
 
   void handleElseControlFlow(Token elseToken) {
@@ -2113,6 +2118,19 @@
     doPrint('endYieldStatement(' '$yieldToken, ' '$starToken, ' '$endToken)');
   }
 
+  void endInvalidYieldStatement(Token beginToken, Token starToken,
+      Token endToken, MessageCode errorCode) {
+    indent--;
+    seen(beginToken);
+    seen(starToken);
+    seen(endToken);
+    doPrint('endInvalidYieldStatement('
+        '$beginToken, '
+        '$starToken, '
+        '$endToken, '
+        '$errorCode)');
+  }
+
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     seen(startToken);
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index 67c2268..1acfac3 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -15,11 +15,6 @@
 
 StringSink out;
 
-const Set<String> specialHandledMethods = {
-  "beginBinaryExpression",
-  "endBinaryExpression",
-};
-
 main(List<String> args) {
   if (args.contains("--stdout")) {
     out = stdout;
@@ -157,8 +152,7 @@
         out.write(" null;");
       } else {
         out.write("\n    ");
-        if (!specialHandledMethods.contains(currentMethodName) &&
-            currentMethodName.startsWith("end")) {
+        if (currentMethodName.startsWith("end")) {
           out.write("indent--;\n    ");
         }
         for (int i = 0; i < parameterTypes.length; i++) {
@@ -176,8 +170,7 @@
         }
         out.write(")');\n  ");
 
-        if (!specialHandledMethods.contains(currentMethodName) &&
-            currentMethodName.startsWith("begin")) {
+        if (currentMethodName.startsWith("begin")) {
           out.write("  indent++;\n  ");
         }
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index eb44178..e67f4b8 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -68,6 +68,7 @@
 atom
 atoms
 attributes
+auto
 automagically
 auxiliary
 awaited
@@ -156,6 +157,7 @@
 cast
 casted
 casts
+categorized
 ce
 cfe
 ch
@@ -357,6 +359,7 @@
 emitting
 en
 encapsulation
+end'ed
 enforce
 enforced
 enforces
@@ -461,6 +464,7 @@
 globally
 glyph
 gn
+gobble
 goldens
 googlesource
 goto
@@ -1181,6 +1185,7 @@
 unaltered
 unassigned
 unbound
+uncategorized
 uncomment
 uncommon
 unconditionally
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 9ab0fd2..1c18fee 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -46,6 +46,7 @@
 ba
 baba
 backed
+background
 bail
 bailout
 bash
@@ -62,6 +63,7 @@
 blindly
 blocked
 blorp
+bold
 boo
 bootstrap
 bots
@@ -111,6 +113,7 @@
 coded
 codepath
 collisions
+columns
 commented
 commit
 companion
@@ -137,7 +140,10 @@
 cov
 cp
 crashes
+csi
+ctrl
 cumulative
+cursor
 cx
 dacoharkes
 dadd
@@ -154,7 +160,9 @@
 debugger
 decrease
 decrements
+dectcem
 def
+defaulting
 defintions
 deleting
 denylist
@@ -190,6 +198,7 @@
 dog
 doo
 downstream
+draw
 dumping
 dumps
 dupe
@@ -200,6 +209,7 @@
 e2e
 ease
 ec
+echo
 edits
 elapse
 ell
@@ -207,7 +217,9 @@
 entrypoints
 eoo
 epoch
+erase
 err
+esc
 everytime
 evicting
 exceed
@@ -261,6 +273,7 @@
 foos
 forbidden
 forces
+foreground
 foreign
 forrest
 foundation
@@ -278,6 +291,7 @@
 git
 goo
 google
+graphic
 greeting
 gtgt
 gulp
@@ -309,13 +323,16 @@
 increased
 incrementally
 increments
+indents
 infinity
+initializer2
 inspect
 insufficient
 intact
 interactive
 internet
 interpolate
+introducer
 inv
 invalidating
 invocation1a
@@ -344,11 +361,13 @@
 issue41498b
 issue41499b
 it'll
+italic
 iter
 joo
 jumped
 kernels
 kill
+kitty
 ko
 koo
 la
@@ -408,6 +427,7 @@
 mf
 micro
 minimize
+mintty
 minutes
 mismatched
 misnamed
@@ -465,6 +485,7 @@
 pp
 preliminary
 prematurely
+press
 pretends
 producer
 profile
@@ -481,6 +502,7 @@
 py
 python
 quicker
+quit
 quot
 quux
 qux
@@ -506,6 +528,8 @@
 reload
 remap
 remaps
+rendition
+repaint
 repeating
 repro
 resource
@@ -518,6 +542,7 @@
 retains
 rev
 risky
+row
 runtimes
 say
 scans
@@ -537,7 +562,9 @@
 shipped
 shortest
 shot
+sigint
 signalled
+sigwinch
 slight
 smoke
 somehow
@@ -616,11 +643,14 @@
 typeargs
 typeparam
 typeparambounds
+u250c
 ugly
 unassignment
 unawaited
 unbreak
+uncategorized
 unconverted
+underline
 unpacked
 unpaused
 unregistered
@@ -642,6 +672,8 @@
 versioned
 versioning
 vp
+vt
+vte
 waited
 waiting
 waits
diff --git a/pkg/front_end/test/unit_test_suites.dart b/pkg/front_end/test/unit_test_suites.dart
index 768fa14..1f42047 100644
--- a/pkg/front_end/test/unit_test_suites.dart
+++ b/pkg/front_end/test/unit_test_suites.dart
@@ -32,6 +32,7 @@
 import 'lint_suite.dart' as lint show createContext;
 import 'old_dill_suite.dart' as old_dill show createContext;
 import 'parser_suite.dart' as parser show createContext;
+import 'parser_all_suite.dart' as parserAll show createContext;
 import 'spelling_test_not_src_suite.dart' as spelling_not_src
     show createContext;
 import 'spelling_test_src_suite.dart' as spelling_src show createContext;
@@ -266,6 +267,7 @@
   const Suite("lint", lint.createContext, "../testing.json"),
   const Suite("old_dill", old_dill.createContext, "../testing.json"),
   const Suite("parser", parser.createContext, "../testing.json"),
+  const Suite("parser_all", parserAll.createContext, "../testing.json"),
   const Suite("spelling_test_not_src", spelling_not_src.createContext,
       "../testing.json"),
   const Suite(
@@ -300,6 +302,9 @@
   String name = suite.prefix;
   String fullSuiteName = "$suiteNamePrefix/$name";
   Uri suiteUri = Platform.script.resolve(suite.path ?? "${name}_suite.dart");
+  if (!new File.fromUri(suiteUri).existsSync()) {
+    throw "File doesn't exist: $suiteUri";
+  }
   ResultLogger logger = ResultLogger(
       fullSuiteName,
       configuration.resultsPort,
diff --git a/pkg/front_end/testcases/static_field_lowering/folder.options b/pkg/front_end/testcases/static_field_lowering/folder.options
new file mode 100644
index 0000000..c55c0d4
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/folder.options
@@ -0,0 +1,2 @@
+--enable-experiment=non-nullable
+--force-static-field-lowering
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
new file mode 100644
index 0000000..6d9235d
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
@@ -0,0 +1,133 @@
+// Copyright (c) 2020, 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.
+
+dynamic lastInit;
+
+T init<T>(T value) {
+  lastInit = value;
+  return value;
+}
+
+int? topLevelFieldWithoutInitializer;
+
+int nonNullableTopLevelFieldWithInitializer1 = init(42);
+int? nullableTopLevelFieldWithInitializer = init(123);
+
+int nonNullableTopLevelFieldWithInitializer2 = init(42);
+int? nullableTopLevelFieldWithInitializer2 = init(123);
+
+final int nonNullableFinalTopLevelFieldWithInitializer1 = init(87);
+final int? nullableFinalTopLevelFieldWithInitializer1 = init(32);
+
+int nonNullableFinalTopLevelFieldWithInitializer2Init = 0;
+final int nonNullableFinalTopLevelFieldWithInitializer2 =
+    nonNullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nonNullableFinalTopLevelFieldWithInitializer2 + 1
+        : 87;
+int nullableFinalTopLevelFieldWithInitializer2Init = 0;
+final int? nullableFinalTopLevelFieldWithInitializer2 =
+    nullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nullableFinalTopLevelFieldWithInitializer2! + 1
+        : 32;
+
+class Class {
+  static int? staticFieldWithoutInitializer;
+
+  static int nonNullableStaticFieldWithInitializer1 = init(55);
+  static int? nullableStaticFieldWithInitializer1 = init(17);
+
+  static int nonNullableStaticFieldWithInitializer2 = init(55);
+  static int? nullableStaticFieldWithInitializer2 = init(17);
+
+  static final int nonNullableStaticFinalFieldWithInitializer1 = init(73);
+  static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
+
+  static int nonNullableStaticFinalFieldWithInitializer2Init = 0;
+  static final int nonNullableStaticFinalFieldWithInitializer2 =
+      nonNullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nonNullableStaticFinalFieldWithInitializer2 + 1
+          : 87;
+  static int nullableStaticFinalFieldWithInitializer2Init = 0;
+  static final int? nullableStaticFinalFieldWithInitializer2 =
+      nullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nullableStaticFinalFieldWithInitializer2! + 1
+          : 32;
+}
+
+main() {
+  expect(null, lastInit);
+  expect(null, topLevelFieldWithoutInitializer);
+  expect(null, Class.staticFieldWithoutInitializer);
+
+  expect(42, nonNullableTopLevelFieldWithInitializer1);
+  expect(42, lastInit);
+
+  expect(123, nullableTopLevelFieldWithInitializer);
+  expect(123, lastInit);
+
+  nonNullableTopLevelFieldWithInitializer2 = 56;
+  expect(123, lastInit);
+  expect(56, nonNullableTopLevelFieldWithInitializer2);
+  expect(123, lastInit);
+
+  nullableTopLevelFieldWithInitializer2 = 7;
+  expect(123, lastInit);
+  expect(7, nullableTopLevelFieldWithInitializer2);
+  expect(123, lastInit);
+
+  expect(87, nonNullableFinalTopLevelFieldWithInitializer1);
+  expect(87, lastInit);
+
+  expect(32, nullableFinalTopLevelFieldWithInitializer1);
+  expect(32, lastInit);
+
+  throws(() => nonNullableFinalTopLevelFieldWithInitializer2,
+      'Read nonNullableFinalTopLevelFieldWithInitializer2');
+
+  throws(() => nullableFinalTopLevelFieldWithInitializer2,
+      'Read nullableFinalTopLevelFieldWithInitializer2');
+
+  expect(55, Class.nonNullableStaticFieldWithInitializer1);
+  expect(55, lastInit);
+
+  expect(17, Class.nullableStaticFieldWithInitializer1);
+  expect(17, lastInit);
+
+  Class.nonNullableStaticFieldWithInitializer2 = 63;
+  expect(17, lastInit);
+  expect(63, Class.nonNullableStaticFieldWithInitializer2);
+  expect(17, lastInit);
+
+  Class.nullableStaticFieldWithInitializer2 = 89;
+  expect(17, lastInit);
+  expect(89, Class.nullableStaticFieldWithInitializer2);
+  expect(17, lastInit);
+
+  expect(73, Class.nonNullableStaticFinalFieldWithInitializer1);
+  expect(73, lastInit);
+
+  expect(19, Class.nullableStaticFinalFieldWithInitializer1);
+  expect(19, lastInit);
+
+  throws(() => Class.nonNullableStaticFinalFieldWithInitializer2,
+      'Read nonNullableStaticFinalFieldWithInitializer2');
+
+  throws(() => Class.nullableStaticFinalFieldWithInitializer2,
+      'Read nullableStaticFinalFieldWithInitializer2');
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(f(), String message) {
+  dynamic value;
+  try {
+    value = f();
+  } on LateInitializationError catch (e) {
+    print(e);
+    return;
+  }
+  throw '$message: $value';
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
new file mode 100644
index 0000000..93e4a3c
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
@@ -0,0 +1,43 @@
+dynamic lastInit;
+T init<T>(T value) {}
+int? topLevelFieldWithoutInitializer;
+int nonNullableTopLevelFieldWithInitializer1 = init(42);
+int? nullableTopLevelFieldWithInitializer = init(123);
+int nonNullableTopLevelFieldWithInitializer2 = init(42);
+int? nullableTopLevelFieldWithInitializer2 = init(123);
+final int nonNullableFinalTopLevelFieldWithInitializer1 = init(87);
+final int? nullableFinalTopLevelFieldWithInitializer1 = init(32);
+int nonNullableFinalTopLevelFieldWithInitializer2Init = 0;
+final int nonNullableFinalTopLevelFieldWithInitializer2 =
+    nonNullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nonNullableFinalTopLevelFieldWithInitializer2 + 1
+        : 87;
+int nullableFinalTopLevelFieldWithInitializer2Init = 0;
+final int? nullableFinalTopLevelFieldWithInitializer2 =
+    nullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nullableFinalTopLevelFieldWithInitializer2! + 1
+        : 32;
+
+class Class {
+  static int? staticFieldWithoutInitializer;
+  static int nonNullableStaticFieldWithInitializer1 = init(55);
+  static int? nullableStaticFieldWithInitializer1 = init(17);
+  static int nonNullableStaticFieldWithInitializer2 = init(55);
+  static int? nullableStaticFieldWithInitializer2 = init(17);
+  static final int nonNullableStaticFinalFieldWithInitializer1 = init(73);
+  static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
+  static int nonNullableStaticFinalFieldWithInitializer2Init = 0;
+  static final int nonNullableStaticFinalFieldWithInitializer2 =
+      nonNullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nonNullableStaticFinalFieldWithInitializer2 + 1
+          : 87;
+  static int nullableStaticFinalFieldWithInitializer2Init = 0;
+  static final int? nullableStaticFinalFieldWithInitializer2 =
+      nullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nullableStaticFinalFieldWithInitializer2! + 1
+          : 32;
+}
+
+main() {}
+expect(expected, actual) {}
+throws(f(), String message) {}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a9b7d4d
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,43 @@
+T init<T>(T value) {}
+
+class Class {
+  static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
+  static final int? nullableStaticFinalFieldWithInitializer2 =
+      nullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nullableStaticFinalFieldWithInitializer2! + 1
+          : 32;
+  static final int nonNullableStaticFinalFieldWithInitializer1 = init(73);
+  static final int nonNullableStaticFinalFieldWithInitializer2 =
+      nonNullableStaticFinalFieldWithInitializer2Init++ == 0
+          ? nonNullableStaticFinalFieldWithInitializer2 + 1
+          : 87;
+  static int? nullableStaticFieldWithInitializer1 = init(17);
+  static int? nullableStaticFieldWithInitializer2 = init(17);
+  static int? staticFieldWithoutInitializer;
+  static int nonNullableStaticFieldWithInitializer1 = init(55);
+  static int nonNullableStaticFieldWithInitializer2 = init(55);
+  static int nonNullableStaticFinalFieldWithInitializer2Init = 0;
+  static int nullableStaticFinalFieldWithInitializer2Init = 0;
+}
+
+dynamic lastInit;
+expect(expected, actual) {}
+final int? nullableFinalTopLevelFieldWithInitializer1 = init(32);
+final int? nullableFinalTopLevelFieldWithInitializer2 =
+    nullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nullableFinalTopLevelFieldWithInitializer2! + 1
+        : 32;
+final int nonNullableFinalTopLevelFieldWithInitializer1 = init(87);
+final int nonNullableFinalTopLevelFieldWithInitializer2 =
+    nonNullableFinalTopLevelFieldWithInitializer2Init++ == 0
+        ? nonNullableFinalTopLevelFieldWithInitializer2 + 1
+        : 87;
+int? nullableTopLevelFieldWithInitializer = init(123);
+int? nullableTopLevelFieldWithInitializer2 = init(123);
+int? topLevelFieldWithoutInitializer;
+int nonNullableFinalTopLevelFieldWithInitializer2Init = 0;
+int nonNullableTopLevelFieldWithInitializer1 = init(42);
+int nonNullableTopLevelFieldWithInitializer2 = init(42);
+int nullableFinalTopLevelFieldWithInitializer2Init = 0;
+main() {}
+throws(f(), String message) {}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
new file mode 100644
index 0000000..b11f2bb
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
@@ -0,0 +1,225 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int? staticFieldWithoutInitializer = null;
+  static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
+  static field core::int? _#nullableStaticFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFieldWithInitializer2 = null;
+  static field core::int? _#nullableStaticFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer2#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer1 = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2 = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer2#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get nonNullableStaticFieldWithInitializer1() → core::int
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
+  static set nonNullableStaticFieldWithInitializer1(core::int #t2) → void
+    self::Class::_#nonNullableStaticFieldWithInitializer1 = #t2;
+  static get nullableStaticFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer1#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer1 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer1;
+  }
+  static set nullableStaticFieldWithInitializer1(core::int? #t3) → void {
+    self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer1 = #t3;
+  }
+  static get nonNullableStaticFieldWithInitializer2() → core::int
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
+  static set nonNullableStaticFieldWithInitializer2(core::int #t5) → void
+    self::Class::_#nonNullableStaticFieldWithInitializer2 = #t5;
+  static get nullableStaticFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer2#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer2 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer2;
+  }
+  static set nullableStaticFieldWithInitializer2(core::int? #t6) → void {
+    self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer2 = #t6;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer1() → core::int
+    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7.==(null) ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableStaticFinalFieldWithInitializer1' has been assigned during initialization.") : #t7{core::int};
+  static get nullableStaticFinalFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet) {
+      final core::int? #t9 = self::init<core::int?>(19);
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet)
+        throw new _in::LateInitializationErrorImpl::•("Field 'nullableStaticFinalFieldWithInitializer1' has been assigned during initialization.");
+      self::Class::_#nullableStaticFinalFieldWithInitializer1 = #t9;
+      self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer1;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer2Init() → core::int
+    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
+  static set nonNullableStaticFinalFieldWithInitializer2Init(core::int #t11) → void
+    self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = #t11;
+  static get nonNullableStaticFinalFieldWithInitializer2() → core::int
+    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12.==(null) ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1) in #t14).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableStaticFinalFieldWithInitializer2' has been assigned during initialization.") : #t12{core::int};
+  static get nullableStaticFinalFieldWithInitializer2Init() → core::int
+    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16.==(null) ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
+  static set nullableStaticFinalFieldWithInitializer2Init(core::int #t17) → void
+    self::Class::_#nullableStaticFinalFieldWithInitializer2Init = #t17;
+  static get nullableStaticFinalFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
+        throw new _in::LateInitializationErrorImpl::•("Field 'nullableStaticFinalFieldWithInitializer2' has been assigned during initialization.");
+      self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
+      self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer2;
+  }
+}
+static field dynamic lastInit;
+static field core::int? topLevelFieldWithoutInitializer;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer1 = null;
+static field core::int? _#nullableTopLevelFieldWithInitializer = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer#isSet = false;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer2 = null;
+static field core::int? _#nullableTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer2#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer1#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer2#isSet = false;
+static method init<T extends core::Object? = dynamic>(self::init::T% value) → self::init::T% {
+  self::lastInit = value;
+  return value;
+}
+static get nonNullableTopLevelFieldWithInitializer1() → core::int
+  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
+static set nonNullableTopLevelFieldWithInitializer1(core::int #t22) → void
+  self::_#nonNullableTopLevelFieldWithInitializer1 = #t22;
+static get nullableTopLevelFieldWithInitializer() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer;
+}
+static set nullableTopLevelFieldWithInitializer(core::int? #t23) → void {
+  self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer = #t23;
+}
+static get nonNullableTopLevelFieldWithInitializer2() → core::int
+  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
+static set nonNullableTopLevelFieldWithInitializer2(core::int #t25) → void
+  self::_#nonNullableTopLevelFieldWithInitializer2 = #t25;
+static get nullableTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer2#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer2 = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer2;
+}
+static set nullableTopLevelFieldWithInitializer2(core::int? #t26) → void {
+  self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer2 = #t26;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer1() → core::int
+  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27.==(null) ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelFieldWithInitializer1' has been assigned during initialization.") : #t27{core::int};
+static get nullableFinalTopLevelFieldWithInitializer1() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer1#isSet) {
+    final core::int? #t29 = self::init<core::int?>(32);
+    if(self::_#nullableFinalTopLevelFieldWithInitializer1#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelFieldWithInitializer1' has been assigned during initialization.");
+    self::_#nullableFinalTopLevelFieldWithInitializer1 = #t29;
+    self::_#nullableFinalTopLevelFieldWithInitializer1#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer1;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer2Init() → core::int
+  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
+static set nonNullableFinalTopLevelFieldWithInitializer2Init(core::int #t31) → void
+  self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = #t31;
+static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int
+  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32.==(null) ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1) in #t34).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelFieldWithInitializer2' has been assigned during initialization.") : #t32{core::int};
+static get nullableFinalTopLevelFieldWithInitializer2Init() → core::int
+  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36.==(null) ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
+static set nullableFinalTopLevelFieldWithInitializer2Init(core::int #t37) → void
+  self::_#nullableFinalTopLevelFieldWithInitializer2Init = #t37;
+static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelFieldWithInitializer2' has been assigned during initialization.");
+    self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
+    self::_#nullableFinalTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer2;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(42, self::nonNullableTopLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::expect(123, self::nullableTopLevelFieldWithInitializer);
+  self::expect(123, self::lastInit);
+  self::nonNullableTopLevelFieldWithInitializer2 = 56;
+  self::expect(123, self::lastInit);
+  self::expect(56, self::nonNullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::nullableTopLevelFieldWithInitializer2 = 7;
+  self::expect(123, self::lastInit);
+  self::expect(7, self::nullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::expect(87, self::nonNullableFinalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::expect(32, self::nullableFinalTopLevelFieldWithInitializer1);
+  self::expect(32, self::lastInit);
+  self::throws(() → core::int => self::nonNullableFinalTopLevelFieldWithInitializer2, "Read nonNullableFinalTopLevelFieldWithInitializer2");
+  self::throws(() → core::int? => self::nullableFinalTopLevelFieldWithInitializer2, "Read nullableFinalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::nonNullableStaticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::expect(17, self::Class::nullableStaticFieldWithInitializer1);
+  self::expect(17, self::lastInit);
+  self::Class::nonNullableStaticFieldWithInitializer2 = 63;
+  self::expect(17, self::lastInit);
+  self::expect(63, self::Class::nonNullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::Class::nullableStaticFieldWithInitializer2 = 89;
+  self::expect(17, self::lastInit);
+  self::expect(89, self::Class::nullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::expect(73, self::Class::nonNullableStaticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::expect(19, self::Class::nullableStaticFinalFieldWithInitializer1);
+  self::expect(19, self::lastInit);
+  self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
+  self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f.call();
+  }
+  on core::LateInitializationError catch(final core::LateInitializationError e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..b11f2bb
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
@@ -0,0 +1,225 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int? staticFieldWithoutInitializer = null;
+  static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
+  static field core::int? _#nullableStaticFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFieldWithInitializer2 = null;
+  static field core::int? _#nullableStaticFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer2#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer1 = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2 = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer2#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get nonNullableStaticFieldWithInitializer1() → core::int
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
+  static set nonNullableStaticFieldWithInitializer1(core::int #t2) → void
+    self::Class::_#nonNullableStaticFieldWithInitializer1 = #t2;
+  static get nullableStaticFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer1#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer1 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer1;
+  }
+  static set nullableStaticFieldWithInitializer1(core::int? #t3) → void {
+    self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer1 = #t3;
+  }
+  static get nonNullableStaticFieldWithInitializer2() → core::int
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
+  static set nonNullableStaticFieldWithInitializer2(core::int #t5) → void
+    self::Class::_#nonNullableStaticFieldWithInitializer2 = #t5;
+  static get nullableStaticFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer2#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer2 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer2;
+  }
+  static set nullableStaticFieldWithInitializer2(core::int? #t6) → void {
+    self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer2 = #t6;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer1() → core::int
+    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7.==(null) ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableStaticFinalFieldWithInitializer1' has been assigned during initialization.") : #t7{core::int};
+  static get nullableStaticFinalFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet) {
+      final core::int? #t9 = self::init<core::int?>(19);
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet)
+        throw new _in::LateInitializationErrorImpl::•("Field 'nullableStaticFinalFieldWithInitializer1' has been assigned during initialization.");
+      self::Class::_#nullableStaticFinalFieldWithInitializer1 = #t9;
+      self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer1;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer2Init() → core::int
+    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
+  static set nonNullableStaticFinalFieldWithInitializer2Init(core::int #t11) → void
+    self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = #t11;
+  static get nonNullableStaticFinalFieldWithInitializer2() → core::int
+    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12.==(null) ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1) in #t14).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableStaticFinalFieldWithInitializer2' has been assigned during initialization.") : #t12{core::int};
+  static get nullableStaticFinalFieldWithInitializer2Init() → core::int
+    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16.==(null) ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
+  static set nullableStaticFinalFieldWithInitializer2Init(core::int #t17) → void
+    self::Class::_#nullableStaticFinalFieldWithInitializer2Init = #t17;
+  static get nullableStaticFinalFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
+        throw new _in::LateInitializationErrorImpl::•("Field 'nullableStaticFinalFieldWithInitializer2' has been assigned during initialization.");
+      self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
+      self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer2;
+  }
+}
+static field dynamic lastInit;
+static field core::int? topLevelFieldWithoutInitializer;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer1 = null;
+static field core::int? _#nullableTopLevelFieldWithInitializer = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer#isSet = false;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer2 = null;
+static field core::int? _#nullableTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer2#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer1#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer2#isSet = false;
+static method init<T extends core::Object? = dynamic>(self::init::T% value) → self::init::T% {
+  self::lastInit = value;
+  return value;
+}
+static get nonNullableTopLevelFieldWithInitializer1() → core::int
+  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
+static set nonNullableTopLevelFieldWithInitializer1(core::int #t22) → void
+  self::_#nonNullableTopLevelFieldWithInitializer1 = #t22;
+static get nullableTopLevelFieldWithInitializer() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer;
+}
+static set nullableTopLevelFieldWithInitializer(core::int? #t23) → void {
+  self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer = #t23;
+}
+static get nonNullableTopLevelFieldWithInitializer2() → core::int
+  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
+static set nonNullableTopLevelFieldWithInitializer2(core::int #t25) → void
+  self::_#nonNullableTopLevelFieldWithInitializer2 = #t25;
+static get nullableTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer2#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer2 = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer2;
+}
+static set nullableTopLevelFieldWithInitializer2(core::int? #t26) → void {
+  self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer2 = #t26;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer1() → core::int
+  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27.==(null) ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelFieldWithInitializer1' has been assigned during initialization.") : #t27{core::int};
+static get nullableFinalTopLevelFieldWithInitializer1() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer1#isSet) {
+    final core::int? #t29 = self::init<core::int?>(32);
+    if(self::_#nullableFinalTopLevelFieldWithInitializer1#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelFieldWithInitializer1' has been assigned during initialization.");
+    self::_#nullableFinalTopLevelFieldWithInitializer1 = #t29;
+    self::_#nullableFinalTopLevelFieldWithInitializer1#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer1;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer2Init() → core::int
+  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
+static set nonNullableFinalTopLevelFieldWithInitializer2Init(core::int #t31) → void
+  self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = #t31;
+static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int
+  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32.==(null) ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1) in #t34).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelFieldWithInitializer2' has been assigned during initialization.") : #t32{core::int};
+static get nullableFinalTopLevelFieldWithInitializer2Init() → core::int
+  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36.==(null) ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
+static set nullableFinalTopLevelFieldWithInitializer2Init(core::int #t37) → void
+  self::_#nullableFinalTopLevelFieldWithInitializer2Init = #t37;
+static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelFieldWithInitializer2' has been assigned during initialization.");
+    self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
+    self::_#nullableFinalTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer2;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(42, self::nonNullableTopLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::expect(123, self::nullableTopLevelFieldWithInitializer);
+  self::expect(123, self::lastInit);
+  self::nonNullableTopLevelFieldWithInitializer2 = 56;
+  self::expect(123, self::lastInit);
+  self::expect(56, self::nonNullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::nullableTopLevelFieldWithInitializer2 = 7;
+  self::expect(123, self::lastInit);
+  self::expect(7, self::nullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::expect(87, self::nonNullableFinalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::expect(32, self::nullableFinalTopLevelFieldWithInitializer1);
+  self::expect(32, self::lastInit);
+  self::throws(() → core::int => self::nonNullableFinalTopLevelFieldWithInitializer2, "Read nonNullableFinalTopLevelFieldWithInitializer2");
+  self::throws(() → core::int? => self::nullableFinalTopLevelFieldWithInitializer2, "Read nullableFinalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::nonNullableStaticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::expect(17, self::Class::nullableStaticFieldWithInitializer1);
+  self::expect(17, self::lastInit);
+  self::Class::nonNullableStaticFieldWithInitializer2 = 63;
+  self::expect(17, self::lastInit);
+  self::expect(63, self::Class::nonNullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::Class::nullableStaticFieldWithInitializer2 = 89;
+  self::expect(17, self::lastInit);
+  self::expect(89, self::Class::nullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::expect(73, self::Class::nonNullableStaticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::expect(19, self::Class::nullableStaticFinalFieldWithInitializer1);
+  self::expect(19, self::lastInit);
+  self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
+  self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f.call();
+  }
+  on core::LateInitializationError catch(final core::LateInitializationError e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
new file mode 100644
index 0000000..10bc21d
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
@@ -0,0 +1,93 @@
+// Copyright (c) 2020, 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.8
+
+dynamic lastInit;
+
+T init<T>(T value) {
+  lastInit = value;
+  return value;
+}
+
+int topLevelFieldWithoutInitializer;
+
+int topLevelFieldWithInitializer1 = init(42);
+
+int topLevelFieldWithInitializer2 = init(42);
+
+final int finalTopLevelFieldWithInitializer1 = init(87);
+
+int finalTopLevelFieldWithInitializer2Init = 0;
+final int finalTopLevelFieldWithInitializer2 =
+    finalTopLevelFieldWithInitializer2Init++ == 0
+        ? finalTopLevelFieldWithInitializer2 + 1
+        : 87;
+
+class Class {
+  static int staticFieldWithoutInitializer;
+
+  static int staticFieldWithInitializer1 = init(55);
+
+  static int staticFieldWithInitializer2 = init(55);
+
+  static final int staticFinalFieldWithInitializer1 = init(73);
+
+  static int staticFinalFieldWithInitializer2Init = 0;
+  static final int staticFinalFieldWithInitializer2 =
+      staticFinalFieldWithInitializer2Init++ == 0
+          ? staticFinalFieldWithInitializer2 + 1
+          : 87;
+}
+
+main() {
+  expect(null, lastInit);
+  expect(null, topLevelFieldWithoutInitializer);
+  expect(null, Class.staticFieldWithoutInitializer);
+
+  expect(42, topLevelFieldWithInitializer1);
+  expect(42, lastInit);
+
+  topLevelFieldWithInitializer2 = 56;
+  expect(42, lastInit);
+  expect(56, topLevelFieldWithInitializer2);
+  expect(42, lastInit);
+
+  expect(87, finalTopLevelFieldWithInitializer1);
+  expect(87, lastInit);
+
+  throws(() => finalTopLevelFieldWithInitializer2,
+      'Read finalTopLevelFieldWithInitializer2');
+
+  expect(55, Class.staticFieldWithInitializer1);
+  expect(55, lastInit);
+
+  Class.staticFieldWithInitializer2 = 63;
+  expect(55, lastInit);
+  expect(63, Class.staticFieldWithInitializer2);
+  expect(55, lastInit);
+
+  expect(73, Class.staticFinalFieldWithInitializer1);
+  expect(73, lastInit);
+
+  throws(() => Class.staticFinalFieldWithInitializer2,
+      'Read staticFinalFieldWithInitializer2');
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(f(), String message) {
+  dynamic value;
+  try {
+    value = f();
+  } on LateInitializationError catch (e) {
+    throw '$message: Unexpected LateInitializationError: $e';
+  } catch (e) {
+    print(e);
+    return;
+  }
+  throw '$message: $value';
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
new file mode 100644
index 0000000..3e7aff7
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+// @dart = 2.8
+dynamic lastInit;
+T init<T>(T value) {}
+int topLevelFieldWithoutInitializer;
+int topLevelFieldWithInitializer1 = init(42);
+int topLevelFieldWithInitializer2 = init(42);
+final int finalTopLevelFieldWithInitializer1 = init(87);
+int finalTopLevelFieldWithInitializer2Init = 0;
+final int finalTopLevelFieldWithInitializer2 =
+    finalTopLevelFieldWithInitializer2Init++ == 0
+        ? finalTopLevelFieldWithInitializer2 + 1
+        : 87;
+
+class Class {
+  static int staticFieldWithoutInitializer;
+  static int staticFieldWithInitializer1 = init(55);
+  static int staticFieldWithInitializer2 = init(55);
+  static final int staticFinalFieldWithInitializer1 = init(73);
+  static int staticFinalFieldWithInitializer2Init = 0;
+  static final int staticFinalFieldWithInitializer2 =
+      staticFinalFieldWithInitializer2Init++ == 0
+          ? staticFinalFieldWithInitializer2 + 1
+          : 87;
+}
+
+main() {}
+expect(expected, actual) {}
+throws(f(), String message) {}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..494c66e8
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+// @dart = 2.8
+T init<T>(T value) {}
+
+class Class {
+  static final int staticFinalFieldWithInitializer1 = init(73);
+  static final int staticFinalFieldWithInitializer2 =
+      staticFinalFieldWithInitializer2Init++ == 0
+          ? staticFinalFieldWithInitializer2 + 1
+          : 87;
+  static int staticFieldWithInitializer1 = init(55);
+  static int staticFieldWithInitializer2 = init(55);
+  static int staticFieldWithoutInitializer;
+  static int staticFinalFieldWithInitializer2Init = 0;
+}
+
+dynamic lastInit;
+expect(expected, actual) {}
+final int finalTopLevelFieldWithInitializer1 = init(87);
+final int finalTopLevelFieldWithInitializer2 =
+    finalTopLevelFieldWithInitializer2Init++ == 0
+        ? finalTopLevelFieldWithInitializer2 + 1
+        : 87;
+int finalTopLevelFieldWithInitializer2Init = 0;
+int topLevelFieldWithInitializer1 = init(42);
+int topLevelFieldWithInitializer2 = init(42);
+int topLevelFieldWithoutInitializer;
+main() {}
+throws(f(), String message) {}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
new file mode 100644
index 0000000..9f52494
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
@@ -0,0 +1,77 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static field core::int* staticFieldWithoutInitializer = null;
+  static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
+  static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
+  static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
+  static field core::int* staticFinalFieldWithInitializer2Init = 0;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field dynamic lastInit;
+static field core::int* topLevelFieldWithoutInitializer;
+static field core::int* topLevelFieldWithInitializer1 = self::init<core::int*>(42);
+static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
+static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
+static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
+  self::lastInit = value;
+  return value;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(42, self::topLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::topLevelFieldWithInitializer2 = 56;
+  self::expect(42, self::lastInit);
+  self::expect(56, self::topLevelFieldWithInitializer2);
+  self::expect(42, self::lastInit);
+  self::expect(87, self::finalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::throws(() → core::int* => self::finalTopLevelFieldWithInitializer2, "Read finalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::staticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::Class::staticFieldWithInitializer2 = 63;
+  self::expect(55, self::lastInit);
+  self::expect(63, self::Class::staticFieldWithInitializer2);
+  self::expect(55, self::lastInit);
+  self::expect(73, self::Class::staticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* dynamic f, core::String* message) → dynamic {
+  dynamic value;
+  try {
+    value = f.call();
+  }
+  on core::LateInitializationError* catch(final core::LateInitializationError* e) {
+    throw "${message}: Unexpected LateInitializationError: ${e}";
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
new file mode 100644
index 0000000..9f52494
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
@@ -0,0 +1,77 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static field core::int* staticFieldWithoutInitializer = null;
+  static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
+  static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
+  static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
+  static field core::int* staticFinalFieldWithInitializer2Init = 0;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field dynamic lastInit;
+static field core::int* topLevelFieldWithoutInitializer;
+static field core::int* topLevelFieldWithInitializer1 = self::init<core::int*>(42);
+static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
+static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
+static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
+  self::lastInit = value;
+  return value;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(42, self::topLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::topLevelFieldWithInitializer2 = 56;
+  self::expect(42, self::lastInit);
+  self::expect(56, self::topLevelFieldWithInitializer2);
+  self::expect(42, self::lastInit);
+  self::expect(87, self::finalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::throws(() → core::int* => self::finalTopLevelFieldWithInitializer2, "Read finalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::staticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::Class::staticFieldWithInitializer2 = 63;
+  self::expect(55, self::lastInit);
+  self::expect(63, self::Class::staticFieldWithInitializer2);
+  self::expect(55, self::lastInit);
+  self::expect(73, self::Class::staticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* dynamic f, core::String* message) → dynamic {
+  dynamic value;
+  try {
+    value = f.call();
+  }
+  on core::LateInitializationError* catch(final core::LateInitializationError* e) {
+    throw "${message}: Unexpected LateInitializationError: ${e}";
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 5551b0d..418cb27 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -78,7 +78,8 @@
         "/testcases/expression/",
         "/testcases/general_nnbd_opt_out/",
         "/testcases/nnbd_mixed/",
-        "/testcases/nonfunction_type_aliases/"
+        "/testcases/nonfunction_type_aliases/",
+        "/testcases/static_field_lowering/"
       ]
     },
     {
@@ -99,7 +100,8 @@
         "/testcases/expression/",
         "/testcases/general_nnbd_opt_out/",
         "/testcases/nnbd_mixed/",
-        "/testcases/nonfunction_type_aliases/"
+        "/testcases/nonfunction_type_aliases/",
+        "/testcases/static_field_lowering/"
       ]
     },
     {
@@ -120,7 +122,8 @@
         "/testcases/expression/",
         "/testcases/general_nnbd_opt_out/",
         "/testcases/nnbd_mixed/",
-        "/testcases/nonfunction_type_aliases/"
+        "/testcases/nonfunction_type_aliases/",
+        "/testcases/static_field_lowering/"
       ]
     },
     {
@@ -141,7 +144,8 @@
         "/testcases/expression/",
         "/testcases/general_nnbd_opt_out/",
         "/testcases/nnbd_mixed/",
-        "/testcases/nonfunction_type_aliases/"
+        "/testcases/nonfunction_type_aliases/",
+        "/testcases/static_field_lowering/"
       ]
     },
     {
@@ -271,6 +275,19 @@
       "exclude": []
     },
     {
+      "name": "parser_all",
+      "kind": "Chain",
+      "source": "test/parser_all_suite.dart",
+      "path": "../../",
+      "status": "parser_testcases/parser_all.status",
+      "pattern": [
+        "pkg/front_end/.*\\.dart$",
+        "pkg/front_end/.*\\.crash_dart$",
+        "tests/.*\\.dart$"
+      ],
+      "exclude": []
+    },
+    {
       "name": "lint",
       "kind": "Chain",
       "source": "test/lint_suite.dart",
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index ca1e771..fd864cf 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -180,6 +180,7 @@
   Flags.fatal: const StringListValue(),
   Flags.fatalSkip: const StringValue(),
   Flags.forceLateLowering: const BoolValue(false),
+  Flags.forceStaticFieldLowering: const BoolValue(false),
   Flags.forceNoExplicitGetterCalls: const BoolValue(false),
   Flags.help: const BoolValue(false),
   Flags.librariesJson: const UriValue(),
@@ -242,6 +243,8 @@
 
   final TargetFlags flags = new TargetFlags(
       forceLateLoweringForTesting: options[Flags.forceLateLowering],
+      forceStaticFieldLoweringForTesting:
+          options[Flags.forceStaticFieldLowering],
       forceNoExplicitGetterCallsForTesting:
           options[Flags.forceNoExplicitGetterCalls],
       enableNullSafety:
diff --git a/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
new file mode 100644
index 0000000..2153705
--- /dev/null
+++ b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
@@ -0,0 +1,213 @@
+// Copyright (c) 2020, 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 'dart:io';
+import 'dart:typed_data';
+
+import 'package:_fe_analyzer_shared/src/parser/parser.dart';
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/listener.dart';
+import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
+import 'package:_fe_analyzer_shared/src/scanner/utf8_bytes_scanner.dart';
+import 'package:_fe_analyzer_shared/src/scanner/token.dart';
+import 'package:dart_style/dart_style.dart' show DartFormatter;
+
+StringSink out;
+
+main(List<String> args) {
+  if (args.contains("--stdout")) {
+    out = stdout;
+  } else {
+    out = new StringBuffer();
+  }
+
+  File f = new File.fromUri(Platform.script
+      .resolve("../../../_fe_analyzer_shared/lib/src/parser/listener.dart"));
+  List<int> rawBytes = f.readAsBytesSync();
+
+  Uint8List bytes = new Uint8List(rawBytes.length + 1);
+  bytes.setRange(0, rawBytes.length, rawBytes);
+
+  Utf8BytesScanner scanner = new Utf8BytesScanner(bytes, includeComments: true);
+  Token firstToken = scanner.tokenize();
+
+  out.write(r"""
+// Copyright (c) 2020, 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 'package:_fe_analyzer_shared/src/parser/assert.dart';
+import 'package:_fe_analyzer_shared/src/parser/block_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
+import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
+import 'package:_fe_analyzer_shared/src/parser/listener.dart';
+import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
+import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
+import 'package:_fe_analyzer_shared/src/scanner/token.dart';
+import 'package:front_end/src/fasta/messages.dart';
+
+// THIS FILE IS AUTO GENERATED BY
+// 'tool/_fasta/direct_parser_ast_helper_creator.dart'
+// Run e.g.
+/*
+   out/ReleaseX64/dart \
+     pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart \
+      > pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
+*/
+
+class DirectParserASTContent {
+  final String what;
+  final DirectParserASTType type;
+  final Map<String, Object> arguments;
+  List<DirectParserASTContent> content;
+
+  DirectParserASTContent(this.what, this.type, this.arguments);
+
+  // TODO(jensj): Compare two ASTs.
+}
+
+enum DirectParserASTType { BEGIN, END, HANDLE, DONE }
+
+abstract class AbstractDirectParserASTListener implements Listener {
+  List<DirectParserASTContent> data = [];
+
+  void seen(String what, DirectParserASTType type, Map<String, Object> arguments);
+
+""");
+
+  ParserCreatorListener listener = new ParserCreatorListener();
+  ClassMemberParser parser = new ClassMemberParser(listener);
+  parser.parseUnit(firstToken);
+
+  out.writeln("}");
+
+  if (out is StringBuffer) {
+    String text = new DartFormatter().format("$out");
+    if (args.isNotEmpty) {
+      new File(args.first).writeAsStringSync(text);
+    } else {
+      stdout.write(text);
+    }
+  }
+}
+
+class ParserCreatorListener extends Listener {
+  bool insideListenerClass = false;
+  String currentMethodName;
+  String latestSeenParameterTypeToken;
+  List<String> parameters = <String>[];
+  List<String> parameterTypes = <String>[];
+
+  void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
+    if (name.lexeme == "Listener") insideListenerClass = true;
+  }
+
+  void endClassDeclaration(Token beginToken, Token endToken) {
+    insideListenerClass = false;
+  }
+
+  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
+      Token varFinalOrConst, Token getOrSet, Token name) {
+    currentMethodName = name.lexeme;
+  }
+
+  void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
+      Token beginInitializers, Token endToken) {
+    void end() {
+      parameters.clear();
+      parameterTypes.clear();
+      currentMethodName = null;
+    }
+
+    if (insideListenerClass &&
+        (currentMethodName.startsWith("begin") ||
+            currentMethodName.startsWith("end") ||
+            currentMethodName.startsWith("handle"))) {
+      StringBuffer sb = new StringBuffer();
+      sb.write("  ");
+      Token token = beginToken;
+      Token latestToken;
+      while (true) {
+        if (latestToken != null && latestToken.charEnd < token.charOffset) {
+          sb.write(" ");
+        }
+        sb.write(token.lexeme);
+        if ((token is BeginToken &&
+                token.type == TokenType.OPEN_CURLY_BRACKET) ||
+            token is SimpleToken && token.type == TokenType.FUNCTION) {
+          break;
+        }
+        if (token == endToken) {
+          throw token.runtimeType;
+        }
+        latestToken = token;
+        token = token.next;
+      }
+
+      if (token is SimpleToken && token.type == TokenType.FUNCTION) {
+        return end();
+      } else {
+        sb.write("\n    ");
+        sb.write('seen("');
+        String typeString;
+        String name;
+        if (currentMethodName.startsWith("begin")) {
+          typeString = "BEGIN";
+          name = currentMethodName.substring("begin".length);
+        } else if (currentMethodName.startsWith("end")) {
+          typeString = "END";
+          name = currentMethodName.substring("end".length);
+        } else if (currentMethodName.startsWith("handle")) {
+          typeString = "HANDLE";
+          name = currentMethodName.substring("handle".length);
+        } else {
+          throw "Unexpected.";
+        }
+        sb.write(name);
+        sb.write('", DirectParserASTType.');
+        sb.write(typeString);
+        sb.write(", {");
+        String separator = "";
+        for (int i = 0; i < parameters.length; i++) {
+          sb.write(separator);
+          sb.write('"');
+          sb.write(parameters[i]);
+          sb.write('": ');
+          sb.write(parameters[i]);
+          separator = ", ";
+        }
+
+        sb.write("});\n  ");
+
+        sb.write("}");
+      }
+      sb.write("\n\n");
+
+      out.write(sb.toString());
+    }
+    end();
+  }
+
+  @override
+  void handleNoType(Token lastConsumed) {
+    latestSeenParameterTypeToken = null;
+  }
+
+  void handleType(Token beginToken, Token questionMark) {
+    latestSeenParameterTypeToken = beginToken.lexeme;
+  }
+
+  void endFormalParameter(
+      Token thisKeyword,
+      Token periodAfterThis,
+      Token nameToken,
+      Token initializerStart,
+      Token initializerEnd,
+      FormalParameterKind kind,
+      MemberKind memberKind) {
+    parameters.add(nameToken.lexeme);
+    parameterTypes.add(latestSeenParameterTypeToken);
+  }
+}
diff --git a/pkg/front_end/tool/parser_direct_ast/console_helper.dart b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
new file mode 100644
index 0000000..e41eac3
--- /dev/null
+++ b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
@@ -0,0 +1,296 @@
+// Copyright (c) 2020, 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 "dart:async";
+import "dart:io";
+import "dart:isolate";
+
+class Application {
+  int lastKnownTerminalColumns;
+  int lastKnownTerminalLines;
+  RawReceivePort preventClose;
+  StreamSubscription<List<int>> stdinListen;
+  StreamSubscription<ProcessSignal> sigintListen;
+  StreamSubscription<ProcessSignal> sigwinchListen;
+  Timer timer;
+  final Widget widget;
+  bool started = false;
+
+  Application(this.widget) {
+    lastKnownTerminalColumns = stdout.terminalColumns;
+    lastKnownTerminalLines = stdout.terminalLines;
+    preventClose = new RawReceivePort();
+    stdin.echoMode = false;
+    stdin.lineMode = false;
+
+    stdinListen = stdin.listen(stdinListener);
+    sigintListen = ProcessSignal.sigint.watch().listen((ProcessSignal signal) {
+      quit();
+      exit(0);
+    });
+    if (!Platform.isWindows) {
+      sigwinchListen =
+          ProcessSignal.sigwinch.watch().listen((ProcessSignal signal) {
+        lastKnownTerminalColumns = stdout.terminalColumns;
+        lastKnownTerminalLines = stdout.terminalLines;
+        clearScreenAlt();
+        widget.print(this);
+      });
+    }
+  }
+
+  void stdinListener(List<int> data) {
+    try {
+      widget.input(this, data);
+    } catch (e) {
+      quit();
+      rethrow;
+    }
+  }
+
+  void quit() {
+    gotoMainScreenBuffer();
+    showCursor();
+    // clearScreenAlt();
+    timer.cancel();
+    preventClose.close();
+    stdinListen.cancel();
+    sigintListen.cancel();
+    sigwinchListen?.cancel();
+  }
+
+  void start() {
+    if (started) throw "Already started!";
+    started = true;
+
+    gotoAlternativeScreenBuffer();
+    hideCursor();
+    // clearScreen();
+    widget.print(this);
+    timer = new Timer.periodic(new Duration(milliseconds: 100), (t) {
+      var x = stdout.terminalColumns;
+      bool changed = false;
+      if (x != lastKnownTerminalColumns) {
+        lastKnownTerminalColumns = x;
+        changed = true;
+      }
+      x = stdout.terminalLines;
+      if (x != lastKnownTerminalLines) {
+        lastKnownTerminalLines = x;
+        changed = true;
+      }
+
+      if (changed) {
+        clearScreenAlt();
+        widget.print(this);
+      }
+    });
+  }
+}
+
+abstract class Widget {
+  void print(Application app);
+
+  void input(Application app, List<int> data) {}
+}
+
+// "ESC [" is "Control Sequence Introducer" (CSI) according to Wikipedia
+// (https://en.wikipedia.org/wiki/ANSI_escape_code#Escape_sequences).
+const String CSI = "\x1b[";
+
+void setCursorPosition(int row, int column) {
+  // "CSI n ; m H": Cursor Position.
+  stdout.write("${CSI}${row};${column}H");
+}
+
+void gotoAlternativeScreenBuffer() {
+  // "CSI ? 1049 h": Enable alternative screen buffer.
+  stdout.write("${CSI}?1049h");
+}
+
+void gotoMainScreenBuffer() {
+  // "CSI ? 1049 l": Disable alternative screen buffer.
+  stdout.write("${CSI}?1049l");
+}
+
+void clearScreen() {
+  // "CSI n J": Erase in Display. Clears part of the screen.
+  // If n is 2, clear entire screen [...].
+  stdout.write("${CSI}2J");
+  setCursorPosition(0, 0);
+}
+
+void clearScreenAlt() {
+  setCursorPosition(0, 0);
+  // "CSI n J": Erase in Display. Clears part of the screen.
+  // If n is 0 (or missing), clear from cursor to end of screen.
+  stdout.write("${CSI}0J");
+  setCursorPosition(0, 0);
+}
+
+void hideCursor() {
+  // "CSI ? 25 l": DECTCEM Hides the cursor.
+  stdout.write("${CSI}?25l");
+}
+
+void showCursor() {
+  // "CSI ? 25 h": DECTCEM Shows the cursor, from the VT320.
+  stdout.write("${CSI}?25h");
+}
+
+void printAt(int row, int column, String s) {
+  setCursorPosition(row, column);
+  stdout.write(s);
+  setCursorPosition(stdout.terminalLines, stdout.terminalColumns);
+}
+
+String colorStringBlack(String s) {
+  // "CSI n m": Select Graphic Rendition.
+  // m = 0 = Reset / Normal.
+  // In in range [30, 37]: Set foreground color.
+  // m = 30 = black.
+  // In total => start black; print string; reset colors.
+  return "${CSI}30m${s}${CSI}0m";
+}
+
+String colorStringRed(String s) {
+  // See above.
+  // m = 31 = red.
+  return "${CSI}31m${s}${CSI}0m";
+}
+
+String colorStringGreen(String s) {
+  // See above.
+  // m = 32 = green.
+  return "${CSI}32m${s}${CSI}0m";
+}
+
+String colorStringYellow(String s) {
+  // See above.
+  // m = 33 = yellow.
+  return "${CSI}33m${s}${CSI}0m";
+}
+
+String colorStringBlue(String s) {
+  // See above.
+  // m = 34 = blue.
+  return "${CSI}34m${s}${CSI}0m";
+}
+
+String colorStringMagenta(String s) {
+  // See above.
+  // m = 35 = magenta.
+  return "${CSI}35m${s}${CSI}0m";
+}
+
+String colorStringCyan(String s) {
+  // See above.
+  // m = 36 = cyan.
+  return "${CSI}36m${s}${CSI}0m";
+}
+
+String colorStringWhite(String s) {
+  // m = 37 = white.
+  return "${CSI}37m${s}${CSI}0m";
+}
+
+String colorBackgroundBlack(String s) {
+  // "CSI n m": Select Graphic Rendition.
+  // m = 0 = Reset / Normal.
+  // In in range [40, 47]: Set background color.
+  // m = 40 = black.
+  // In total => start black; print string; reset colors.
+  return "${CSI}40m${s}${CSI}0m";
+}
+
+String colorBackgroundRed(String s) {
+  // See above.
+  // m = 41 = red.
+  return "${CSI}41m${s}${CSI}0m";
+}
+
+String colorBackgroundGreen(String s) {
+  // See above.
+  // m = 42 = green.
+  return "${CSI}42m${s}${CSI}0m";
+}
+
+String colorBackgroundYellow(String s) {
+  // See above.
+  // m = 43 = yellow.
+  return "${CSI}43m${s}${CSI}0m";
+}
+
+String colorBackgroundBlue(String s) {
+  // See above.
+  // m = 44 = blue.
+  return "${CSI}44m${s}${CSI}0m";
+}
+
+String colorBackgroundMagenta(String s) {
+  // See above.
+  // m = 45 = magenta.
+  return "${CSI}45m${s}${CSI}0m";
+}
+
+String colorBackgroundCyan(String s) {
+  // See above.
+  // m = 46 = cyan.
+  return "${CSI}46m${s}${CSI}0m";
+}
+
+String colorBackgroundWhite(String s) {
+  // See above.
+  // m = 47 = white.
+  return "${CSI}47m${s}${CSI}0m";
+}
+
+String boldString(String s) {
+  // "CSI n m": Select Graphic Rendition.
+  // m = 0 = Reset / Normal.
+  // m = 1 = bold.
+  return "${CSI}1m${s}${CSI}0m";
+}
+
+String italicString(String s) {
+  // "CSI n m": Select Graphic Rendition.
+  // m = 0 = Reset / Normal.
+  // m = 3 = italic.
+  return "${CSI}3m${s}${CSI}0m";
+}
+
+/// Note that this doesn't really seem to work.
+/// Wikipedia says "Style extensions exist for Kitty, VTE, mintty and iTerm2."
+String underlineString(String s) {
+  // "CSI n m": Select Graphic Rendition.
+  // m = 0 = Reset / Normal.
+  // m = 4 = italic.
+  return "${CSI}4m${s}${CSI}0m";
+}
+
+void drawBox(int row, int column, int length, int height) {
+  // Top line
+  setCursorPosition(row, column);
+  stdout.write("\u250c");
+  stdout.write("".padLeft(length - 2, "\u2500"));
+  stdout.write("\u2510");
+
+  // Left line
+  for (int i = 1; i < height - 1; i++) {
+    setCursorPosition(row + i, column);
+    stdout.write("\u2502");
+  }
+
+  // Right line
+  for (int i = 1; i < height - 1; i++) {
+    setCursorPosition(row + i, column + length - 1);
+    stdout.write("\u2502");
+  }
+
+  // Bottom line
+  setCursorPosition(row + height - 1, column);
+  stdout.write("\u2514");
+  stdout.write("".padLeft(length - 2, "\u2500"));
+  stdout.write("\u2518");
+}
diff --git a/pkg/front_end/tool/parser_direct_ast/viewer.dart b/pkg/front_end/tool/parser_direct_ast/viewer.dart
new file mode 100644
index 0000000..8dd3675
--- /dev/null
+++ b/pkg/front_end/tool/parser_direct_ast/viewer.dart
@@ -0,0 +1,223 @@
+// Copyright (c) 2020, 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 "dart:io";
+import 'dart:typed_data';
+import "package:front_end/src/fasta/util/direct_parser_ast.dart";
+import "package:front_end/src/fasta/util/direct_parser_ast_helper.dart";
+
+import "console_helper.dart";
+
+void main(List<String> args) {
+  Uri uri = Platform.script;
+  if (args.isNotEmpty) {
+    uri = Uri.base.resolve(args.first);
+  }
+  Uint8List bytes = new File.fromUri(uri).readAsBytesSync();
+  DirectParserASTContent ast = getAST(bytes);
+
+  Widget widget = new PairWidget(new AstWidget(ast), new StatusBar());
+  Application app = new Application(widget);
+  app.start();
+}
+
+class PairWidget extends Widget {
+  Widget first;
+  Widget second;
+
+  PairWidget(this.first, this.second);
+
+  @override
+  void print(Application app) {
+    first.print(app);
+    second.print(app);
+  }
+
+  @override
+  void input(Application app, List<int> data) {
+    if (data.length == 1 && String.fromCharCode(data[0]) == 'q') {
+      app.quit();
+      return;
+    }
+    first.input(app, data);
+    second.input(app, data);
+  }
+}
+
+class PrintedLine {
+  final String text;
+  final DirectParserASTContent ast;
+  final List<PrintedLine> parentShown;
+  final int selected;
+
+  PrintedLine.parent(this.parentShown, this.selected)
+      : text = "..",
+        ast = null;
+
+  PrintedLine.parentWithText(this.parentShown, this.text, this.selected)
+      : ast = null;
+
+  PrintedLine.ast(this.ast, this.text)
+      : parentShown = null,
+        selected = null;
+}
+
+class AstWidget extends Widget {
+  List<PrintedLine> shown;
+  int selected = 0;
+  int _latestSelected;
+  List<PrintedLine> _latestShown;
+
+  AstWidget(DirectParserASTContent ast) {
+    shown = [new PrintedLine.ast(ast, textualize(ast))];
+    _latestSelected = selected;
+    _latestShown = shown;
+  }
+
+  String textualize(DirectParserASTContent element,
+      {bool indent: false, bool withEndHeader: false}) {
+    String header;
+    switch (element.type) {
+      case DirectParserASTType.BEGIN:
+        header = "begin";
+        break;
+      case DirectParserASTType.END:
+        throw "Unexpected";
+      case DirectParserASTType.HANDLE:
+        header = "handle";
+        break;
+      case DirectParserASTType.DONE:
+        header = withEndHeader ? "end" : "";
+        break;
+    }
+    String extra = " ";
+    if (element.content != null) {
+      extra += element.content.first.arguments.toString();
+    }
+    return "${indent ? "  " : ""}"
+        "${header}${element.what} "
+        "${element.arguments.toString()}${extra}";
+  }
+
+  void clear(Application app) {
+    int realSelected = selected;
+    selected = -1;
+    for (int i = 0; i < app.lastKnownTerminalLines - 2; i++) {
+      printLineText(app, "", i);
+    }
+    selected = realSelected;
+  }
+
+  @override
+  void print(Application app, {bool totalRepaint: true}) {
+    if (!totalRepaint && _latestShown != shown) {
+      totalRepaint = true;
+    }
+    if (!totalRepaint && selected == _latestSelected) {
+      return;
+    }
+
+    if (totalRepaint) {
+      clear(app);
+      drawBox(
+          1, 1, app.lastKnownTerminalColumns, app.lastKnownTerminalLines - 1);
+      for (int i = 0; i < shown.length; i++) {
+        if (3 + i >= app.lastKnownTerminalLines) break;
+        printLine(app, i);
+      }
+    } else {
+      printLine(app, _latestSelected);
+      printLine(app, selected);
+    }
+    _latestShown = shown;
+    _latestSelected = selected;
+  }
+
+  void enter() {
+    // Enter selected line.
+    PrintedLine selectedElement = shown[selected];
+    if (selectedElement.parentShown != null) {
+      shown = selectedElement.parentShown;
+      selected = selectedElement.selected;
+    } else {
+      shown = [new PrintedLine.parent(shown, selected)];
+      List<DirectParserASTContent> children = selectedElement.ast.content;
+      if (children != null) {
+        for (int i = 0; i < children.length; i++) {
+          shown.add(new PrintedLine.ast(
+              children[i], textualize(children[i], indent: i > 0)));
+        }
+      }
+      shown.add(new PrintedLine.parentWithText(shown,
+          textualize(selectedElement.ast, withEndHeader: true), shown.length));
+      selected = 0;
+    }
+  }
+
+  void printLine(Application app, int lineNum) {
+    PrintedLine element = shown[lineNum];
+    String line = element.text;
+    printLineText(app, line, lineNum);
+  }
+
+  void printLineText(Application app, String line, int lineNum) {
+    if (line.length > app.lastKnownTerminalColumns - 2) {
+      line = line.substring(0, app.lastKnownTerminalColumns - 2);
+    } else {
+      line = line.padRight(app.lastKnownTerminalColumns - 2);
+    }
+    printAt(2 + lineNum, 2, ifSelected(line, selected == lineNum));
+  }
+
+  String ifSelected(String s, bool isSelected) {
+    if (isSelected) return colorBackgroundBlue(s);
+    return s;
+  }
+
+  @override
+  void input(Application app, List<int> data) {
+    if (data.length > 2 &&
+        data[0] == CSI.codeUnitAt(0) &&
+        data[1] == CSI.codeUnitAt(1)) {
+      // ANSI codes --- at least on my machine.
+      if (data[2] == 65 /* A */) {
+        // CSI _n_ A: Cursor Up (where n is optional defaulting to 1).
+        // Up arrow.
+        if (selected > 0) {
+          selected--;
+        }
+      } else if (data[2] == 66 /* B */) {
+        // CSI _n_ B: Cursor Down (where n is optional defaulting to 1).
+        // Down arrow.
+        if (selected < shown.length - 1) {
+          selected++;
+        }
+      }
+    } else if (data.length == 1 && data[0] == 10) {
+      // <Return>.
+      enter();
+    }
+    print(app, totalRepaint: false);
+  }
+}
+
+class StatusBar extends Widget {
+  List<int> latestInput;
+
+  @override
+  void print(Application app) {
+    String leftString = "> ${latestInput ?? ""}";
+    String rightString = "Press q or Ctrl-C to quit";
+    int padding =
+        app.lastKnownTerminalColumns - leftString.length - rightString.length;
+    printAt(app.lastKnownTerminalLines, 1,
+        colorBackgroundRed("$leftString${" " * padding}${rightString}"));
+  }
+
+  @override
+  void input(Application app, List<int> data) {
+    latestInput = data;
+    print(app);
+  }
+}
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 1253b7d..1aa2f44 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -14,28 +14,27 @@
 class TargetFlags {
   final bool trackWidgetCreation;
   final bool forceLateLoweringForTesting;
+  final bool forceStaticFieldLoweringForTesting;
   final bool forceNoExplicitGetterCallsForTesting;
   final bool enableNullSafety;
 
   const TargetFlags(
       {this.trackWidgetCreation = false,
       this.forceLateLoweringForTesting = false,
+      this.forceStaticFieldLoweringForTesting = false,
       this.forceNoExplicitGetterCallsForTesting = false,
       this.enableNullSafety = false});
 
   bool operator ==(other) {
-    if (other is! TargetFlags) return false;
-    TargetFlags o = other;
-    if (trackWidgetCreation != o.trackWidgetCreation) return false;
-    if (forceLateLoweringForTesting != o.forceLateLoweringForTesting) {
-      return false;
-    }
-    if (forceNoExplicitGetterCallsForTesting !=
-        o.forceNoExplicitGetterCallsForTesting) {
-      return false;
-    }
-    if (enableNullSafety != o.enableNullSafety) return false;
-    return true;
+    if (identical(this, other)) return true;
+    return other is TargetFlags &&
+        trackWidgetCreation == other.trackWidgetCreation &&
+        forceLateLoweringForTesting == other.forceLateLoweringForTesting &&
+        forceStaticFieldLoweringForTesting ==
+            other.forceStaticFieldLoweringForTesting &&
+        forceNoExplicitGetterCallsForTesting ==
+            other.forceNoExplicitGetterCallsForTesting &&
+        enableNullSafety == other.enableNullSafety;
   }
 
   int get hashCode {
@@ -44,6 +43,8 @@
     hash = 0x3fffffff &
         (hash * 31 + (hash ^ forceLateLoweringForTesting.hashCode));
     hash = 0x3fffffff &
+        (hash * 31 + (hash ^ forceStaticFieldLoweringForTesting.hashCode));
+    hash = 0x3fffffff &
         (hash * 31 + (hash ^ forceNoExplicitGetterCallsForTesting.hashCode));
     hash = 0x3fffffff & (hash * 31 + (hash ^ enableNullSafety.hashCode));
     return hash;
@@ -281,6 +282,10 @@
   /// details.
   bool get supportsLateFields;
 
+  /// Whether static fields with initializers in nnbd libraries should be
+  /// encoded using the late field lowering.
+  bool get useStaticFieldLowering;
+
   /// Whether calls to getters and fields should be encoded as a .call
   /// invocation on a property get.
   ///
@@ -344,6 +349,9 @@
   bool get supportsLateFields => !flags.forceLateLoweringForTesting;
 
   @override
+  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+
+  @override
   bool get supportsExplicitGetterCalls =>
       !flags.forceNoExplicitGetterCallsForTesting;
 
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 82af071..4920fce 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -54,6 +54,9 @@
   bool get supportsLateFields => !flags.forceLateLoweringForTesting;
 
   @override
+  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+
+  @override
   bool get supportsExplicitGetterCalls =>
       !flags.forceNoExplicitGetterCallsForTesting;
 
diff --git a/tools/VERSION b/tools/VERSION
index 08f1ccc..3d05ed3 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 81
+PRERELEASE 82
 PRERELEASE_PATCH 0
\ No newline at end of file
