diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d9e862..4b4cef9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -87,6 +87,9 @@
 * The `dart analyze` command has been extended to support specifying multiple
   files or directories to analyze; see also https://github.com/dart-lang/sdk/issues/45352.
 
+* The `dartanalyzer` command's JSON output mode has been changed to emit the JSON
+  output on stdout instead of stderr.
+
 #### Linter
 
 Updated the Linter to `1.6.1`, which includes changes that
diff --git a/DEPS b/DEPS
index 8a1a74c..177e023 100644
--- a/DEPS
+++ b/DEPS
@@ -109,7 +109,7 @@
   "dartdoc_rev" : "b733d4952dbd25374d55e28476a5f44bd60ed63f",
   "devtools_rev" : "b3bf672474a2bff82f33e1176aa803539baa0d60+1",
   "jsshell_tag": "version:88.0",
-  "ffi_rev": "f3346299c55669cc0db48afae85b8110088bf8da",
+  "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
   "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
   "glob_rev": "a62acf590598f458d3198d9f2930c1c9dd4b1379",
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
index 4d51a7b..b2359965 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
@@ -58,9 +58,22 @@
     }
 
     // Recovery
-    if (looksLikeStartOfNextTopLevelDeclaration(identifier) ||
-        isOneOfOrEof(identifier,
-            const ['<', '{', 'extends', 'with', 'implements', 'on'])) {
+    const List<String> afterIdentifier = const [
+      '<',
+      '{',
+      'extends',
+      'with',
+      'implements',
+      'on',
+      '=',
+    ];
+    if (identifier.isEof ||
+        (looksLikeStartOfNextTopLevelDeclaration(identifier) &&
+            (identifier.next == null ||
+                !isOneOfOrEof(identifier.next!, afterIdentifier))) ||
+        (isOneOfOrEof(identifier, afterIdentifier) &&
+            (identifier.next == null ||
+                !isOneOfOrEof(identifier.next!, afterIdentifier)))) {
       identifier = parser.insertSyntheticIdentifier(token, this,
           message: codes.templateExpectedIdentifier.withArguments(identifier));
     } else if (identifier.type.isBuiltIn) {
@@ -548,8 +561,16 @@
     }
 
     // Recovery
-    return parser.insertSyntheticIdentifier(token, this,
-        message: codes.templateExpectedIdentifier.withArguments(identifier));
+    if (!identifier.isKeywordOrIdentifier) {
+      identifier = parser.insertSyntheticIdentifier(token, this,
+          message: codes.templateExpectedIdentifier.withArguments(identifier));
+    } else {
+      // Use the keyword as the identifier.
+      parser.reportRecoverableErrorWithToken(
+          identifier, codes.templateExpectedIdentifierButGotKeyword);
+    }
+
+    return identifier;
   }
 }
 
diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/analysis_server/benchmark/integration/main.dart
index 8f0a438..b63675e 100644
--- a/pkg/analysis_server/benchmark/integration/main.dart
+++ b/pkg/analysis_server/benchmark/integration/main.dart
@@ -141,7 +141,7 @@
     perfArgs.inputPath = inputArg;
   }
 
-  for (String pair in args[MAP_OPTION]) {
+  for (var pair in args[MAP_OPTION]) {
     if (pair is String) {
       var index = pair.indexOf(',');
       if (index != -1 && !pair.contains(',', index + 1)) {
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 8c0af08..6db03d6 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -100,6 +100,9 @@
     if (_addIdentifierRegion_class(node)) {
       return;
     }
+    if (_addIdentifierRegion_extension(node)) {
+      return;
+    }
     if (_addIdentifierRegion_constructor(node)) {
       return;
     }
@@ -223,6 +226,29 @@
     return false;
   }
 
+  bool _addIdentifierRegion_extension(SimpleIdentifier node) {
+    var element = node.writeOrReadElement;
+    if (element is! ExtensionElement) {
+      return false;
+    }
+
+    // TODO(dantup): Right now there is no highlight type for extension, so
+    // bail out and do the default thing (which will be to return
+    // IDENTIFIER_DEFAULT). Adding EXTENSION requires coordination with
+    // IntelliJ + bumping protocol version.
+    if (!_computeSemanticTokens) {
+      return false;
+    }
+
+    return _addRegion_node(
+      node,
+      // TODO(dantup): Change this to EXTENSION and add to LSP mapping when
+      // we have it, but for now use CLASS (which is probably what we'll map it
+      // to for LSP semantic tokens anyway).
+      HighlightRegionType.CLASS,
+    );
+  }
+
   bool _addIdentifierRegion_field(SimpleIdentifier node) {
     var element = node.writeOrReadElement;
     if (element is FieldFormalParameterElement) {
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
index 0b7c262..ab5399b 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
@@ -97,6 +97,7 @@
   HighlightRegionType.ENUM: SemanticTokenTypes.enum_,
   HighlightRegionType.ENUM_CONSTANT: SemanticTokenTypes.enumMember,
   HighlightRegionType.FUNCTION_TYPE_ALIAS: SemanticTokenTypes.type,
+  HighlightRegionType.IDENTIFIER_DEFAULT: CustomSemanticTokenTypes.source,
   HighlightRegionType.INSTANCE_FIELD_DECLARATION: SemanticTokenTypes.variable,
   HighlightRegionType.INSTANCE_FIELD_REFERENCE: SemanticTokenTypes.variable,
   HighlightRegionType.INSTANCE_GETTER_DECLARATION: SemanticTokenTypes.property,
@@ -137,7 +138,7 @@
   HighlightRegionType.TYPE_NAME_DYNAMIC: SemanticTokenTypes.type,
   HighlightRegionType.TYPE_PARAMETER: SemanticTokenTypes.typeParameter,
   HighlightRegionType.UNRESOLVED_INSTANCE_MEMBER_REFERENCE:
-      SemanticTokenTypes.variable,
+      CustomSemanticTokenTypes.source,
   HighlightRegionType.VALID_STRING_ESCAPE: SemanticTokenTypes.string,
 };
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 256edee..b6d71a6 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
 
@@ -217,7 +218,6 @@
     }
     if (entity == null || entity is Declaration) {
       if (previousMember is FunctionDeclaration &&
-          previousMember.functionExpression is FunctionExpression &&
           previousMember.functionExpression.body.isEmpty) {
         _addSuggestion(Keyword.ASYNC);
         _addSuggestion2(ASYNC_STAR);
@@ -353,12 +353,52 @@
       _addSuggestion(Keyword.THIS);
     }
     final entity = this.entity;
-    if (entity is Token && entity.type == TokenType.CLOSE_PAREN) {
-      _addSuggestion(Keyword.COVARIANT);
-      _addSuggestion(Keyword.DYNAMIC);
-      _addSuggestion(Keyword.VOID);
-      if (request.featureSet.isEnabled(Feature.non_nullable)) {
-        _addSuggestion(Keyword.REQUIRED);
+    if (entity is Token) {
+      FormalParameter? lastParameter() {
+        var parameters = node.parameters;
+        if (parameters.isNotEmpty) {
+          return parameters.last.notDefault;
+        }
+        return null;
+      }
+
+      bool hasCovariant() {
+        var last = lastParameter();
+        return last != null &&
+            (last.covariantKeyword != null ||
+                last.identifier?.name == 'covariant');
+      }
+
+      bool hasRequired() {
+        var last = lastParameter();
+        return last != null &&
+            (last.requiredKeyword != null ||
+                last.identifier?.name == 'required');
+      }
+
+      var tokenType = entity.type;
+      if (tokenType == TokenType.CLOSE_PAREN) {
+        _addSuggestion(Keyword.DYNAMIC);
+        _addSuggestion(Keyword.VOID);
+        if (!hasCovariant()) {
+          _addSuggestion(Keyword.COVARIANT);
+        }
+      } else if (tokenType == TokenType.CLOSE_CURLY_BRACKET) {
+        _addSuggestion(Keyword.DYNAMIC);
+        _addSuggestion(Keyword.VOID);
+        if (!hasCovariant()) {
+          _addSuggestion(Keyword.COVARIANT);
+          if (request.featureSet.isEnabled(Feature.non_nullable) &&
+              !hasRequired()) {
+            _addSuggestion(Keyword.REQUIRED);
+          }
+        }
+      } else if (tokenType == TokenType.CLOSE_SQUARE_BRACKET) {
+        _addSuggestion(Keyword.DYNAMIC);
+        _addSuggestion(Keyword.VOID);
+        if (!hasCovariant()) {
+          _addSuggestion(Keyword.COVARIANT);
+        }
       }
     } else if (entity is FormalParameter) {
       var beginToken = entity.beginToken;
@@ -367,14 +407,18 @@
         _addSuggestion(Keyword.COVARIANT);
         _addSuggestion(Keyword.DYNAMIC);
         _addSuggestion(Keyword.VOID);
-        if (request.featureSet.isEnabled(Feature.non_nullable)) {
+        if (entity.isNamed &&
+            !entity.isRequired &&
+            request.featureSet.isEnabled(Feature.non_nullable)) {
           _addSuggestion(Keyword.REQUIRED);
         }
       } else if (entity is FunctionTypedFormalParameter) {
         _addSuggestion(Keyword.COVARIANT);
         _addSuggestion(Keyword.DYNAMIC);
         _addSuggestion(Keyword.VOID);
-        if (request.featureSet.isEnabled(Feature.non_nullable)) {
+        if (entity.isNamed &&
+            !entity.isRequired &&
+            request.featureSet.isEnabled(Feature.non_nullable)) {
           _addSuggestion(Keyword.REQUIRED);
         }
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index e4b55f8..1e367b0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -6,7 +6,6 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -119,10 +118,6 @@
         !constructorElement.isSynthetic) {
       return;
     }
-    // prepare target
-    if (constructorElement.enclosingElement is! ClassElement) {
-      return;
-    }
 
     // prepare target ClassDeclaration
     var targetElement = constructorElement.enclosingElement;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
index 93fd327..7b1fbde 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
@@ -58,7 +58,8 @@
       final prefix = insertDesc.prefix;
       final comment = '// $ignoreCommentType: $_code';
       final suffix = insertDesc.suffix;
-      builder.addSimpleInsertion(lineOffset, '$prefix$indent$comment\n$suffix');
+      builder.addSimpleInsertion(
+          lineOffset, '$prefix$indent$comment$eol$suffix');
     });
   }
 }
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index ed99582..1b5d9a5 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -396,9 +396,15 @@
       _Token("'../file.dart'", SemanticTokenTypes.string),
       _Token('if', SemanticTokenTypes.keyword,
           [CustomSemanticTokenModifiers.control]),
+      _Token('dart', CustomSemanticTokenTypes.source),
+      _Token('library', CustomSemanticTokenTypes.source),
+      _Token('io', CustomSemanticTokenTypes.source),
       _Token("'file_io.dart'", SemanticTokenTypes.string),
       _Token('if', SemanticTokenTypes.keyword,
           [CustomSemanticTokenModifiers.control]),
+      _Token('dart', CustomSemanticTokenTypes.source),
+      _Token('library', CustomSemanticTokenTypes.source),
+      _Token('html', CustomSemanticTokenTypes.source),
       _Token("'file_html.dart'", SemanticTokenTypes.string),
       _Token('library', SemanticTokenTypes.keyword),
       _Token('foo', SemanticTokenTypes.namespace),
@@ -412,6 +418,26 @@
     expect(decoded, equals(expected));
   }
 
+  Future<void> test_extension() async {
+    final content = '''
+    extension A on String {}
+    ''';
+
+    final expected = [
+      _Token('extension', SemanticTokenTypes.keyword),
+      _Token('A', SemanticTokenTypes.class_),
+      _Token('on', SemanticTokenTypes.keyword),
+      _Token('String', SemanticTokenTypes.class_)
+    ];
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+
+    final tokens = await getSemanticTokens(mainFileUri);
+    final decoded = decodeSemanticTokens(content, tokens);
+    expect(decoded, equals(expected));
+  }
+
   Future<void> test_fromPlugin() async {
     final pluginAnalyzedFilePath = join(projectFolderPath, 'lib', 'foo.foo');
     final pluginAnalyzedFileUri = Uri.file(pluginAnalyzedFilePath);
@@ -1002,6 +1028,48 @@
     final decoded = decodeSemanticTokens(content, tokens);
     expect(decoded, equals(expected));
   }
+
+  Future<void> test_unresolvedOrInvalid() async {
+    // Unresolved/invalid names should be marked as "source", which is used to
+    // mark up code the server thinks should be uncolored (without this, a
+    // clients other grammars would show through, losing the benefit from having
+    // resolved the code).
+    final content = '''
+    main() {
+      int a;
+      a.foo().bar.baz();
+
+      dynamic b;
+      b.foo().bar.baz();
+    }
+    ''';
+
+    final expected = [
+      _Token('main', SemanticTokenTypes.function,
+          [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
+      _Token('int', SemanticTokenTypes.class_),
+      _Token('a', SemanticTokenTypes.variable,
+          [SemanticTokenModifiers.declaration]),
+      _Token('a', SemanticTokenTypes.variable),
+      _Token('foo', CustomSemanticTokenTypes.source),
+      _Token('bar', CustomSemanticTokenTypes.source),
+      _Token('baz', CustomSemanticTokenTypes.source),
+      _Token('dynamic', SemanticTokenTypes.type),
+      _Token('b', SemanticTokenTypes.variable,
+          [SemanticTokenModifiers.declaration]),
+      _Token('b', SemanticTokenTypes.variable),
+      _Token('foo', CustomSemanticTokenTypes.source),
+      _Token('bar', CustomSemanticTokenTypes.source),
+      _Token('baz', CustomSemanticTokenTypes.source),
+    ];
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+
+    final tokens = await getSemanticTokens(mainFileUri);
+    final decoded = decodeSemanticTokens(content, tokens);
+    expect(decoded, equals(expected));
+  }
 }
 
 class _Token {
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 78b1ba8..721ab0f 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -827,11 +827,7 @@
     final path = Uri.parse(edit.textDocument.uri).toFilePath();
     final expectedVersion = expectedVersions[path];
 
-    if (edit.textDocument is OptionalVersionedTextDocumentIdentifier) {
-      expect(edit.textDocument.version, equals(expectedVersion));
-    } else {
-      throw 'Document identifier for $path was not versioned (expected version $expectedVersion)';
-    }
+    expect(edit.textDocument.version, equals(expectedVersion));
   }
 
   /// Validates the document versions for a set of edits match the versions in
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 6792f3e..b8d35f4 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -75,12 +75,8 @@
       Keyword.COVARIANT,
       Keyword.DYNAMIC,
       Keyword.THIS,
-      Keyword.DYNAMIC,
       Keyword.VOID
     ];
-    if (isEnabled(ExperimentalFeatures.non_nullable)) {
-      keywords.add(Keyword.REQUIRED);
-    }
     return keywords;
   }
 
@@ -175,9 +171,6 @@
 
   List<Keyword> get methodParameter {
     var keywords = <Keyword>[Keyword.COVARIANT, Keyword.DYNAMIC, Keyword.VOID];
-    if (isEnabled(ExperimentalFeatures.non_nullable)) {
-      keywords.add(Keyword.REQUIRED);
-    }
     return keywords;
   }
 
diff --git a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
index 0bcf127..f8171dc 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
@@ -15,6 +15,7 @@
     defineReflectiveTests(ConstructorCompletionTest);
     defineReflectiveTests(ExpressionFunctionBodyCompletionTest);
     defineReflectiveTests(ExtensionCompletionTest);
+    defineReflectiveTests(FormalParameterCompletionTest);
     defineReflectiveTests(GenericTypeAliasCompletionTest);
     defineReflectiveTests(PropertyAccessCompletionTest);
     defineReflectiveTests(RedirectedConstructorCompletionTest);
@@ -295,6 +296,86 @@
 }
 
 @reflectiveTest
+class FormalParameterCompletionTest extends CompletionTestCase {
+  Future<void> test_named_last() async {
+    addTestFile('''
+void f({int? a, ^}) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_named_last_afterCovariant() async {
+    addTestFile('''
+void f({covariant ^}) {}
+''');
+    await getSuggestions();
+    assertHasNoCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasNoCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_named_last_afterRequired() async {
+    addTestFile('''
+void f({required ^}) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasNoCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_named_only() async {
+    addTestFile('''
+void f({^}) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_optionalPositional_last() async {
+    addTestFile('''
+void f([int a, ^]) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasNoCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_optionalPositional_only() async {
+    addTestFile('''
+void f([^]) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasNoCompletion('required');
+    assertHasCompletion('void');
+  }
+
+  Future<void> test_requiredPositional_only() async {
+    addTestFile('''
+void f(^) {}
+''');
+    await getSuggestions();
+    assertHasCompletion('covariant');
+    assertHasCompletion('dynamic');
+    assertHasNoCompletion('required');
+    assertHasCompletion('void');
+  }
+}
+
+@reflectiveTest
 class GenericTypeAliasCompletionTest extends CompletionTestCase {
   Future<void> test_returnType_void() async {
     addTestFile('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index fd320f2..0d952a4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -182,7 +182,7 @@
 
   Future<void> addUnimportedFile(String filePath, String content) async {
     addSource(filePath, content);
-    var result = await session.getResolvedUnit2(filePath);
+    var result = await session.getResolvedUnit2(convertPath(filePath));
     extensionCache.cacheFromResult(result as ResolvedUnitResult);
   }
 
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index d03e08c..a2ca408 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -26,6 +26,9 @@
   /// Feature information for extension methods.
   static final extension_methods = ExperimentalFeatures.extension_methods;
 
+  /// Feature information for extension types.
+  static final extension_types = ExperimentalFeatures.extension_types;
+
   /// Feature information for generic metadata.
   static final generic_metadata = ExperimentalFeatures.generic_metadata;
 
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 5bcacde..af873be 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -190,9 +190,7 @@
     for (List<_TypeToConvert> typeGroup in typeGroups.values) {
       if (typeGroup.length == 1) {
         _TypeToConvert typeToConvert = typeGroup[0];
-        if (typeToConvert.type is DartType) {
-          arguments[typeToConvert.index] = typeToConvert.displayName;
-        }
+        arguments[typeToConvert.index] = typeToConvert.displayName;
       } else {
         Map<String, Set<Element>> nameToElementMap = {};
         for (_TypeToConvert typeToConvert in typeGroup) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index f4555e0..c1dfa14 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -432,31 +432,28 @@
                 root.workspace.createSourceFactory(null, null))
             .getOptionsFromFile(optionsFile);
 
-        if (doc is YamlMap) {
-          var analyzerOptions = doc.valueAt(AnalyzerOptions.analyzer);
-          if (analyzerOptions is YamlMap) {
-            var excludeOptions =
-                analyzerOptions.valueAt(AnalyzerOptions.exclude);
-            if (excludeOptions is YamlList) {
-              var pathContext = resourceProvider.pathContext;
+        var analyzerOptions = doc.valueAt(AnalyzerOptions.analyzer);
+        if (analyzerOptions is YamlMap) {
+          var excludeOptions = analyzerOptions.valueAt(AnalyzerOptions.exclude);
+          if (excludeOptions is YamlList) {
+            var pathContext = resourceProvider.pathContext;
 
-              void addGlob(List<String> components) {
-                var pattern = posix.joinAll(components);
-                patterns.add(Glob(pattern, context: pathContext));
+            void addGlob(List<String> components) {
+              var pattern = posix.joinAll(components);
+              patterns.add(Glob(pattern, context: pathContext));
+            }
+
+            for (String excludedPath in excludeOptions.whereType<String>()) {
+              var excludedComponents = posix.split(excludedPath);
+              if (pathContext.isRelative(excludedPath)) {
+                excludedComponents = [
+                  ...pathContext.split(optionsFile.parent2.path),
+                  ...excludedComponents,
+                ];
               }
-
-              for (String excludedPath in excludeOptions.whereType<String>()) {
-                var excludedComponents = posix.split(excludedPath);
-                if (pathContext.isRelative(excludedPath)) {
-                  excludedComponents = [
-                    ...pathContext.split(optionsFile.parent2.path),
-                    ...excludedComponents,
-                  ];
-                }
-                addGlob(excludedComponents);
-                if (excludedComponents.last == '**') {
-                  addGlob(excludedComponents..removeLast());
-                }
+              addGlob(excludedComponents);
+              if (excludedComponents.last == '**') {
+                addGlob(excludedComponents..removeLast());
               }
             }
           }
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index e728899..140a1a7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -752,7 +752,7 @@
     }
 
     Element? element = node.writeOrReadElement;
-    if (node is SimpleIdentifier && element is ParameterElement) {
+    if (element is ParameterElement) {
       element = declaredParameterElement(node, element);
     }
 
@@ -911,7 +911,7 @@
     var seenConstructors = <ConstructorElement?>{};
     while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
       var enclosing = constructor.enclosingElement;
-      if (enclosing is ClassElement && enclosing.isMixinApplication) {
+      if (enclosing.isMixinApplication) {
         var superInvocation = constructor.constantInitializers
             .whereType<SuperConstructorInvocation>()
             .singleOrNull;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 3cb56a5..e10f9be 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -676,7 +676,11 @@
         errorListener: errorListener,
         featureSet: unit.featureSet,
         nameScope: _libraryElement.scope,
-        elementWalker: ElementWalker.forCompilationUnit(unitElement),
+        elementWalker: ElementWalker.forCompilationUnit(
+          unitElement,
+          libraryFilePath: _library.path,
+          unitFilePath: file.path,
+        ),
       ),
     );
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 6d16a45..3bc2bc1 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -118,10 +118,11 @@
 
   @override
   List<AstNode> get sortedCommentAndAnnotations {
-    return <AstNode>[]
-      ..add(_comment!)
-      ..addAll(_metadata)
-      ..sort(AstNode.LEXICAL_ORDER);
+    var comment = _comment;
+    return <AstNode>[
+      if (comment != null) comment,
+      ..._metadata,
+    ]..sort(AstNode.LEXICAL_ORDER);
   }
 
   /// Return a holder of child entities that subclasses can add to.
@@ -7713,10 +7714,11 @@
 
   @override
   List<AstNode> get sortedCommentAndAnnotations {
-    return <AstNode>[]
-      ..add(_comment!)
-      ..addAll(_metadata)
-      ..sort(AstNode.LEXICAL_ORDER);
+    var comment = _comment;
+    return <AstNode>[
+      if (comment != null) comment,
+      ..._metadata,
+    ]..sort(AstNode.LEXICAL_ORDER);
   }
 
   ChildEntities get _childEntities {
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 68ce3c5..dfad758 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -209,8 +209,7 @@
     } else if (constant is ElementAnnotationImpl) {
       var constNode = constant.annotationAst;
       var element = constant.element;
-      if (element is PropertyAccessorElement &&
-          element.variable is VariableElement) {
+      if (element is PropertyAccessorElement) {
         // The annotation is a reference to a compile-time constant variable.
         // Just copy the evaluation result.
         VariableElementImpl variableElement =
@@ -335,8 +334,7 @@
     } else if (constant is ElementAnnotationImpl) {
       Annotation constNode = constant.annotationAst;
       var element = constant.element;
-      if (element is PropertyAccessorElement &&
-          element.variable is VariableElement) {
+      if (element is PropertyAccessorElement) {
         // The annotation is a reference to a compile-time constant variable,
         // so it depends on the variable.
         callback(element.variable.declaration);
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index 2b9d8a0..df0e9e2 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -206,11 +206,7 @@
         if (parameterVariance.isCovariant) {
           args.add(typeSystem.getLeastUpperBound(args1[i], args2[i]));
         } else if (parameterVariance.isContravariant) {
-          if (typeSystem is TypeSystemImpl) {
-            args.add(typeSystem.getGreatestLowerBound(args1[i], args2[i]));
-          } else {
-            args.add(typeSystem.getLeastUpperBound(args1[i], args2[i]));
-          }
+          args.add(typeSystem.getGreatestLowerBound(args1[i], args2[i]));
         } else if (parameterVariance.isInvariant) {
           if (!typeSystem.isSubtypeOf(args1[i], args2[i]) ||
               !typeSystem.isSubtypeOf(args2[i], args1[i])) {
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 0534495..14038d6 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -2342,7 +2342,7 @@
   // this diagnostic:
   //
   // ```dart
-  // const x = 4;
+  // const Object x = 4;
   // const y = [!x is int!] ? 0 : 1;
   // ```
   //
@@ -2362,7 +2362,7 @@
   // [constant context][]:
   //
   // ```dart
-  // const x = 4;
+  // const Object x = 4;
   // var y = x is int ? 0 : 1;
   // ```
   static const HintCode SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT = HintCode(
diff --git a/pkg/analyzer/lib/src/error/assignment_verifier.dart b/pkg/analyzer/lib/src/error/assignment_verifier.dart
index 4b64931..a995629 100644
--- a/pkg/analyzer/lib/src/error/assignment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/assignment_verifier.dart
@@ -102,7 +102,7 @@
       }
     } else if (recovery is MultiplyDefinedElementImpl) {
       // Will be reported in ErrorVerifier.
-    } else if (node is SimpleIdentifier) {
+    } else {
       if (node.isSynthetic) {
         return;
       }
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index cebd550..ff183f5 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -174,10 +174,8 @@
     } else if (node is MethodInvocation &&
         displayName == FunctionElement.CALL_METHOD_NAME) {
       var invokeType = node.staticInvokeType as InterfaceType;
-      if (invokeType is InterfaceType) {
-        var invokeClass = invokeType.element;
-        displayName = "${invokeClass.name}.${element.displayName}";
-      }
+      var invokeClass = invokeType.element;
+      displayName = "${invokeClass.name}.${element.displayName}";
     }
     var library = element is LibraryElement ? element : element.library;
     var message = _deprecatedMessage(element);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 88a50ee..498b57b 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -143,6 +143,9 @@
   /// `true` if constructor tearoffs are enabled
   final bool enableConstructorTearoffs;
 
+  /// `true` if extension types are enabled;
+  final bool enableExtensionTypes;
+
   final FeatureSet _featureSet;
 
   AstBuilder(ErrorReporter errorReporter, this.fileUri, this.isFullAst,
@@ -160,6 +163,7 @@
         enableVariance = _featureSet.isEnabled(Feature.variance),
         enableConstructorTearoffs =
             _featureSet.isEnabled(Feature.constructor_tearoffs),
+        enableExtensionTypes = _featureSet.isEnabled(Feature.extension_types),
         uri = uri ?? fileUri;
 
   NodeList<ClassMember> get currentDeclarationMembers {
@@ -1189,8 +1193,8 @@
   @override
   void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
       Token onKeyword, Token token) {
-    if (typeKeyword != null && !enableConstructorTearoffs) {
-      var feature = ExperimentalFeatures.constructor_tearoffs;
+    if (typeKeyword != null && !enableExtensionTypes) {
+      var feature = ExperimentalFeatures.extension_types;
       handleRecoverableError(
           templateExperimentNotEnabled.withArguments(
             feature.enableString,
@@ -3031,9 +3035,7 @@
 
       List<Expression> expressions = <Expression>[];
       for (var elem in elements) {
-        if (elem is Expression) {
-          expressions.add(elem);
-        }
+        expressions.add(elem);
       }
 
       push(ast.listLiteral(
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index a654bc8..611c2c0 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -10,6 +10,8 @@
 class ElementWalker {
   /// The element whose child elements are being walked.
   final Element element;
+  String? libraryFilePath;
+  String? unitFilePath;
 
   List<PropertyAccessorElement>? _accessors;
   int _accessorIndex = 0;
@@ -48,7 +50,8 @@
 
   /// Creates an [ElementWalker] which walks the child elements of a compilation
   /// unit element.
-  ElementWalker.forCompilationUnit(CompilationUnitElement element)
+  ElementWalker.forCompilationUnit(CompilationUnitElement element,
+      {this.libraryFilePath, this.unitFilePath})
       : element = element,
         _accessors = element.accessors.where(_isNotSynthetic).toList(),
         _classes = element.classes,
@@ -119,7 +122,22 @@
 
   /// Returns the next non-synthetic child of [element] which is a class; throws
   /// an [IndexError] if there are no more.
-  ClassElementImpl getClass() => _classes![_classIndex++] as ClassElementImpl;
+  ClassElementImpl getClass() {
+    // TODO(scheglov) Remove after fixing.
+    // https://github.com/dart-lang/sdk/issues/46392
+    var classes = _classes;
+    if (classes != null && _classIndex >= classes.length) {
+      throw StateError(
+        '[_classIndex: $_classIndex]'
+        '[classes.length: ${classes.length}]'
+        '[classes: $classes]'
+        '[element.source: ${element.source?.fullName}]'
+        '[libraryFilePath: $libraryFilePath]'
+        '[unitFilePath: $unitFilePath]',
+      );
+    }
+    return _classes![_classIndex++] as ClassElementImpl;
+  }
 
   /// Returns the next non-synthetic child of [element] which is a constructor;
   /// throws an [IndexError] if there are no more.
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 69bdf31..cc5fc13 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -190,6 +190,10 @@
               prefixElement.getGetter(name.name) ??
               prefixElement.getSetter(name.name) ??
               prefixElement.getNamedConstructor(name.name);
+        } else if (prefixElement is ExtensionElement) {
+          name.staticElement = prefixElement.getMethod(name.name) ??
+              prefixElement.getGetter(name.name) ??
+              prefixElement.getSetter(name.name);
         } else {
           // TODO(brianwilkerson) Report this error.
         }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index cf4ecd8..ff28b32 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1500,24 +1500,16 @@
     if (expression is! SimpleIdentifier) return;
 
     // Already handled in the assignment resolver.
-    if (expression is SimpleIdentifier &&
-        expression.parent is AssignmentExpression) {
+    if (expression.parent is AssignmentExpression) {
       return;
     }
 
     // prepare element
-    Element? element;
-    AstNode highlightedNode = expression;
-    if (expression is Identifier) {
-      element = expression.staticElement;
-      if (expression is PrefixedIdentifier) {
-        var prefixedIdentifier = expression as PrefixedIdentifier;
-        highlightedNode = prefixedIdentifier.identifier;
-      }
-    } else if (expression is PropertyAccess) {
-      var propertyAccess = expression as PropertyAccess;
-      element = propertyAccess.propertyName.staticElement;
-      highlightedNode = propertyAccess.propertyName;
+    var highlightedNode = expression;
+    var element = expression.staticElement;
+    if (expression is PrefixedIdentifier) {
+      var prefixedIdentifier = expression as PrefixedIdentifier;
+      highlightedNode = prefixedIdentifier.identifier;
     }
     // check if element is assignable
     if (element is VariableElement) {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 098b70f..9a9dd13 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/summary2/ast_binary_tag.dart';
 import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
 import 'package:analyzer/src/summary2/bundle_reader.dart';
+import 'package:analyzer/src/summary2/not_serializable_nodes.dart';
 import 'package:analyzer/src/summary2/unlinked_token_type.dart';
 import 'package:collection/collection.dart';
 
@@ -80,7 +81,7 @@
         return _readFieldFormalParameter();
       case Tag.FormalParameterList:
         return _readFormalParameterList();
-      case Tag.FunctionExpression:
+      case Tag.FunctionExpressionStub:
         return _readFunctionExpression();
       case Tag.FunctionExpressionInvocation:
         return _readFunctionExpressionInvocation();
@@ -182,24 +183,6 @@
     return node;
   }
 
-  FunctionBody _functionBodyForFlags(int flags) {
-    if (AstBinaryFlags.isNative(flags)) {
-      return AstTestFactory.nativeFunctionBody('');
-    } else if (AstBinaryFlags.isAbstract(flags)) {
-      return AstTestFactory.emptyFunctionBody();
-    } else {
-      return astFactory.blockFunctionBody(
-        AstBinaryFlags.isAsync(flags) ? Tokens.async_() : null,
-        AstBinaryFlags.isGenerator(flags) ? Tokens.star() : null,
-        astFactory.block(
-          Tokens.openCurlyBracket(),
-          const <Statement>[],
-          Tokens.closeCurlyBracket(),
-        ),
-      );
-    }
-  }
-
   AdjacentStrings _readAdjacentStrings() {
     var components = _readNodeList<StringLiteral>();
     var node = astFactory.adjacentStrings(components);
@@ -556,16 +539,7 @@
   }
 
   FunctionExpression _readFunctionExpression() {
-    var flags = _readByte();
-    var typeParameters = _readOptionalNode() as TypeParameterList?;
-    var formalParameters = _readOptionalNode() as FormalParameterList?;
-    var body = _functionBodyForFlags(flags);
-
-    return astFactory.functionExpression(
-      typeParameters,
-      formalParameters,
-      body,
-    );
+    return emptyFunctionExpression();
   }
 
   FunctionExpressionInvocation _readFunctionExpressionInvocation() {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
index b4e509c..deb6b47 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
@@ -47,7 +47,7 @@
   static const int FormalParameterList = 17;
   static const int FunctionDeclaration_getter = 57;
   static const int FunctionDeclaration_setter = 58;
-  static const int FunctionExpression = 19;
+  static const int FunctionExpressionStub = 19;
   static const int FunctionExpressionInvocation = 93;
   static const int FunctionTypedFormalParameter = 20;
   static const int GenericFunctionType = 21;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 45e78a4..e5dca3f 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -294,7 +294,7 @@
 
   @override
   void visitFunctionExpression(FunctionExpression node) {
-    _writeNotSerializableExpression();
+    _writeByte(Tag.FunctionExpressionStub);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/detach_nodes.dart b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
index 3f93f01..7f375e4 100644
--- a/pkg/analyzer/lib/src/summary2/detach_nodes.dart
+++ b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/summary2/not_serializable_nodes.dart';
 
 /// Elements have references to AST nodes, for example initializers of constant
 /// variables. These nodes are attached to the whole compilation unit, and
@@ -64,6 +65,10 @@
       var initializer = element.constantInitializer;
       if (initializer is ExpressionImpl) {
         _detachNode(initializer);
+
+        initializer = replaceNotSerializableNodes(initializer);
+        element.constantInitializer = initializer;
+
         ConstantContextForExpressionImpl(initializer);
       }
     }
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 9b1bcc9..1dd1e5f 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -1734,6 +1734,18 @@
   }
 
   @override
+  void visitFunctionExpression(FunctionExpression node) {
+    // We store FunctionExpression(s) as empty stubs: `() {}`.
+    // We just need it to have right code range, so we apply 2 offsets.
+    node.parameters?.leftParenthesis.offset = _iterator.take() ?? 0;
+
+    var body = node.body;
+    if (body is BlockFunctionBody) {
+      body.block.rightBracket.offset = _iterator.take() ?? 0;
+    }
+  }
+
+  @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     super.visitSimpleFormalParameter(node);
 
@@ -1819,6 +1831,13 @@
   }
 
   @override
+  void visitFormalParameterList(FormalParameterList node) {
+    _tokenOrNull(node.leftParenthesis);
+    _tokenOrNull(node.rightParenthesis);
+    super.visitFormalParameterList(node);
+  }
+
+  @override
   void visitGenericFunctionType(GenericFunctionType node) {
     _tokenOrNull(node.functionKeyword);
     super.visitGenericFunctionType(node);
@@ -2004,6 +2023,12 @@
   void handleToken(Token token) {
     offsets.add(token.offset);
   }
+
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    offsets.add(node.offset);
+    offsets.add(node.end - 1);
+  }
 }
 
 class _SafeListIterator<T> {
diff --git a/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart b/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart
new file mode 100644
index 0000000..95e3adf
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/ast_factory.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
+
+FunctionExpressionImpl emptyFunctionExpression() {
+  return astFactory.functionExpression(
+    null,
+    astFactory.formalParameterList(
+      Tokens.openParenthesis(),
+      [],
+      null,
+      null,
+      Tokens.closeParenthesis(),
+    ),
+    astFactory.blockFunctionBody(
+      null,
+      null,
+      astFactory.block(
+        Tokens.openCurlyBracket(),
+        [],
+        Tokens.closeCurlyBracket(),
+      ),
+    ),
+  );
+}
+
+/// We cannot serialize [FunctionExpression], but we need to have some node
+/// with the same source range for error reporting. So, we replace them with
+/// empty [FunctionExpression]s that have the same offset and length.
+ExpressionImpl replaceNotSerializableNodes(ExpressionImpl node) {
+  if (node is FunctionExpressionImpl) {
+    return FunctionExpressionReplacementVisitor._replacement(node);
+  }
+  node.accept(FunctionExpressionReplacementVisitor());
+  return node;
+}
+
+class FunctionExpressionReplacementVisitor extends RecursiveAstVisitor<void> {
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    NodeReplacer.replace(node, _replacement(node));
+  }
+
+  static FunctionExpressionImpl _replacement(FunctionExpression from) {
+    var to = emptyFunctionExpression();
+    to.parameters?.leftParenthesis.offset = from.offset;
+
+    var toBody = to.body;
+    if (toBody is BlockFunctionBodyImpl) {
+      toBody.block.rightBracket.offset = from.end - 1;
+    }
+
+    return to;
+  }
+}
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index 8543179..c9017ca 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -53,13 +53,10 @@
 
   Variance _compute(TypeParameterElement variable, DartType? type) {
     if (type is TypeParameterType) {
-      var element = type.element;
-      if (element is TypeParameterElement) {
-        if (element == variable) {
-          return Variance.covariant;
-        } else {
-          return Variance.unrelated;
-        }
+      if (type.element == variable) {
+        return Variance.covariant;
+      } else {
+        return Variance.unrelated;
       }
     } else if (type is NamedTypeBuilder) {
       var element = type.element;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 566e8d7..11c7031e 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -188,6 +188,10 @@
     return _node(search, (n) => n is IntegerLiteral);
   }
 
+  IsExpression isExpression(String search) {
+    return _node(search, (n) => n is IsExpression);
+  }
+
   Label label(String search) {
     return _node(search, (n) => n is Label);
   }
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index 5fcfbc6..e7da3d0 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -30,6 +30,7 @@
     defineReflectiveTests(MethodDeclarationTest);
     defineReflectiveTests(MethodInvocationTest);
     defineReflectiveTests(NodeListTest);
+    defineReflectiveTests(NormalFormalParameterTest);
     defineReflectiveTests(PreviousTokenTest);
     defineReflectiveTests(PropertyAccessTest);
     defineReflectiveTests(SimpleIdentifierTest);
@@ -918,6 +919,19 @@
 }
 
 @reflectiveTest
+class NormalFormalParameterTest extends ParserTestCase {
+  test_sortedCommentAndAnnotations_noComment() {
+    var result = parseString(content: '''
+void f(int i) {}
+''');
+    var function = result.unit.declarations[0] as FunctionDeclaration;
+    var parameters = function.functionExpression.parameters;
+    var parameter = parameters?.parameters[0] as NormalFormalParameter;
+    expect(parameter.sortedCommentAndAnnotations, isEmpty);
+  }
+}
+
+@reflectiveTest
 class PreviousTokenTest {
   static final String contents = '''
 class A {
@@ -1721,6 +1735,15 @@
     decl.documentationComment = comment;
     expect(decl.documentationComment, isNotNull);
   }
+
+  test_sortedCommentAndAnnotations_noComment() {
+    var result = parseString(content: '''
+int i = 0;
+''');
+    var variables = result.unit.declarations[0] as TopLevelVariableDeclaration;
+    var variable = variables.variables.variables[0];
+    expect(variable.sortedCommentAndAnnotations, isEmpty);
+  }
 }
 
 class _AssignmentKind {
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 3b69c9b8..ba86bc2 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -23,6 +23,7 @@
 class NonConstantValueInInitializer extends PubPackageResolutionTest {
   test_intLiteralInDoubleContext_const_exact() async {
     await assertNoErrorsInCode(r'''
+// @dart = 2.9
 const double x = 0;
 class C {
   const C(double y) : assert(y is double), assert(x is double);
@@ -42,6 +43,7 @@
 
   test_isCheckInConstAssert() async {
     await assertNoErrorsInCode(r'''
+// @dart = 2.9
 class C {
   const C() : assert(1 is int);
 }
@@ -1376,6 +1378,7 @@
 
   test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
     await assertNoErrorsInCode('''
+// @dart = 2.9
 typedef Foo<S> = S Function<T>(T x);
 
 main(Object p) {
@@ -1393,6 +1396,7 @@
 
   test_genericTypeAlias_castsAndTypeChecks_noTypeParameters() async {
     await assertNoErrorsInCode('''
+// @dart = 2.9
 typedef Foo = T Function<T>(T x);
 
 main(Object p) {
@@ -3084,6 +3088,7 @@
 
   test_typePromotion_if_is_and_subThenSuper() async {
     await assertNoErrorsInCode(r'''
+// @dart = 2.9
 class A {
   var a;
 }
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index e4b62f1..385bb7d 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -60,8 +60,6 @@
       if (_knownExceptions == null || !_knownExceptions!.contains(node)) {
         _unresolvedNodes.add(node);
       }
-    } else if (elementAnnotation is! ElementAnnotation) {
-      _wrongTypedNodes.add(node);
     }
   }
 
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 981d29c..6000f44 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -311,6 +311,57 @@
 class C {}''');
   }
 
+  test_commentReference_extension_getter() async {
+    await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+  String get b => '';
+}
+''');
+
+    final classA = findNode.classDeclaration('class A');
+    final reference = classA.documentationComment!.references.single;
+
+    expect(
+        reference.identifier.staticElement, findElement.getter('b', of: 'E'));
+  }
+
+  test_commentReference_extension_method() async {
+    await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+  void b() {}
+}
+''');
+
+    final classA = findNode.classDeclaration('class A');
+    final reference = classA.documentationComment!.references.single;
+
+    expect(
+        reference.identifier.staticElement, findElement.method('b', of: 'E'));
+  }
+
+  test_commentReference_extension_setter() async {
+    await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+  set b(String x) {}
+}
+''');
+
+    final classA = findNode.classDeclaration('class A');
+    final reference = classA.documentationComment!.references.single;
+
+    expect(
+        reference.identifier.staticElement, findElement.setter('b', of: 'E'));
+  }
+
   test_continueTarget_labeled() async {
     // Verify that the target of the label is correctly found and is recorded
     // as the unlabeled portion of the statement.
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 62bdd51..5853f91 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -3798,72 +3798,42 @@
 
   test_isExpression() async {
     await assertNoErrorsInCode(r'''
-void main() {
-  var v = 42;
-  v is num;
+void f(var a) {
+  a is num;
 }
 ''');
 
-    List<Statement> statements = _getMainStatements(result);
+    var isExpression = findNode.isExpression('a is num');
+    expect(isExpression.notOperator, isNull);
+    expect(isExpression.staticType, typeProvider.boolType);
 
-    // var v = 42;
-    VariableElement vElement;
-    {
-      var statement = statements[0] as VariableDeclarationStatement;
-      vElement = statement.variables.variables[0].name.staticElement
-          as VariableElement;
-    }
+    var target = isExpression.expression as SimpleIdentifier;
+    expect(target.staticElement, findElement.parameter('a'));
+    expect(target.staticType, dynamicType);
 
-    // v is num;
-    {
-      var statement = statements[1] as ExpressionStatement;
-      var isExpression = statement.expression as IsExpression;
-      expect(isExpression.notOperator, isNull);
-      expect(isExpression.staticType, typeProvider.boolType);
-
-      var target = isExpression.expression as SimpleIdentifier;
-      expect(target.staticElement, vElement);
-      expect(target.staticType, typeProvider.intType);
-
-      var numName = isExpression.type as TypeName;
-      expect(numName.name.staticElement, typeProvider.numType.element);
-      expect(numName.name.staticType, isNull);
-    }
+    var numName = isExpression.type as TypeName;
+    expect(numName.name.staticElement, typeProvider.numType.element);
+    expect(numName.name.staticType, isNull);
   }
 
   test_isExpression_not() async {
     await assertNoErrorsInCode(r'''
-void main() {
-  var v = 42;
-  v is! num;
+void f(var a) {
+  a is! num;
 }
 ''');
 
-    List<Statement> statements = _getMainStatements(result);
+    var isExpression = findNode.isExpression('a is! num');
+    expect(isExpression.notOperator, isNotNull);
+    expect(isExpression.staticType, typeProvider.boolType);
 
-    // var v = 42;
-    VariableElement vElement;
-    {
-      var statement = statements[0] as VariableDeclarationStatement;
-      vElement = statement.variables.variables[0].name.staticElement
-          as VariableElement;
-    }
+    var target = isExpression.expression as SimpleIdentifier;
+    expect(target.staticElement, findElement.parameter('a'));
+    expect(target.staticType, dynamicType);
 
-    // v is! num;
-    {
-      var statement = statements[1] as ExpressionStatement;
-      var isExpression = statement.expression as IsExpression;
-      expect(isExpression.notOperator, isNotNull);
-      expect(isExpression.staticType, typeProvider.boolType);
-
-      var target = isExpression.expression as SimpleIdentifier;
-      expect(target.staticElement, vElement);
-      expect(target.staticType, typeProvider.intType);
-
-      var numName = isExpression.type as TypeName;
-      expect(numName.name.staticElement, typeProvider.numType.element);
-      expect(numName.name.staticType, isNull);
-    }
+    var numName = isExpression.type as TypeName;
+    expect(numName.name.staticElement, typeProvider.numType.element);
+    expect(numName.name.staticType, isNull);
   }
 
   test_label_while() async {
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
index 17d8a68..857df32 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
@@ -40,6 +40,15 @@
     ]);
   }
 
+  test_functionExpression() async {
+    await assertErrorsInCode('''
+const a = () {};
+''', [
+      error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 10,
+          5),
+    ]);
+  }
+
   test_missingConstInListLiteral() async {
     await assertNoErrorsInCode('''
 const List L = [0];
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index b9c4e07..afbe147 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -187,6 +187,8 @@
     _writeln('Block');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftBracket', node.leftBracket);
+      properties.addToken('rightBracket', node.rightBracket);
       properties.addNodeList('statements', node.statements);
       _addStatement(properties, node);
       _writeProperties(properties);
@@ -578,6 +580,8 @@
     _writeln('FormalParameterList');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftParenthesis', node.leftParenthesis);
+      properties.addToken('rightParenthesis', node.rightParenthesis);
       properties.addNodeList('parameters', node.parameters);
       _addAstNode(properties, node);
       _writeProperties(properties);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index e33cc31..dc4d4cf 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -6555,6 +6555,68 @@
 ''');
   }
 
+  test_const_invalid_functionExpression() async {
+    var library = await checkLibrary('''
+const v = () { return 0; };
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int Function()
+        constantInitializer
+          FunctionExpression
+            body: BlockFunctionBody
+              block: Block
+                leftBracket: { @0
+                rightBracket: } @25
+            declaredElement: <null>
+            parameters: FormalParameterList
+              leftParenthesis: ( @10
+              rightParenthesis: ) @0
+            staticType: null
+    accessors
+      synthetic static get v @-1
+        returnType: int Function()
+''');
+  }
+
+  test_const_invalid_functionExpression_nested() async {
+    var library = await checkLibrary('''
+const v = () { return 0; } + 2;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: dynamic
+        constantInitializer
+          BinaryExpression
+            leftOperand: FunctionExpression
+              body: BlockFunctionBody
+                block: Block
+                  leftBracket: { @0
+                  rightBracket: } @25
+              declaredElement: <null>
+              parameters: FormalParameterList
+                leftParenthesis: ( @10
+                rightParenthesis: ) @0
+              staticType: null
+            operator: + @27
+            rightOperand: IntegerLiteral
+              literal: 2 @29
+              staticType: int
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+''');
+  }
+
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
   test_const_invalid_intLiteral() async {
     var library = await checkLibrary(r'''
@@ -8604,7 +8666,6 @@
 ''');
   }
 
-  /// TODO(scheglov) review location
   test_const_methodInvocation() async {
     var library = await checkLibrary(r'''
 T f<T>(T a) => a;
@@ -12162,6 +12223,8 @@
                                   type: dynamic Function()
                                 functionKeyword: Function @86
                                 parameters: FormalParameterList
+                                  leftParenthesis: ( @94
+                                  rightParenthesis: ) @95
                                 type: dynamic Function()
                             leftBracket: < @85
                             rightBracket: > @96
@@ -13690,6 +13753,8 @@
                                 type: dynamic Function()
                               functionKeyword: Function @61
                               parameters: FormalParameterList
+                                leftParenthesis: ( @69
+                                rightParenthesis: ) @70
                               type: dynamic Function()
                           leftBracket: < @60
                           rightBracket: > @71
@@ -15669,6 +15734,7 @@
                             type: int Function(double)
                           functionKeyword: Function @62
                           parameters: FormalParameterList
+                            leftParenthesis: ( @70
                             parameters
                               SimpleFormalParameter
                                 declaredElement: a@78
@@ -15683,6 +15749,7 @@
                                     staticType: null
                                     token: double @71
                                   type: double
+                            rightParenthesis: ) @79
                           returnType: TypeName
                             name: SimpleIdentifier
                               staticElement: dart:core::@class::int
@@ -17279,6 +17346,7 @@
                     type: int Function(String)
                   functionKeyword: Function @36
                   parameters: FormalParameterList
+                    leftParenthesis: ( @44
                     parameters
                       SimpleFormalParameter
                         declaredElement: a@52
@@ -17293,6 +17361,7 @@
                             staticType: null
                             token: String @45
                           type: String
+                    rightParenthesis: ) @53
                   returnType: TypeName
                     name: SimpleIdentifier
                       staticElement: dart:core::@class::int
@@ -17353,6 +17422,7 @@
                     type: int Function(String)
                   functionKeyword: Function @36
                   parameters: FormalParameterList
+                    leftParenthesis: ( @44
                     parameters
                       SimpleFormalParameter
                         declaredElement: a@52
@@ -17367,6 +17437,7 @@
                             staticType: null
                             token: String @45
                           type: String
+                    rightParenthesis: ) @53
                   returnType: TypeName
                     name: SimpleIdentifier
                       staticElement: dart:core::@class::int
@@ -17436,6 +17507,7 @@
                         type: String Function({int? a})
                       functionKeyword: Function @48
                       parameters: FormalParameterList
+                        leftParenthesis: ( @56
                         parameters
                           DefaultFormalParameter
                             declaredElement: a@63
@@ -17457,6 +17529,7 @@
                                   staticType: null
                                   token: int @58
                                 type: int?
+                        rightParenthesis: ) @65
                       returnType: TypeName
                         name: SimpleIdentifier
                           staticElement: dart:core::@class::String
@@ -17521,6 +17594,7 @@
                         type: String Function([int?])
                       functionKeyword: Function @48
                       parameters: FormalParameterList
+                        leftParenthesis: ( @56
                         parameters
                           DefaultFormalParameter
                             declaredElement: a@63
@@ -17542,6 +17616,7 @@
                                   staticType: null
                                   token: int @58
                                 type: int?
+                        rightParenthesis: ) @65
                       returnType: TypeName
                         name: SimpleIdentifier
                           staticElement: dart:core::@class::String
@@ -17606,6 +17681,7 @@
                         type: String Function({required int a})
                       functionKeyword: Function @48
                       parameters: FormalParameterList
+                        leftParenthesis: ( @56
                         parameters
                           DefaultFormalParameter
                             declaredElement: a@71
@@ -17628,6 +17704,7 @@
                                   staticType: null
                                   token: int @67
                                 type: int
+                        rightParenthesis: ) @73
                       returnType: TypeName
                         name: SimpleIdentifier
                           staticElement: dart:core::@class::String
@@ -17692,6 +17769,7 @@
                         type: String Function(int)
                       functionKeyword: Function @48
                       parameters: FormalParameterList
+                        leftParenthesis: ( @56
                         parameters
                           SimpleFormalParameter
                             declaredElement: a@61
@@ -17706,6 +17784,7 @@
                                 staticType: null
                                 token: int @57
                               type: int
+                        rightParenthesis: ) @62
                       returnType: TypeName
                         name: SimpleIdentifier
                           staticElement: dart:core::@class::String
@@ -23834,7 +23913,6 @@
   A(@foo int a);
 }
 ''');
-    // TODO(scheglov) Enhance to show metadata on formal parameters?
     checkElementText(library, r'''
 library
   definingUnit
@@ -23926,7 +24004,6 @@
   void method<@foo T>(@foo int a) {}
 }
 ''');
-    // TODO(scheglov) Enhance to show metadata on formal parameters?
     checkElementText(library, r'''
 library
   definingUnit
@@ -23988,7 +24065,6 @@
   set setter(@foo int a) {}
 }
 ''');
-    // TODO(scheglov) Enhance to show metadata on formal parameters?
     checkElementText(library, r'''
 library
   definingUnit
@@ -24584,7 +24660,6 @@
 @foo
 void f<@foo T>({@foo int? a = 42}) {}
 ''');
-    // TODO(scheglov) Enhance to show metadata on formal parameters?
     checkElementText(library, r'''
 library
   definingUnit
@@ -24679,7 +24754,6 @@
 @foo
 set setter(@foo int a) {}
 ''');
-    // TODO(scheglov) Enhance to show metadata on formal parameters?
     checkElementText(library, r'''
 library
   definingUnit
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 85c48aa..2201508 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -11144,7 +11144,7 @@
 this diagnostic:
 
 {% prettify dart tag=pre+code %}
-const x = 4;
+const Object x = 4;
 const y = [!x is int!] ? 0 : 1;
 {% endprettify %}
 
@@ -11164,7 +11164,7 @@
 [constant context][]:
 
 {% prettify dart tag=pre+code %}
-const x = 4;
+const Object x = 4;
 var y = x is int ? 0 : 1;
 {% endprettify %}
 
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 523b2f2..9c8c353a 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -186,9 +186,11 @@
     // batch flag and source file" error message.
     ErrorFormatter formatter;
     if (options.jsonFormat) {
-      formatter = JsonErrorFormatter(errorSink, options, stats,
+      formatter = JsonErrorFormatter(outSink, options, stats,
           severityProcessor: defaultSeverityProcessor);
     } else if (options.machineFormat) {
+      // The older machine format emits to stderr (instead of stdout) for legacy
+      // reasons.
       formatter = MachineErrorFormatter(errorSink, options, stats,
           severityProcessor: defaultSeverityProcessor);
     } else {
@@ -368,7 +370,7 @@
 
     formatter.flush();
 
-    if (!options.machineFormat) {
+    if (!options.machineFormat && !options.jsonFormat) {
       stats.print(outSink);
     }
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 443c711..12e92b5 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1496,7 +1496,7 @@
             // file.
             var isFirst =
                 next == (next.parent as CompilationUnit).directives.first;
-            var offset = isFirst && next is AnnotatedNode
+            var offset = isFirst
                 ? next.firstTokenAfterCommentAndMetadata.offset
                 : next.offset;
             addInsertion(offset, (EditBuilder builder) {
diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index 004132a..f076a8a 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -19,7 +19,7 @@
 enum DeferredHolderExpressionKind {
   globalObjectForStaticState,
   globalObjectForConstant,
-  globalObjectForLibrary,
+  globalObjectForInterceptors,
   globalObjectForClass,
   globalObjectForMember,
 }
@@ -45,6 +45,11 @@
   DeferredHolderExpression._(
       this.kind, this.data, this._value, this.sourceInformation);
 
+  factory DeferredHolderExpression.forInterceptors() {
+    return DeferredHolderExpression(
+        DeferredHolderExpressionKind.globalObjectForInterceptors, null);
+  }
+
   factory DeferredHolderExpression.forStaticState() {
     return DeferredHolderExpression(
         DeferredHolderExpressionKind.globalObjectForStaticState, null);
@@ -55,9 +60,6 @@
     var kind = source.readEnum(DeferredHolderExpressionKind.values);
     Object data;
     switch (kind) {
-      case DeferredHolderExpressionKind.globalObjectForLibrary:
-        data = source.readLibrary();
-        break;
       case DeferredHolderExpressionKind.globalObjectForClass:
         data = source.readClass();
         break;
@@ -67,6 +69,7 @@
       case DeferredHolderExpressionKind.globalObjectForConstant:
         data = source.readConstant();
         break;
+      case DeferredHolderExpressionKind.globalObjectForInterceptors:
       case DeferredHolderExpressionKind.globalObjectForStaticState:
         // no entity.
         break;
@@ -79,9 +82,6 @@
     sink.begin(tag);
     sink.writeEnum(kind);
     switch (kind) {
-      case DeferredHolderExpressionKind.globalObjectForLibrary:
-        sink.writeLibrary(data);
-        break;
       case DeferredHolderExpressionKind.globalObjectForClass:
         sink.writeClass(data);
         break;
@@ -91,6 +91,7 @@
       case DeferredHolderExpressionKind.globalObjectForConstant:
         sink.writeConstant(data);
         break;
+      case DeferredHolderExpressionKind.globalObjectForInterceptors:
       case DeferredHolderExpressionKind.globalObjectForStaticState:
         // no entity.
         break;
@@ -375,7 +376,8 @@
 
   /// Returns the [reservedGlobalObjectNames] for [library].
   String globalObjectNameForLibrary(LibraryEntity library) {
-    if (library == _commonElements.interceptorsLibrary) return 'J';
+    if (library == _commonElements.interceptorsLibrary)
+      return globalObjectNameForInterceptors();
     Uri uri = library.canonicalUri;
     if (uri.scheme == 'dart') {
       if (uri.path == 'html') return 'W';
@@ -411,6 +413,8 @@
   final Holder globalObjectForStaticState =
       Holder(globalObjectNameForStaticState());
 
+  static String globalObjectNameForInterceptors() => 'J';
+
   static String globalObjectNameForStaticState() => r'$';
 
   String globalObjectNameForConstants() => 'C';
@@ -458,8 +462,8 @@
   /// [DeferredHolderExpressionKind].
   String kindToHolderName(DeferredHolderExpressionKind kind, Object data) {
     switch (kind) {
-      case DeferredHolderExpressionKind.globalObjectForLibrary:
-        return globalObjectNameForLibrary(data);
+      case DeferredHolderExpressionKind.globalObjectForInterceptors:
+        return globalObjectNameForInterceptors();
       case DeferredHolderExpressionKind.globalObjectForClass:
         return globalObjectNameForClass(data);
       case DeferredHolderExpressionKind.globalObjectForMember:
@@ -820,6 +824,8 @@
     return globalObjectForLibrary(entity.library);
   }
 
+  String globalObjectForInterceptors() => 'J';
+
   String globalObjectForStaticState() => r'$';
 
   String globalObjectForConstants() => 'C';
@@ -848,8 +854,8 @@
   /// [DeferredHolderExpressionKind].
   String kindToHolder(DeferredHolderExpressionKind kind, Object data) {
     switch (kind) {
-      case DeferredHolderExpressionKind.globalObjectForLibrary:
-        return globalObjectForLibrary(data);
+      case DeferredHolderExpressionKind.globalObjectForInterceptors:
+        return globalObjectForInterceptors();
       case DeferredHolderExpressionKind.globalObjectForClass:
         return globalObjectForClass(data);
       case DeferredHolderExpressionKind.globalObjectForMember:
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 5e4afbd..e8b00b7 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -2081,12 +2081,11 @@
     return DeferredHolderExpression.forStaticState();
   }
 
-  /// Returns a variable use for accessing [library].
+  /// Returns a variable use for accessing interceptors.
   ///
   /// This is one of the [reservedGlobalObjectNames]
-  jsAst.Expression readGlobalObjectForLibrary(LibraryEntity library) {
-    return DeferredHolderExpression(
-        DeferredHolderExpressionKind.globalObjectForLibrary, library);
+  jsAst.Expression readGlobalObjectForInterceptors() {
+    return DeferredHolderExpression.forInterceptors();
   }
 
   /// Returns a variable use for accessing the class [element].
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index f49bf66..13e4a5e 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -398,8 +398,7 @@
     }
 
     jsAst.Name invocationName = _namer.invocationName(selector);
-    var globalObject =
-        _namer.readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+    var globalObject = _namer.readGlobalObjectForInterceptors();
 
     jsAst.Statement optimizedPath =
         _fastPathForOneShotInterceptor(selector, classes);
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 20a3676..56c3746 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -599,7 +599,7 @@
       // TODO(sra): The source information should indiciate the field and
       // possibly its type but not the initializer.
       value.sourceInformation ??= _sourceInformationBuilder.buildSet(node);
-      value = _potentiallyAssertNotNull(node, value, type);
+      value = _potentiallyAssertNotNull(field, node, value, type);
       if (!_fieldAnalysis.getFieldData(field).isElided) {
         add(HFieldSet(_abstractValueDomain, field, thisInstruction, value));
       }
@@ -1371,7 +1371,7 @@
     return true;
   }
 
-  void _potentiallyAddFunctionParameterTypeChecks(
+  void _potentiallyAddFunctionParameterTypeChecks(MemberEntity member,
       ir.FunctionNode function, TargetChecks targetChecks) {
     // Put the type checks in the first successor of the entry,
     // because that is where the type guards will also be inserted.
@@ -1417,7 +1417,8 @@
             targetElement, newParameter, type);
       }
       // TODO(sra): Hoist out of loop.
-      newParameter = _potentiallyAssertNotNull(variable, newParameter, type);
+      newParameter =
+          _potentiallyAssertNotNull(member, variable, newParameter, type);
       localsHandler.updateLocal(local, newParameter);
     }
 
@@ -1448,12 +1449,21 @@
   /// In mixed mode, inserts an assertion of the form `assert(x != null)` for
   /// parameters in opt-in libraries that have a static type that cannot be
   /// nullable under a strong interpretation.
-  HInstruction _potentiallyAssertNotNull(
+  HInstruction _potentiallyAssertNotNull(MemberEntity member,
       ir.TreeNode context, HInstruction value, DartType type) {
     if (!options.enableNullAssertions) return value;
     if (!_isNonNullableByDefault(context)) return value;
     if (!dartTypes.isNonNullableIfSound(type)) return value;
 
+    // `operator==` is usually augmented to handle a `null`-argument before this
+    // test would be inserted.  There are a few exceptions (Object,
+    // Interceptor), where the body of the `==` method is designed to handle a
+    // `null` argument. In the usual case the null assertion is unnecessary and
+    // will be optimized away. In the exception cases a null assertion would be
+    // incorrect. Either way we should not do a null-assertion on the parameter
+    // of any `operator==` method.
+    if (member.name == '==') return value;
+
     if (options.enableUserAssertions) {
       pushCheckNull(value);
       push(HNot(pop(), _abstractValueDomain.boolType));
@@ -1668,7 +1678,7 @@
     }
 
     if (functionNode != null) {
-      _potentiallyAddFunctionParameterTypeChecks(functionNode, checks);
+      _potentiallyAddFunctionParameterTypeChecks(member, functionNode, checks);
     }
     _insertCoverageCall(member);
   }
@@ -6311,7 +6321,7 @@
             function, argument, type);
       }
       checkedOrTrusted =
-          _potentiallyAssertNotNull(variable, checkedOrTrusted, type);
+          _potentiallyAssertNotNull(function, variable, checkedOrTrusted, type);
       localsHandler.updateLocal(parameter, checkedOrTrusted);
     });
   }
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 594204c..0abdba8 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1881,8 +1881,7 @@
       assert(node.inputs.length == 1);
       _registry.registerSpecializedGetInterceptor(node.interceptedClasses);
       js.Name name = _namer.nameForGetInterceptor(node.interceptedClasses);
-      js.Expression isolate = _namer
-          .readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+      js.Expression isolate = _namer.readGlobalObjectForInterceptors();
       use(node.receiver);
       List<js.Expression> arguments = <js.Expression>[pop()];
       push(js
@@ -1968,8 +1967,7 @@
     _metrics.countHInterceptor.add();
     _metrics.countHInterceptorOneshot.add();
     List<js.Expression> arguments = visitArguments(node.inputs);
-    js.Expression isolate =
-        _namer.readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+    js.Expression isolate = _namer.readGlobalObjectForInterceptors();
     Selector selector = node.selector;
     Set<ClassEntity> classes =
         _interceptorData.getInterceptedClassesOn(selector.name, _closedWorld);
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 0052d2d..a8b8b85 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -262,6 +262,9 @@
                 'Unrecognized command `$command`, full request was `$request`');
         }
       } catch (e, s) {
+        var command = request['command'] as String;
+        _processedOptions.ticker
+            .logMs('Expression compiler worker request $command failed: $e:$s');
         sendResponse({
           'exception': '$e',
           'stackTrace': '$s',
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index a3a70e5..b0f3974 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -31,6 +31,8 @@
   browser_launcher: ^0.1.9
   expect:
     path: ../expect
+  http_multi_server:
+    path: ../../third_party/pkg/http_multi_server
   js:
     path: ../js
   modular_test:
@@ -40,6 +42,8 @@
   sourcemap_testing:
     path: ../sourcemap_testing
   stack_trace: any
+  shelf:
+    path: ../../third_party/pkg/shelf
   test: any
   testing:
     path: ../testing
diff --git a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
new file mode 100644
index 0000000..a3483ed
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.9
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' show HttpServer;
+
+import 'package:browser_launcher/browser_launcher.dart';
+import 'package:dev_compiler/src/kernel/expression_compiler_worker.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
+import 'package:http_multi_server/http_multi_server.dart';
+import 'package:shelf/shelf.dart';
+import 'package:shelf/shelf_io.dart';
+import 'package:test/test.dart';
+
+const _existingFile = 'http://localhost/existingFile';
+const _nonExistingFile = 'http://localhost/nonExistingFile';
+
+const _smallFileContents = 'Hello world!';
+
+String _largeFileContents() =>
+    List.filled(10000, _smallFileContents).join('/n');
+
+FutureOr<Response> handler(Request request) {
+  final uri = request.requestedUri.queryParameters['uri'];
+  final headers = {
+    'content-length': '${utf8.encode(_smallFileContents).length}',
+    ...request.headers,
+  };
+
+  if (request.method == 'HEAD') {
+    // 'exists'
+    return uri == _existingFile
+        ? Response.ok(null, headers: headers)
+        : Response.notFound(uri);
+  }
+  if (request.method == 'GET') {
+    // 'readAsBytes'
+    return uri == _existingFile
+        ? Response.ok(_smallFileContents, headers: headers)
+        : Response.notFound(uri);
+  }
+  return Response.internalServerError();
+}
+
+FutureOr<Response> noisyHandler(Request request) {
+  final uri = request.requestedUri.queryParameters['uri'];
+  final contents = _largeFileContents();
+  final headers = {
+    'content-length': '${utf8.encode(contents).length}',
+    ...request.headers,
+  };
+
+  if (request.method == 'HEAD' || request.method == 'GET') {
+    // 'exists' or 'readAsBytes'
+    return uri == _existingFile
+        ? Response.ok(contents, headers: headers)
+        : Response.notFound(uri);
+  }
+  return Response.internalServerError();
+}
+
+void main() async {
+  HttpServer server;
+  AssetFileSystem fileSystem;
+  group('AssetFileSystem with a server', () {
+    setUpAll(() async {
+      var hostname = 'localhost';
+      var port = await findUnusedPort();
+
+      server = await HttpMultiServer.bind(hostname, port);
+      fileSystem =
+          AssetFileSystem(StandardFileSystem.instance, hostname, '$port');
+
+      serveRequests(server, handler);
+    });
+
+    tearDownAll(() async {
+      await expectLater(server.close(), completes);
+    });
+
+    test('can tell if file exists', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+      expect(await entity.exists(), true);
+    });
+
+    test('can tell if file does not exist', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+      expect(await entity.exists(), false);
+    });
+
+    test('can read existing file', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+      expect(utf8.decode(await entity.readAsBytes()), _smallFileContents);
+    });
+
+    test('cannot read non-existing file', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+      await expectLater(
+          entity.readAsBytes(), throwsA(isA<FileSystemException>()));
+    });
+  });
+
+  group('AssetFileSystem with a noisy server', () {
+    setUpAll(() async {
+      var hostname = 'localhost';
+      var port = await findUnusedPort();
+
+      server = await HttpMultiServer.bind(hostname, port);
+      fileSystem =
+          AssetFileSystem(StandardFileSystem.instance, hostname, '$port');
+
+      serveRequests(server, noisyHandler);
+    });
+
+    tearDownAll(() async {
+      await expectLater(server.close(), completes);
+    });
+
+    test('can tell if file exists', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+      expect(await entity.exists(), true);
+    });
+
+    test('can tell if file does not exist', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+      expect(await entity.exists(), false);
+    });
+
+    test('can read existing file', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+      expect(utf8.decode(await entity.readAsBytes()), _largeFileContents());
+    });
+
+    test('cannot read non-existing file', () async {
+      var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+      await expectLater(
+          entity.readAsBytes(), throwsA(isA<FileSystemException>()));
+    });
+  });
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 58f6cf1..1c7f034 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -1523,7 +1523,10 @@
     if (isSymbol) {
       final Constant nameValue = positionals.single;
 
-      if (nameValue is StringConstant && isValidSymbolName(nameValue.value)) {
+      // For libraries with null safety Symbol constructor accepts arbitrary
+      // string as argument.
+      if (nameValue is StringConstant &&
+          (isNonNullableByDefault || isValidSymbolName(nameValue.value))) {
         return canonicalize(new SymbolConstant(nameValue.value, null));
       }
       return createErrorConstant(
@@ -3159,7 +3162,7 @@
     }
 
     String name = target.name.text;
-    if (target is Procedure && target.isFactory) {
+    if (target.isFactory) {
       if (name.isEmpty) {
         name = target.enclosingClass!.name;
       } else {
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart
new file mode 100644
index 0000000..3920233
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart
@@ -0,0 +1,69 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
new file mode 100644
index 0000000..c371313
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -0,0 +1,1314 @@
+Problems reported:
+
+parser/error_recovery/issue_46346:1:7: Can't use 'abstract' as a name here.
+class abstract {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:2:7: Can't use 'as' as a name here.
+class as {}
+      ^^
+
+parser/error_recovery/issue_46346:3:7: 'assert' can't be used as an identifier because it's a keyword.
+class assert {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:6:7: 'break' can't be used as an identifier because it's a keyword.
+class break {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:7:7: 'case' can't be used as an identifier because it's a keyword.
+class case {}
+      ^^^^
+
+parser/error_recovery/issue_46346:8:7: 'catch' can't be used as an identifier because it's a keyword.
+class catch {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:9:7: 'class' can't be used as an identifier because it's a keyword.
+class class {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:10:7: 'const' can't be used as an identifier because it's a keyword.
+class const {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:11:7: 'continue' can't be used as an identifier because it's a keyword.
+class continue {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:12:7: Can't use 'covariant' as a name here.
+class covariant {}
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346:13:7: 'default' can't be used as an identifier because it's a keyword.
+class default {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:14:7: Can't use 'deferred' as a name here.
+class deferred {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:15:7: 'do' can't be used as an identifier because it's a keyword.
+class do {}
+      ^^
+
+parser/error_recovery/issue_46346:16:7: Can't use 'dynamic' as a name here.
+class dynamic {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:17:7: 'else' can't be used as an identifier because it's a keyword.
+class else {}
+      ^^^^
+
+parser/error_recovery/issue_46346:18:7: 'enum' can't be used as an identifier because it's a keyword.
+class enum {}
+      ^^^^
+
+parser/error_recovery/issue_46346:19:7: Can't use 'export' as a name here.
+class export {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:20:7: 'extends' can't be used as an identifier because it's a keyword.
+class extends {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:21:7: Can't use 'extension' as a name here.
+class extension {}
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346:22:7: Can't use 'external' as a name here.
+class external {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:23:7: Can't use 'factory' as a name here.
+class factory {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:24:7: 'false' can't be used as an identifier because it's a keyword.
+class false {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:25:7: 'final' can't be used as an identifier because it's a keyword.
+class final {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:26:7: 'finally' can't be used as an identifier because it's a keyword.
+class finally {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:27:7: 'for' can't be used as an identifier because it's a keyword.
+class for {}
+      ^^^
+
+parser/error_recovery/issue_46346:29:7: Can't use 'get' as a name here.
+class get {}
+      ^^^
+
+parser/error_recovery/issue_46346:31:7: 'if' can't be used as an identifier because it's a keyword.
+class if {}
+      ^^
+
+parser/error_recovery/issue_46346:32:7: Can't use 'implements' as a name here.
+class implements {}
+      ^^^^^^^^^^
+
+parser/error_recovery/issue_46346:33:7: Can't use 'import' as a name here.
+class import {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:34:7: 'in' can't be used as an identifier because it's a keyword.
+class in {}
+      ^^
+
+parser/error_recovery/issue_46346:36:7: Can't use 'interface' as a name here.
+class interface {}
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346:37:7: 'is' can't be used as an identifier because it's a keyword.
+class is {}
+      ^^
+
+parser/error_recovery/issue_46346:38:7: Can't use 'late' as a name here.
+class late {}
+      ^^^^
+
+parser/error_recovery/issue_46346:39:7: Can't use 'library' as a name here.
+class library {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:40:7: Can't use 'mixin' as a name here.
+class mixin {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:42:7: 'new' can't be used as an identifier because it's a keyword.
+class new {}
+      ^^^
+
+parser/error_recovery/issue_46346:43:7: 'null' can't be used as an identifier because it's a keyword.
+class null {}
+      ^^^^
+
+parser/error_recovery/issue_46346:46:7: Can't use 'operator' as a name here.
+class operator {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:48:7: Can't use 'part' as a name here.
+class part {}
+      ^^^^
+
+parser/error_recovery/issue_46346:50:7: Can't use 'required' as a name here.
+class required {}
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346:51:7: 'rethrow' can't be used as an identifier because it's a keyword.
+class rethrow {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:52:7: 'return' can't be used as an identifier because it's a keyword.
+class return {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:53:7: Can't use 'set' as a name here.
+class set {}
+      ^^^
+
+parser/error_recovery/issue_46346:56:7: Can't use 'static' as a name here.
+class static {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:57:7: 'super' can't be used as an identifier because it's a keyword.
+class super {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:58:7: 'switch' can't be used as an identifier because it's a keyword.
+class switch {}
+      ^^^^^^
+
+parser/error_recovery/issue_46346:60:7: 'this' can't be used as an identifier because it's a keyword.
+class this {}
+      ^^^^
+
+parser/error_recovery/issue_46346:61:7: 'throw' can't be used as an identifier because it's a keyword.
+class throw {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:62:7: 'true' can't be used as an identifier because it's a keyword.
+class true {}
+      ^^^^
+
+parser/error_recovery/issue_46346:63:7: 'try' can't be used as an identifier because it's a keyword.
+class try {}
+      ^^^
+
+parser/error_recovery/issue_46346:64:7: Can't use 'typedef' as a name here.
+class typedef {}
+      ^^^^^^^
+
+parser/error_recovery/issue_46346:65:7: 'var' can't be used as an identifier because it's a keyword.
+class var {}
+      ^^^
+
+parser/error_recovery/issue_46346:66:7: 'void' can't be used as an identifier because it's a keyword.
+class void {}
+      ^^^^
+
+parser/error_recovery/issue_46346:67:7: 'while' can't be used as an identifier because it's a keyword.
+class while {}
+      ^^^^^
+
+parser/error_recovery/issue_46346:68:7: 'with' can't be used as an identifier because it's a keyword.
+class with {}
+      ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+    handleIdentifier(abstract, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, abstract)
+      handleNoType(abstract)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+    handleIdentifier(as, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, as)
+      handleNoType(as)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+    handleIdentifier(assert, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, assert)
+      handleNoType(assert)
+      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(async, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, async)
+      handleNoType(async)
+      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(await, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, await)
+      handleNoType(await)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+    handleIdentifier(break, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, break)
+      handleNoType(break)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+    handleIdentifier(case, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, case)
+      handleNoType(case)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+    handleIdentifier(catch, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, catch)
+      handleNoType(catch)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+    handleIdentifier(class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, class)
+      handleNoType(class)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+    handleIdentifier(const, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, const)
+      handleNoType(const)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+    handleIdentifier(continue, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, continue)
+      handleNoType(continue)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+    handleIdentifier(covariant, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, covariant)
+      handleNoType(covariant)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+    handleIdentifier(default, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, default)
+      handleNoType(default)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+    handleIdentifier(deferred, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, deferred)
+      handleNoType(deferred)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+    handleIdentifier(do, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, do)
+      handleNoType(do)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+    handleIdentifier(dynamic, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, dynamic)
+      handleNoType(dynamic)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+    handleIdentifier(else, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, else)
+      handleNoType(else)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+    handleIdentifier(enum, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, enum)
+      handleNoType(enum)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+    handleIdentifier(export, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, export)
+      handleNoType(export)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+    handleIdentifier(extends, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, extends)
+      handleNoType(extends)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+    handleIdentifier(extension, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, extension)
+      handleNoType(extension)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+    handleIdentifier(external, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, external)
+      handleNoType(external)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+    handleIdentifier(factory, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, factory)
+      handleNoType(factory)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+    handleIdentifier(false, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, false)
+      handleNoType(false)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+    handleIdentifier(final, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, final)
+      handleNoType(final)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+    handleIdentifier(finally, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, finally)
+      handleNoType(finally)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+    handleIdentifier(for, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, for)
+      handleNoType(for)
+      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(Function, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, Function)
+      handleNoType(Function)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+    handleIdentifier(get, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, get)
+      handleNoType(get)
+      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(hide, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, hide)
+      handleNoType(hide)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+    handleIdentifier(if, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, if)
+      handleNoType(if)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+    handleIdentifier(implements, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, implements)
+      handleNoType(implements)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+    handleIdentifier(import, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, import)
+      handleNoType(import)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+    handleIdentifier(in, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, in)
+      handleNoType(in)
+      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(inout, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, inout)
+      handleNoType(inout)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+    handleIdentifier(interface, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, interface)
+      handleNoType(interface)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+    handleIdentifier(is, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, is)
+      handleNoType(is)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+    handleIdentifier(late, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, late)
+      handleNoType(late)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+    handleIdentifier(library, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, library)
+      handleNoType(library)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+    handleIdentifier(mixin, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, mixin)
+      handleNoType(mixin)
+      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(native, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, native)
+      handleNoType(native)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+    handleIdentifier(new, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, new)
+      handleNoType(new)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+    handleIdentifier(null, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null)
+      handleNoType(null)
+      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(of, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, of)
+      handleNoType(of)
+      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(on, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, on)
+      handleNoType(on)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+    handleIdentifier(operator, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, operator)
+      handleNoType(operator)
+      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(out, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, out)
+      handleNoType(out)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+    handleIdentifier(part, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, part)
+      handleNoType(part)
+      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(patch, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, patch)
+      handleNoType(patch)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+    handleIdentifier(required, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, required)
+      handleNoType(required)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+    handleIdentifier(rethrow, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, rethrow)
+      handleNoType(rethrow)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+    handleIdentifier(return, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, return)
+      handleNoType(return)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+    handleIdentifier(set, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, set)
+      handleNoType(set)
+      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(show, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, show)
+      handleNoType(show)
+      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(source, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, source)
+      handleNoType(source)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+    handleIdentifier(static, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, static)
+      handleNoType(static)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+    handleIdentifier(super, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, super)
+      handleNoType(super)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+    handleIdentifier(switch, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, switch)
+      handleNoType(switch)
+      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(sync, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, sync)
+      handleNoType(sync)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+    handleIdentifier(this, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, this)
+      handleNoType(this)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+    handleIdentifier(throw, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, throw)
+      handleNoType(throw)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+    handleIdentifier(true, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, true)
+      handleNoType(true)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+    handleIdentifier(try, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, try)
+      handleNoType(try)
+      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)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+    handleIdentifier(typedef, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, typedef)
+      handleNoType(typedef)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+    handleIdentifier(var, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, var)
+      handleNoType(var)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+    handleIdentifier(void, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, void)
+      handleNoType(void)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+    handleIdentifier(while, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, while)
+      handleNoType(while)
+      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)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+    handleIdentifier(with, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, with)
+      handleNoType(with)
+      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(yield, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, yield)
+      handleNoType(yield)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
new file mode 100644
index 0000000..350e22e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -0,0 +1,2048 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+          listener: handleIdentifier(abstract, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, abstract)
+        parseClass(abstract, class, class, abstract)
+          parseClassHeaderOpt(abstract, class, class)
+            parseClassExtendsOpt(abstract)
+              listener: handleNoType(abstract)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(abstract)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(abstract)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(abstract, DeclarationKind.Class, abstract)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+          listener: handleIdentifier(as, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, as)
+        parseClass(as, class, class, as)
+          parseClassHeaderOpt(as, class, class)
+            parseClassExtendsOpt(as)
+              listener: handleNoType(as)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(as)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(as)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(as, DeclarationKind.Class, as)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+          listener: handleIdentifier(assert, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, assert)
+        parseClass(assert, class, class, assert)
+          parseClassHeaderOpt(assert, class, class)
+            parseClassExtendsOpt(assert)
+              listener: handleNoType(assert)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(assert)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(assert)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(assert, DeclarationKind.Class, assert)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(async, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, async)
+        parseClass(async, class, class, async)
+          parseClassHeaderOpt(async, class, class)
+            parseClassExtendsOpt(async)
+              listener: handleNoType(async)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(async)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(async)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(async, DeclarationKind.Class, async)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(await, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, await)
+        parseClass(await, class, class, await)
+          parseClassHeaderOpt(await, class, class)
+            parseClassExtendsOpt(await)
+              listener: handleNoType(await)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(await)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(await)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(await, DeclarationKind.Class, await)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+          listener: handleIdentifier(break, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, break)
+        parseClass(break, class, class, break)
+          parseClassHeaderOpt(break, class, class)
+            parseClassExtendsOpt(break)
+              listener: handleNoType(break)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(break)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(break)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(break, DeclarationKind.Class, break)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+          listener: handleIdentifier(case, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, case)
+        parseClass(case, class, class, case)
+          parseClassHeaderOpt(case, class, class)
+            parseClassExtendsOpt(case)
+              listener: handleNoType(case)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(case)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(case)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(case, DeclarationKind.Class, case)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+          listener: handleIdentifier(catch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, catch)
+        parseClass(catch, class, class, catch)
+          parseClassHeaderOpt(catch, class, class)
+            parseClassExtendsOpt(catch)
+              listener: handleNoType(catch)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(catch)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(catch)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(catch, DeclarationKind.Class, catch)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+          listener: handleIdentifier(class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, class)
+        parseClass(class, class, class, class)
+          parseClassHeaderOpt(class, class, class)
+            parseClassExtendsOpt(class)
+              listener: handleNoType(class)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(class)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(class, DeclarationKind.Class, class)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+          listener: handleIdentifier(const, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, const)
+        parseClass(const, class, class, const)
+          parseClassHeaderOpt(const, class, class)
+            parseClassExtendsOpt(const)
+              listener: handleNoType(const)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(const)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(const)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(const, DeclarationKind.Class, const)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+          listener: handleIdentifier(continue, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, continue)
+        parseClass(continue, class, class, continue)
+          parseClassHeaderOpt(continue, class, class)
+            parseClassExtendsOpt(continue)
+              listener: handleNoType(continue)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(continue)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(continue)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(continue, DeclarationKind.Class, continue)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+          listener: handleIdentifier(covariant, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, covariant)
+        parseClass(covariant, class, class, covariant)
+          parseClassHeaderOpt(covariant, class, class)
+            parseClassExtendsOpt(covariant)
+              listener: handleNoType(covariant)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(covariant)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(covariant)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(covariant, DeclarationKind.Class, covariant)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+          listener: handleIdentifier(default, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, default)
+        parseClass(default, class, class, default)
+          parseClassHeaderOpt(default, class, class)
+            parseClassExtendsOpt(default)
+              listener: handleNoType(default)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(default)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(default)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(default, DeclarationKind.Class, default)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+          listener: handleIdentifier(deferred, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, deferred)
+        parseClass(deferred, class, class, deferred)
+          parseClassHeaderOpt(deferred, class, class)
+            parseClassExtendsOpt(deferred)
+              listener: handleNoType(deferred)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(deferred)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(deferred)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(deferred, DeclarationKind.Class, deferred)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+          listener: handleIdentifier(do, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, do)
+        parseClass(do, class, class, do)
+          parseClassHeaderOpt(do, class, class)
+            parseClassExtendsOpt(do)
+              listener: handleNoType(do)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(do)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(do)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(do, DeclarationKind.Class, do)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+          listener: handleIdentifier(dynamic, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, dynamic)
+        parseClass(dynamic, class, class, dynamic)
+          parseClassHeaderOpt(dynamic, class, class)
+            parseClassExtendsOpt(dynamic)
+              listener: handleNoType(dynamic)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(dynamic)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(dynamic)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(dynamic, DeclarationKind.Class, dynamic)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+          listener: handleIdentifier(else, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, else)
+        parseClass(else, class, class, else)
+          parseClassHeaderOpt(else, class, class)
+            parseClassExtendsOpt(else)
+              listener: handleNoType(else)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(else)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(else)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(else, DeclarationKind.Class, else)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+          listener: handleIdentifier(enum, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, enum)
+        parseClass(enum, class, class, enum)
+          parseClassHeaderOpt(enum, class, class)
+            parseClassExtendsOpt(enum)
+              listener: handleNoType(enum)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(enum)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(enum)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(enum, DeclarationKind.Class, enum)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+          listener: handleIdentifier(export, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, export)
+        parseClass(export, class, class, export)
+          parseClassHeaderOpt(export, class, class)
+            parseClassExtendsOpt(export)
+              listener: handleNoType(export)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(export)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(export)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(export, DeclarationKind.Class, export)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+          listener: handleIdentifier(extends, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, extends)
+        parseClass(extends, class, class, extends)
+          parseClassHeaderOpt(extends, class, class)
+            parseClassExtendsOpt(extends)
+              listener: handleNoType(extends)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(extends)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(extends)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(extends, DeclarationKind.Class, extends)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+          listener: handleIdentifier(extension, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, extension)
+        parseClass(extension, class, class, extension)
+          parseClassHeaderOpt(extension, class, class)
+            parseClassExtendsOpt(extension)
+              listener: handleNoType(extension)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(extension)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(extension)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(extension, DeclarationKind.Class, extension)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+          listener: handleIdentifier(external, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, external)
+        parseClass(external, class, class, external)
+          parseClassHeaderOpt(external, class, class)
+            parseClassExtendsOpt(external)
+              listener: handleNoType(external)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(external)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(external)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(external, DeclarationKind.Class, external)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+          listener: handleIdentifier(factory, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, factory)
+        parseClass(factory, class, class, factory)
+          parseClassHeaderOpt(factory, class, class)
+            parseClassExtendsOpt(factory)
+              listener: handleNoType(factory)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(factory)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(factory)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(factory, DeclarationKind.Class, factory)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+          listener: handleIdentifier(false, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, false)
+        parseClass(false, class, class, false)
+          parseClassHeaderOpt(false, class, class)
+            parseClassExtendsOpt(false)
+              listener: handleNoType(false)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(false)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(false)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(false, DeclarationKind.Class, false)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+          listener: handleIdentifier(final, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, final)
+        parseClass(final, class, class, final)
+          parseClassHeaderOpt(final, class, class)
+            parseClassExtendsOpt(final)
+              listener: handleNoType(final)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(final)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(final)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(final, DeclarationKind.Class, final)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+          listener: handleIdentifier(finally, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, finally)
+        parseClass(finally, class, class, finally)
+          parseClassHeaderOpt(finally, class, class)
+            parseClassExtendsOpt(finally)
+              listener: handleNoType(finally)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(finally)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(finally)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(finally, DeclarationKind.Class, finally)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+          listener: handleIdentifier(for, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, for)
+        parseClass(for, class, class, for)
+          parseClassHeaderOpt(for, class, class)
+            parseClassExtendsOpt(for)
+              listener: handleNoType(for)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(for)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(for)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(for, DeclarationKind.Class, for)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Function, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, Function)
+        parseClass(Function, class, class, Function)
+          parseClassHeaderOpt(Function, class, class)
+            parseClassExtendsOpt(Function)
+              listener: handleNoType(Function)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(Function)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(Function)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Function, DeclarationKind.Class, Function)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+          listener: handleIdentifier(get, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, get)
+        parseClass(get, class, class, get)
+          parseClassHeaderOpt(get, class, class)
+            parseClassExtendsOpt(get)
+              listener: handleNoType(get)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(get)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(get)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(get, DeclarationKind.Class, get)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(hide, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, hide)
+        parseClass(hide, class, class, hide)
+          parseClassHeaderOpt(hide, class, class)
+            parseClassExtendsOpt(hide)
+              listener: handleNoType(hide)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(hide)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(hide)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(hide, DeclarationKind.Class, hide)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+          listener: handleIdentifier(if, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, if)
+        parseClass(if, class, class, if)
+          parseClassHeaderOpt(if, class, class)
+            parseClassExtendsOpt(if)
+              listener: handleNoType(if)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(if)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(if)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(if, DeclarationKind.Class, if)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+          listener: handleIdentifier(implements, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, implements)
+        parseClass(implements, class, class, implements)
+          parseClassHeaderOpt(implements, class, class)
+            parseClassExtendsOpt(implements)
+              listener: handleNoType(implements)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(implements)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(implements)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(implements, DeclarationKind.Class, implements)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+          listener: handleIdentifier(import, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, import)
+        parseClass(import, class, class, import)
+          parseClassHeaderOpt(import, class, class)
+            parseClassExtendsOpt(import)
+              listener: handleNoType(import)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(import)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(import)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(import, DeclarationKind.Class, import)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+          listener: handleIdentifier(in, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, in)
+        parseClass(in, class, class, in)
+          parseClassHeaderOpt(in, class, class)
+            parseClassExtendsOpt(in)
+              listener: handleNoType(in)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(in)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(in)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(in, DeclarationKind.Class, in)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(inout, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, inout)
+        parseClass(inout, class, class, inout)
+          parseClassHeaderOpt(inout, class, class)
+            parseClassExtendsOpt(inout)
+              listener: handleNoType(inout)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(inout)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(inout)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(inout, DeclarationKind.Class, inout)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+          listener: handleIdentifier(interface, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, interface)
+        parseClass(interface, class, class, interface)
+          parseClassHeaderOpt(interface, class, class)
+            parseClassExtendsOpt(interface)
+              listener: handleNoType(interface)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(interface)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(interface)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(interface, DeclarationKind.Class, interface)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+          listener: handleIdentifier(is, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, is)
+        parseClass(is, class, class, is)
+          parseClassHeaderOpt(is, class, class)
+            parseClassExtendsOpt(is)
+              listener: handleNoType(is)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(is)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(is)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(is, DeclarationKind.Class, is)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+          listener: handleIdentifier(late, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, late)
+        parseClass(late, class, class, late)
+          parseClassHeaderOpt(late, class, class)
+            parseClassExtendsOpt(late)
+              listener: handleNoType(late)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(late)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(late)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(late, DeclarationKind.Class, late)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+          listener: handleIdentifier(library, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, library)
+        parseClass(library, class, class, library)
+          parseClassHeaderOpt(library, class, class)
+            parseClassExtendsOpt(library)
+              listener: handleNoType(library)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(library)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(library)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(library, DeclarationKind.Class, library)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+          listener: handleIdentifier(mixin, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, mixin)
+        parseClass(mixin, class, class, mixin)
+          parseClassHeaderOpt(mixin, class, class)
+            parseClassExtendsOpt(mixin)
+              listener: handleNoType(mixin)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(mixin)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(mixin)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(mixin, DeclarationKind.Class, mixin)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(native, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, native)
+        parseClass(native, class, class, native)
+          parseClassHeaderOpt(native, class, class)
+            parseClassExtendsOpt(native)
+              listener: handleNoType(native)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(native)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(native)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(native, DeclarationKind.Class, native)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+          listener: handleIdentifier(new, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, new)
+        parseClass(new, class, class, new)
+          parseClassHeaderOpt(new, class, class)
+            parseClassExtendsOpt(new)
+              listener: handleNoType(new)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(new)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(new)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(new, DeclarationKind.Class, new)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+          listener: handleIdentifier(null, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null)
+        parseClass(null, class, class, null)
+          parseClassHeaderOpt(null, class, class)
+            parseClassExtendsOpt(null)
+              listener: handleNoType(null)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(null)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(null)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(null, DeclarationKind.Class, null)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(of, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, of)
+        parseClass(of, class, class, of)
+          parseClassHeaderOpt(of, class, class)
+            parseClassExtendsOpt(of)
+              listener: handleNoType(of)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(of)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(of)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(of, DeclarationKind.Class, of)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(on, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, on)
+        parseClass(on, class, class, on)
+          parseClassHeaderOpt(on, class, class)
+            parseClassExtendsOpt(on)
+              listener: handleNoType(on)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(on)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(on)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(on, DeclarationKind.Class, on)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+          listener: handleIdentifier(operator, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, operator)
+        parseClass(operator, class, class, operator)
+          parseClassHeaderOpt(operator, class, class)
+            parseClassExtendsOpt(operator)
+              listener: handleNoType(operator)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(operator)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(operator)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(operator, DeclarationKind.Class, operator)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(out, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, out)
+        parseClass(out, class, class, out)
+          parseClassHeaderOpt(out, class, class)
+            parseClassExtendsOpt(out)
+              listener: handleNoType(out)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(out)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(out)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(out, DeclarationKind.Class, out)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+          listener: handleIdentifier(part, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, part)
+        parseClass(part, class, class, part)
+          parseClassHeaderOpt(part, class, class)
+            parseClassExtendsOpt(part)
+              listener: handleNoType(part)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(part)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(part)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(part, DeclarationKind.Class, part)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(patch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, patch)
+        parseClass(patch, class, class, patch)
+          parseClassHeaderOpt(patch, class, class)
+            parseClassExtendsOpt(patch)
+              listener: handleNoType(patch)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(patch)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(patch)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(patch, DeclarationKind.Class, patch)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+          listener: handleIdentifier(required, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, required)
+        parseClass(required, class, class, required)
+          parseClassHeaderOpt(required, class, class)
+            parseClassExtendsOpt(required)
+              listener: handleNoType(required)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(required)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(required)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(required, DeclarationKind.Class, required)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, rethrow)
+        parseClass(rethrow, class, class, rethrow)
+          parseClassHeaderOpt(rethrow, class, class)
+            parseClassExtendsOpt(rethrow)
+              listener: handleNoType(rethrow)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(rethrow)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(rethrow)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(rethrow, DeclarationKind.Class, rethrow)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+          listener: handleIdentifier(return, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, return)
+        parseClass(return, class, class, return)
+          parseClassHeaderOpt(return, class, class)
+            parseClassExtendsOpt(return)
+              listener: handleNoType(return)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(return)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(return)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(return, DeclarationKind.Class, return)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+          listener: handleIdentifier(set, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, set)
+        parseClass(set, class, class, set)
+          parseClassHeaderOpt(set, class, class)
+            parseClassExtendsOpt(set)
+              listener: handleNoType(set)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(set)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(set)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(set, DeclarationKind.Class, set)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(show, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, show)
+        parseClass(show, class, class, show)
+          parseClassHeaderOpt(show, class, class)
+            parseClassExtendsOpt(show)
+              listener: handleNoType(show)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(show)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(show)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(show, DeclarationKind.Class, show)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(source, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, source)
+        parseClass(source, class, class, source)
+          parseClassHeaderOpt(source, class, class)
+            parseClassExtendsOpt(source)
+              listener: handleNoType(source)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(source)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(source)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(source, DeclarationKind.Class, source)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+          listener: handleIdentifier(static, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, static)
+        parseClass(static, class, class, static)
+          parseClassHeaderOpt(static, class, class)
+            parseClassExtendsOpt(static)
+              listener: handleNoType(static)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(static)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(static)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(static, DeclarationKind.Class, static)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          listener: handleIdentifier(super, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, super)
+        parseClass(super, class, class, super)
+          parseClassHeaderOpt(super, class, class)
+            parseClassExtendsOpt(super)
+              listener: handleNoType(super)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(super)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(super)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(super, DeclarationKind.Class, super)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+          listener: handleIdentifier(switch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, switch)
+        parseClass(switch, class, class, switch)
+          parseClassHeaderOpt(switch, class, class)
+            parseClassExtendsOpt(switch)
+              listener: handleNoType(switch)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(switch)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(switch)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(switch, DeclarationKind.Class, switch)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(sync, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, sync)
+        parseClass(sync, class, class, sync)
+          parseClassHeaderOpt(sync, class, class)
+            parseClassExtendsOpt(sync)
+              listener: handleNoType(sync)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(sync)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(sync)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(sync, DeclarationKind.Class, sync)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+          listener: handleIdentifier(this, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, this)
+        parseClass(this, class, class, this)
+          parseClassHeaderOpt(this, class, class)
+            parseClassExtendsOpt(this)
+              listener: handleNoType(this)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(this)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(this)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(this, DeclarationKind.Class, this)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+          listener: handleIdentifier(throw, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, throw)
+        parseClass(throw, class, class, throw)
+          parseClassHeaderOpt(throw, class, class)
+            parseClassExtendsOpt(throw)
+              listener: handleNoType(throw)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(throw)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(throw)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(throw, DeclarationKind.Class, throw)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+          listener: handleIdentifier(true, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, true)
+        parseClass(true, class, class, true)
+          parseClassHeaderOpt(true, class, class)
+            parseClassExtendsOpt(true)
+              listener: handleNoType(true)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(true)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(true)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(true, DeclarationKind.Class, true)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+          listener: handleIdentifier(try, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, try)
+        parseClass(try, class, class, try)
+          parseClassHeaderOpt(try, class, class)
+            parseClassExtendsOpt(try)
+              listener: handleNoType(try)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(try)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(try)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(try, DeclarationKind.Class, try)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+          listener: handleIdentifier(typedef, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, typedef)
+        parseClass(typedef, class, class, typedef)
+          parseClassHeaderOpt(typedef, class, class)
+            parseClassExtendsOpt(typedef)
+              listener: handleNoType(typedef)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(typedef)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(typedef)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(typedef, DeclarationKind.Class, typedef)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+          listener: handleIdentifier(var, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, var)
+        parseClass(var, class, class, var)
+          parseClassHeaderOpt(var, class, class)
+            parseClassExtendsOpt(var)
+              listener: handleNoType(var)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(var)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(var)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(var, DeclarationKind.Class, var)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+          listener: handleIdentifier(void, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, void)
+        parseClass(void, class, class, void)
+          parseClassHeaderOpt(void, class, class)
+            parseClassExtendsOpt(void)
+              listener: handleNoType(void)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(void)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(void)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(void, DeclarationKind.Class, void)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+          listener: handleIdentifier(while, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, while)
+        parseClass(while, class, class, while)
+          parseClassHeaderOpt(while, class, class)
+            parseClassExtendsOpt(while)
+              listener: handleNoType(while)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(while)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(while)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(while, DeclarationKind.Class, while)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+          listener: handleIdentifier(with, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, with)
+        parseClass(with, class, class, with)
+          parseClassHeaderOpt(with, class, class)
+            parseClassExtendsOpt(with)
+              listener: handleNoType(with)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(with)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(with)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(with, DeclarationKind.Class, with)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(yield, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, yield)
+        parseClass(yield, class, class, yield)
+          parseClassHeaderOpt(yield, class, class)
+            parseClassExtendsOpt(yield)
+              listener: handleNoType(yield)
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt(yield)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt(yield)
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(yield, DeclarationKind.Class, yield)
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect
new file mode 100644
index 0000000..54c447e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect
@@ -0,0 +1,141 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
+
+
+class[KeywordToken] abstract[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] as[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] assert[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] async[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] break[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] case[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] catch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] class[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] const[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] continue[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] default[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] do[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] else[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] enum[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] export[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extends[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extension[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] external[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] factory[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] false[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] final[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] finally[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] for[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] Function[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] get[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] hide[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] if[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] implements[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] import[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] in[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] inout[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] interface[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] is[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] late[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] library[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] native[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] new[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] null[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] of[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] on[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] operator[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] out[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] part[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] patch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] required[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] return[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] set[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] show[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] source[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] static[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] super[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] switch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] sync[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] this[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] throw[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] true[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] try[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] var[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] void[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] while[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] with[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] yield[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect
new file mode 100644
index 0000000..54c447e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect
@@ -0,0 +1,141 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
+
+
+class[KeywordToken] abstract[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] as[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] assert[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] async[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] break[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] case[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] catch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] class[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] const[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] continue[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] default[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] do[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] else[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] enum[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] export[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extends[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extension[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] external[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] factory[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] false[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] final[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] finally[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] for[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] Function[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] get[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] hide[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] if[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] implements[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] import[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] in[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] inout[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] interface[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] is[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] late[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] library[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] native[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] new[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] null[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] of[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] on[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] operator[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] out[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] part[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] patch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] required[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] return[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] set[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] show[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] source[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] static[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] super[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] switch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] sync[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] this[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] throw[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] true[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] try[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] var[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] void[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] while[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] with[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] yield[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart
new file mode 100644
index 0000000..b70c6c3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart
@@ -0,0 +1,69 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
new file mode 100644
index 0000000..caa8b1a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -0,0 +1,1452 @@
+Problems reported:
+
+parser/error_recovery/issue_46346_prime_1:1:7: Can't use 'abstract' as a name here.
+class abstract = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:2:7: Can't use 'as' as a name here.
+class as = A with B;
+      ^^
+
+parser/error_recovery/issue_46346_prime_1:3:7: 'assert' can't be used as an identifier because it's a keyword.
+class assert = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:6:7: 'break' can't be used as an identifier because it's a keyword.
+class break = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:7:7: 'case' can't be used as an identifier because it's a keyword.
+class case = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:8:7: 'catch' can't be used as an identifier because it's a keyword.
+class catch = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:9:7: 'class' can't be used as an identifier because it's a keyword.
+class class = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:10:7: 'const' can't be used as an identifier because it's a keyword.
+class const = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:11:7: 'continue' can't be used as an identifier because it's a keyword.
+class continue = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:12:7: Can't use 'covariant' as a name here.
+class covariant = A with B;
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:13:7: 'default' can't be used as an identifier because it's a keyword.
+class default = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:14:7: Can't use 'deferred' as a name here.
+class deferred = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:15:7: 'do' can't be used as an identifier because it's a keyword.
+class do = A with B;
+      ^^
+
+parser/error_recovery/issue_46346_prime_1:16:7: Can't use 'dynamic' as a name here.
+class dynamic = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:17:7: 'else' can't be used as an identifier because it's a keyword.
+class else = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:18:7: 'enum' can't be used as an identifier because it's a keyword.
+class enum = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:19:7: Can't use 'export' as a name here.
+class export = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:20:7: 'extends' can't be used as an identifier because it's a keyword.
+class extends = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:21:7: Can't use 'extension' as a name here.
+class extension = A with B;
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:22:7: Can't use 'external' as a name here.
+class external = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:23:7: Can't use 'factory' as a name here.
+class factory = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:24:7: 'false' can't be used as an identifier because it's a keyword.
+class false = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:25:7: 'final' can't be used as an identifier because it's a keyword.
+class final = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:26:7: 'finally' can't be used as an identifier because it's a keyword.
+class finally = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:27:7: 'for' can't be used as an identifier because it's a keyword.
+class for = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:29:7: Can't use 'get' as a name here.
+class get = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:31:7: 'if' can't be used as an identifier because it's a keyword.
+class if = A with B;
+      ^^
+
+parser/error_recovery/issue_46346_prime_1:32:7: Can't use 'implements' as a name here.
+class implements = A with B;
+      ^^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:33:7: Can't use 'import' as a name here.
+class import = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:34:7: 'in' can't be used as an identifier because it's a keyword.
+class in = A with B;
+      ^^
+
+parser/error_recovery/issue_46346_prime_1:36:7: Can't use 'interface' as a name here.
+class interface = A with B;
+      ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:37:7: 'is' can't be used as an identifier because it's a keyword.
+class is = A with B;
+      ^^
+
+parser/error_recovery/issue_46346_prime_1:38:7: Can't use 'late' as a name here.
+class late = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:39:7: Can't use 'library' as a name here.
+class library = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:40:7: Can't use 'mixin' as a name here.
+class mixin = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:42:7: 'new' can't be used as an identifier because it's a keyword.
+class new = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:43:7: 'null' can't be used as an identifier because it's a keyword.
+class null = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:46:7: Can't use 'operator' as a name here.
+class operator = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:48:7: Can't use 'part' as a name here.
+class part = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:50:7: Can't use 'required' as a name here.
+class required = A with B;
+      ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:51:7: 'rethrow' can't be used as an identifier because it's a keyword.
+class rethrow = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:52:7: 'return' can't be used as an identifier because it's a keyword.
+class return = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:53:7: Can't use 'set' as a name here.
+class set = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:56:7: Can't use 'static' as a name here.
+class static = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:57:7: 'super' can't be used as an identifier because it's a keyword.
+class super = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:58:7: 'switch' can't be used as an identifier because it's a keyword.
+class switch = A with B;
+      ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:60:7: 'this' can't be used as an identifier because it's a keyword.
+class this = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:61:7: 'throw' can't be used as an identifier because it's a keyword.
+class throw = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:62:7: 'true' can't be used as an identifier because it's a keyword.
+class true = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:63:7: 'try' can't be used as an identifier because it's a keyword.
+class try = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:64:7: Can't use 'typedef' as a name here.
+class typedef = A with B;
+      ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:65:7: 'var' can't be used as an identifier because it's a keyword.
+class var = A with B;
+      ^^^
+
+parser/error_recovery/issue_46346_prime_1:66:7: 'void' can't be used as an identifier because it's a keyword.
+class void = A with B;
+      ^^^^
+
+parser/error_recovery/issue_46346_prime_1:67:7: 'while' can't be used as an identifier because it's a keyword.
+class while = A with B;
+      ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:68:7: 'with' can't be used as an identifier because it's a keyword.
+class with = A with B;
+      ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+    handleIdentifier(abstract, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, abstract)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+    handleIdentifier(as, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, as)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+    handleIdentifier(assert, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, assert)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(async, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, async)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(await, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, await)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+    handleIdentifier(break, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, break)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+    handleIdentifier(case, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, case)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+    handleIdentifier(catch, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, catch)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+    handleIdentifier(class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, class)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+    handleIdentifier(const, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, const)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+    handleIdentifier(continue, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, continue)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+    handleIdentifier(covariant, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, covariant)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+    handleIdentifier(default, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, default)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+    handleIdentifier(deferred, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, deferred)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+    handleIdentifier(do, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, do)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+    handleIdentifier(dynamic, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, dynamic)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+    handleIdentifier(else, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, else)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+    handleIdentifier(enum, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, enum)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+    handleIdentifier(export, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, export)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+    handleIdentifier(extends, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, extends)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+    handleIdentifier(extension, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, extension)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+    handleIdentifier(external, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, external)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+    handleIdentifier(factory, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, factory)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+    handleIdentifier(false, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, false)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+    handleIdentifier(final, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, final)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+    handleIdentifier(finally, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, finally)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+    handleIdentifier(for, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, for)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Function, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, Function)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+    handleIdentifier(get, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, get)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(hide, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, hide)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+    handleIdentifier(if, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, if)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+    handleIdentifier(implements, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, implements)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+    handleIdentifier(import, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, import)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+    handleIdentifier(in, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, in)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(inout, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, inout)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+    handleIdentifier(interface, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, interface)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+    handleIdentifier(is, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, is)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+    handleIdentifier(late, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, late)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+    handleIdentifier(library, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, library)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+    handleIdentifier(mixin, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, mixin)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(native, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, native)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+    handleIdentifier(new, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, new)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+    handleIdentifier(null, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(of, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, of)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(on, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, on)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+    handleIdentifier(operator, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, operator)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(out, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, out)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+    handleIdentifier(part, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, part)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(patch, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, patch)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+    handleIdentifier(required, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, required)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+    handleIdentifier(rethrow, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, rethrow)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+    handleIdentifier(return, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, return)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+    handleIdentifier(set, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, set)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(show, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, show)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(source, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, source)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+    handleIdentifier(static, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, static)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+    handleIdentifier(super, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, super)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+    handleIdentifier(switch, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, switch)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(sync, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, sync)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+    handleIdentifier(this, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, this)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+    handleIdentifier(throw, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, throw)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+    handleIdentifier(true, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, true)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+    handleIdentifier(try, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, try)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+    handleIdentifier(typedef, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, typedef)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+    handleIdentifier(var, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, var)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+    handleIdentifier(void, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, void)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+    handleIdentifier(while, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, while)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+    handleIdentifier(with, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, with)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(yield, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, yield)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments(with)
+      handleType(A, null)
+      beginTypeList(B)
+        handleIdentifier(B, typeReference)
+        handleNoTypeArguments(;)
+        handleType(B, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration()
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
new file mode 100644
index 0000000..d0f33a6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -0,0 +1,1979 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+          listener: handleIdentifier(abstract, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, abstract)
+        parseNamedMixinApplication(abstract, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+          listener: handleIdentifier(as, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, as)
+        parseNamedMixinApplication(as, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+          listener: handleIdentifier(assert, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, assert)
+        parseNamedMixinApplication(assert, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(async, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, async)
+        parseNamedMixinApplication(async, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(await, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, await)
+        parseNamedMixinApplication(await, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+          listener: handleIdentifier(break, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, break)
+        parseNamedMixinApplication(break, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+          listener: handleIdentifier(case, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, case)
+        parseNamedMixinApplication(case, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+          listener: handleIdentifier(catch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, catch)
+        parseNamedMixinApplication(catch, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+          listener: handleIdentifier(class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, class)
+        parseNamedMixinApplication(class, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+          listener: handleIdentifier(const, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, const)
+        parseNamedMixinApplication(const, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+          listener: handleIdentifier(continue, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, continue)
+        parseNamedMixinApplication(continue, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+          listener: handleIdentifier(covariant, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, covariant)
+        parseNamedMixinApplication(covariant, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+          listener: handleIdentifier(default, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, default)
+        parseNamedMixinApplication(default, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+          listener: handleIdentifier(deferred, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, deferred)
+        parseNamedMixinApplication(deferred, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+          listener: handleIdentifier(do, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, do)
+        parseNamedMixinApplication(do, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+          listener: handleIdentifier(dynamic, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, dynamic)
+        parseNamedMixinApplication(dynamic, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+          listener: handleIdentifier(else, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, else)
+        parseNamedMixinApplication(else, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+          listener: handleIdentifier(enum, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, enum)
+        parseNamedMixinApplication(enum, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+          listener: handleIdentifier(export, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, export)
+        parseNamedMixinApplication(export, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+          listener: handleIdentifier(extends, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, extends)
+        parseNamedMixinApplication(extends, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+          listener: handleIdentifier(extension, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, extension)
+        parseNamedMixinApplication(extension, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+          listener: handleIdentifier(external, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, external)
+        parseNamedMixinApplication(external, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+          listener: handleIdentifier(factory, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, factory)
+        parseNamedMixinApplication(factory, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+          listener: handleIdentifier(false, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, false)
+        parseNamedMixinApplication(false, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+          listener: handleIdentifier(final, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, final)
+        parseNamedMixinApplication(final, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+          listener: handleIdentifier(finally, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, finally)
+        parseNamedMixinApplication(finally, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+          listener: handleIdentifier(for, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, for)
+        parseNamedMixinApplication(for, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Function, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, Function)
+        parseNamedMixinApplication(Function, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+          listener: handleIdentifier(get, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, get)
+        parseNamedMixinApplication(get, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(hide, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, hide)
+        parseNamedMixinApplication(hide, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+          listener: handleIdentifier(if, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, if)
+        parseNamedMixinApplication(if, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+          listener: handleIdentifier(implements, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, implements)
+        parseNamedMixinApplication(implements, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+          listener: handleIdentifier(import, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, import)
+        parseNamedMixinApplication(import, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+          listener: handleIdentifier(in, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, in)
+        parseNamedMixinApplication(in, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(inout, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, inout)
+        parseNamedMixinApplication(inout, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+          listener: handleIdentifier(interface, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, interface)
+        parseNamedMixinApplication(interface, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+          listener: handleIdentifier(is, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, is)
+        parseNamedMixinApplication(is, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+          listener: handleIdentifier(late, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, late)
+        parseNamedMixinApplication(late, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+          listener: handleIdentifier(library, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, library)
+        parseNamedMixinApplication(library, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+          listener: handleIdentifier(mixin, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, mixin)
+        parseNamedMixinApplication(mixin, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(native, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, native)
+        parseNamedMixinApplication(native, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+          listener: handleIdentifier(new, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, new)
+        parseNamedMixinApplication(new, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+          listener: handleIdentifier(null, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null)
+        parseNamedMixinApplication(null, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(of, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, of)
+        parseNamedMixinApplication(of, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(on, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, on)
+        parseNamedMixinApplication(on, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+          listener: handleIdentifier(operator, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, operator)
+        parseNamedMixinApplication(operator, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(out, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, out)
+        parseNamedMixinApplication(out, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+          listener: handleIdentifier(part, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, part)
+        parseNamedMixinApplication(part, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(patch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, patch)
+        parseNamedMixinApplication(patch, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+          listener: handleIdentifier(required, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, required)
+        parseNamedMixinApplication(required, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+          listener: handleIdentifier(rethrow, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, rethrow)
+        parseNamedMixinApplication(rethrow, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+          listener: handleIdentifier(return, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, return)
+        parseNamedMixinApplication(return, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+          listener: handleIdentifier(set, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, set)
+        parseNamedMixinApplication(set, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(show, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, show)
+        parseNamedMixinApplication(show, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(source, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, source)
+        parseNamedMixinApplication(source, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+          listener: handleIdentifier(static, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, static)
+        parseNamedMixinApplication(static, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          listener: handleIdentifier(super, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, super)
+        parseNamedMixinApplication(super, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+          listener: handleIdentifier(switch, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, switch)
+        parseNamedMixinApplication(switch, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(sync, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, sync)
+        parseNamedMixinApplication(sync, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+          listener: handleIdentifier(this, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, this)
+        parseNamedMixinApplication(this, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+          listener: handleIdentifier(throw, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, throw)
+        parseNamedMixinApplication(throw, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+          listener: handleIdentifier(true, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, true)
+        parseNamedMixinApplication(true, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+          listener: handleIdentifier(try, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, try)
+        parseNamedMixinApplication(try, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+          listener: handleIdentifier(typedef, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, typedef)
+        parseNamedMixinApplication(typedef, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+          listener: handleIdentifier(var, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, var)
+        parseNamedMixinApplication(var, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+          listener: handleIdentifier(void, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, void)
+        parseNamedMixinApplication(void, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+          listener: handleIdentifier(while, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, while)
+        parseNamedMixinApplication(while, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+            listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+          listener: handleIdentifier(with, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, with)
+        parseNamedMixinApplication(with, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(yield, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, yield)
+        parseNamedMixinApplication(yield, class, class)
+          listener: handleIdentifier(A, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(A, null)
+          parseMixinApplicationRest(A)
+            parseTypeList(with)
+              listener: beginTypeList(B)
+              listener: handleIdentifier(B, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(B, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(B)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect
new file mode 100644
index 0000000..049b7d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect
@@ -0,0 +1,141 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
+
+
+class[KeywordToken] abstract[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] as[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] assert[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] async[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] await[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] break[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] case[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] catch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] class[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] continue[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] default[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] do[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] else[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] enum[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] export[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extends[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extension[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] external[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] factory[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] false[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] final[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] finally[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] for[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] Function[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] get[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] hide[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] if[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] implements[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] import[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] in[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] inout[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] interface[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] is[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] late[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] library[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] native[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] new[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] null[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] of[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] on[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] operator[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] out[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] part[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] patch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] required[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] return[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] set[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] show[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] source[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] static[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] super[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] switch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] sync[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] this[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] throw[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] true[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] try[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] var[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] void[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] while[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] with[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] yield[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect
new file mode 100644
index 0000000..049b7d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect
@@ -0,0 +1,141 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
+
+
+class[KeywordToken] abstract[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] as[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] assert[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] async[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] await[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] break[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] case[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] catch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] class[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] continue[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] default[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] do[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] else[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] enum[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] export[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extends[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extension[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] external[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] factory[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] false[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] final[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] finally[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] for[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] Function[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] get[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] hide[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] if[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] implements[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] import[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] in[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] inout[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] interface[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] is[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] late[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] library[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] native[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] new[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] null[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] of[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] on[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] operator[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] out[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] part[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] patch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] required[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] return[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] set[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] show[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] source[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] static[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] super[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] switch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] sync[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] this[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] throw[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] true[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] try[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] var[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] void[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] while[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] with[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] yield[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart
new file mode 100644
index 0000000..1e88aff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart
@@ -0,0 +1 @@
+class
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
new file mode 100644
index 0000000..86afa58
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -0,0 +1,40 @@
+Problems reported:
+
+parser/error_recovery/issue_46346_prime_2:1:6: Expected an identifier, but got ''.
+class
+     ^...
+
+WARNING: Reporting at eof --- see below for details.
+
+parser/error_recovery/issue_46346_prime_2:1:6: A class declaration must have a body, even if it is empty.
+class
+     ^...
+
+WARNING: Reporting at eof --- see below for details.
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrNamedMixinApplicationPrelude(class)
+    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+    // WARNING: Reporting at eof for .
+    handleIdentifier(, classOrMixinDeclaration)
+    handleNoTypeVariables()
+    beginClassDeclaration(class, null, )
+      handleNoType()
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoType()
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleClassOrMixinImplements(null, 0)
+      handleRecoverClassHeader()
+      handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], , )
+      // WARNING: Reporting at eof for .
+      beginClassOrMixinBody(DeclarationKind.Class, {)
+      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
new file mode 100644
index 0000000..766bdc3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -0,0 +1,60 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, class)
+      parseClassOrNamedMixinApplication(null, class)
+        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
+            reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+              listener: // WARNING: Reporting at eof for .
+            rewriter()
+          listener: handleIdentifier(, classOrMixinDeclaration)
+        listener: handleNoTypeVariables()
+        listener: beginClassDeclaration(class, null, )
+        parseClass(, class, class, )
+          parseClassHeaderOpt(, class, class)
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassHeaderRecovery(, class, class)
+            parseClassHeaderOpt(, class, class)
+              parseClassExtendsOpt()
+              parseWithClauseOpt()
+              parseClassOrMixinImplementsOpt()
+            skipUnexpectedTokenOpt(, [extends, with, implements, {])
+            parseClassExtendsOpt()
+              listener: handleNoType()
+              listener: handleClassExtends(null, 1)
+            parseWithClauseOpt()
+              listener: handleClassNoWithClause()
+            parseClassOrMixinImplementsOpt()
+              listener: handleClassOrMixinImplements(null, 0)
+            listener: handleRecoverClassHeader()
+          ensureBlock(, null, class declaration)
+            reportRecoverableError(, Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}])
+              listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], , )
+              listener: // WARNING: Reporting at eof for .
+            insertBlock()
+              rewriter()
+              rewriter()
+          parseClassOrMixinOrExtensionBody(, DeclarationKind.Class, )
+            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect
new file mode 100644
index 0000000..6294f83
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect
@@ -0,0 +1,5 @@
+NOTICE: Stream was rewritten by parser!
+
+class{}
+
+class[KeywordToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect
new file mode 100644
index 0000000..dedca4c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect
@@ -0,0 +1,3 @@
+class
+
+class[KeywordToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart b/pkg/front_end/parser_testcases/error_recovery/symbols.dart
new file mode 100644
index 0000000..000061f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart
@@ -0,0 +1,101 @@
+main() {
+  #void;
+  #void.foo;
+  #foo.void;
+  #assert;
+  #break;
+  #case;
+  #catch;
+  #class;
+  #const;
+  #continue;
+  #default;
+  #do;
+  #else;
+  #enum;
+  #extends;
+  #false;
+  #final;
+  #finally;
+  #for;
+  #if;
+  #in;
+  #is;
+  #new;
+  #null;
+  #rethrow;
+  #return;
+  #super;
+  #switch;
+  #this;
+  #throw;
+  #true;
+  #try;
+  #var;
+  #while;
+  #with;
+  #foo.assert;
+  #foo.break;
+  #foo.case;
+  #foo.catch;
+  #foo.class;
+  #foo.const;
+  #foo.continue;
+  #foo.default;
+  #foo.do;
+  #foo.else;
+  #foo.enum;
+  #foo.extends;
+  #foo.false;
+  #foo.final;
+  #foo.finally;
+  #foo.for;
+  #foo.if;
+  #foo.in;
+  #foo.is;
+  #foo.new;
+  #foo.null;
+  #foo.rethrow;
+  #foo.return;
+  #foo.super;
+  #foo.switch;
+  #foo.this;
+  #foo.throw;
+  #foo.true;
+  #foo.try;
+  #foo.var;
+  #foo.while;
+  #foo.with;
+  #assert.foo;
+  #break.foo;
+  #case.foo;
+  #catch.foo;
+  #class.foo;
+  #const.foo;
+  #continue.foo;
+  #default.foo;
+  #do.foo;
+  #else.foo;
+  #enum.foo;
+  #extends.foo;
+  #false.foo;
+  #final.foo;
+  #finally.foo;
+  #for.foo;
+  #if.foo;
+  #in.foo;
+  #is.foo;
+  #new.foo;
+  #null.foo;
+  #rethrow.foo;
+  #return.foo;
+  #super.foo;
+  #switch.foo;
+  #this.foo;
+  #throw.foo;
+  #true.foo;
+  #try.foo;
+  #var.foo;
+  #while.foo;
+  #with.foo;
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
new file mode 100644
index 0000000..0e96030
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
@@ -0,0 +1,969 @@
+Problems reported:
+
+parser/error_recovery/symbols:4:8: 'void' can't be used as an identifier because it's a keyword.
+  #foo.void;
+       ^^^^
+
+parser/error_recovery/symbols:5:4: 'assert' can't be used as an identifier because it's a keyword.
+  #assert;
+   ^^^^^^
+
+parser/error_recovery/symbols:6:4: 'break' can't be used as an identifier because it's a keyword.
+  #break;
+   ^^^^^
+
+parser/error_recovery/symbols:7:4: 'case' can't be used as an identifier because it's a keyword.
+  #case;
+   ^^^^
+
+parser/error_recovery/symbols:8:4: 'catch' can't be used as an identifier because it's a keyword.
+  #catch;
+   ^^^^^
+
+parser/error_recovery/symbols:9:4: 'class' can't be used as an identifier because it's a keyword.
+  #class;
+   ^^^^^
+
+parser/error_recovery/symbols:10:4: 'const' can't be used as an identifier because it's a keyword.
+  #const;
+   ^^^^^
+
+parser/error_recovery/symbols:11:4: 'continue' can't be used as an identifier because it's a keyword.
+  #continue;
+   ^^^^^^^^
+
+parser/error_recovery/symbols:12:4: 'default' can't be used as an identifier because it's a keyword.
+  #default;
+   ^^^^^^^
+
+parser/error_recovery/symbols:13:4: 'do' can't be used as an identifier because it's a keyword.
+  #do;
+   ^^
+
+parser/error_recovery/symbols:14:4: 'else' can't be used as an identifier because it's a keyword.
+  #else;
+   ^^^^
+
+parser/error_recovery/symbols:15:4: 'enum' can't be used as an identifier because it's a keyword.
+  #enum;
+   ^^^^
+
+parser/error_recovery/symbols:16:4: 'extends' can't be used as an identifier because it's a keyword.
+  #extends;
+   ^^^^^^^
+
+parser/error_recovery/symbols:17:4: 'false' can't be used as an identifier because it's a keyword.
+  #false;
+   ^^^^^
+
+parser/error_recovery/symbols:18:4: 'final' can't be used as an identifier because it's a keyword.
+  #final;
+   ^^^^^
+
+parser/error_recovery/symbols:19:4: 'finally' can't be used as an identifier because it's a keyword.
+  #finally;
+   ^^^^^^^
+
+parser/error_recovery/symbols:20:4: 'for' can't be used as an identifier because it's a keyword.
+  #for;
+   ^^^
+
+parser/error_recovery/symbols:21:4: 'if' can't be used as an identifier because it's a keyword.
+  #if;
+   ^^
+
+parser/error_recovery/symbols:22:4: 'in' can't be used as an identifier because it's a keyword.
+  #in;
+   ^^
+
+parser/error_recovery/symbols:23:4: 'is' can't be used as an identifier because it's a keyword.
+  #is;
+   ^^
+
+parser/error_recovery/symbols:24:4: 'new' can't be used as an identifier because it's a keyword.
+  #new;
+   ^^^
+
+parser/error_recovery/symbols:25:4: 'null' can't be used as an identifier because it's a keyword.
+  #null;
+   ^^^^
+
+parser/error_recovery/symbols:26:4: 'rethrow' can't be used as an identifier because it's a keyword.
+  #rethrow;
+   ^^^^^^^
+
+parser/error_recovery/symbols:27:4: 'return' can't be used as an identifier because it's a keyword.
+  #return;
+   ^^^^^^
+
+parser/error_recovery/symbols:28:4: 'super' can't be used as an identifier because it's a keyword.
+  #super;
+   ^^^^^
+
+parser/error_recovery/symbols:29:4: 'switch' can't be used as an identifier because it's a keyword.
+  #switch;
+   ^^^^^^
+
+parser/error_recovery/symbols:30:4: 'this' can't be used as an identifier because it's a keyword.
+  #this;
+   ^^^^
+
+parser/error_recovery/symbols:31:4: 'throw' can't be used as an identifier because it's a keyword.
+  #throw;
+   ^^^^^
+
+parser/error_recovery/symbols:32:4: 'true' can't be used as an identifier because it's a keyword.
+  #true;
+   ^^^^
+
+parser/error_recovery/symbols:33:4: 'try' can't be used as an identifier because it's a keyword.
+  #try;
+   ^^^
+
+parser/error_recovery/symbols:34:4: 'var' can't be used as an identifier because it's a keyword.
+  #var;
+   ^^^
+
+parser/error_recovery/symbols:35:4: 'while' can't be used as an identifier because it's a keyword.
+  #while;
+   ^^^^^
+
+parser/error_recovery/symbols:36:4: 'with' can't be used as an identifier because it's a keyword.
+  #with;
+   ^^^^
+
+parser/error_recovery/symbols:37:8: 'assert' can't be used as an identifier because it's a keyword.
+  #foo.assert;
+       ^^^^^^
+
+parser/error_recovery/symbols:38:8: 'break' can't be used as an identifier because it's a keyword.
+  #foo.break;
+       ^^^^^
+
+parser/error_recovery/symbols:39:8: 'case' can't be used as an identifier because it's a keyword.
+  #foo.case;
+       ^^^^
+
+parser/error_recovery/symbols:40:8: 'catch' can't be used as an identifier because it's a keyword.
+  #foo.catch;
+       ^^^^^
+
+parser/error_recovery/symbols:41:8: 'class' can't be used as an identifier because it's a keyword.
+  #foo.class;
+       ^^^^^
+
+parser/error_recovery/symbols:42:8: 'const' can't be used as an identifier because it's a keyword.
+  #foo.const;
+       ^^^^^
+
+parser/error_recovery/symbols:43:8: 'continue' can't be used as an identifier because it's a keyword.
+  #foo.continue;
+       ^^^^^^^^
+
+parser/error_recovery/symbols:44:8: 'default' can't be used as an identifier because it's a keyword.
+  #foo.default;
+       ^^^^^^^
+
+parser/error_recovery/symbols:45:8: 'do' can't be used as an identifier because it's a keyword.
+  #foo.do;
+       ^^
+
+parser/error_recovery/symbols:46:8: 'else' can't be used as an identifier because it's a keyword.
+  #foo.else;
+       ^^^^
+
+parser/error_recovery/symbols:47:8: 'enum' can't be used as an identifier because it's a keyword.
+  #foo.enum;
+       ^^^^
+
+parser/error_recovery/symbols:48:8: 'extends' can't be used as an identifier because it's a keyword.
+  #foo.extends;
+       ^^^^^^^
+
+parser/error_recovery/symbols:49:8: 'false' can't be used as an identifier because it's a keyword.
+  #foo.false;
+       ^^^^^
+
+parser/error_recovery/symbols:50:8: 'final' can't be used as an identifier because it's a keyword.
+  #foo.final;
+       ^^^^^
+
+parser/error_recovery/symbols:51:8: 'finally' can't be used as an identifier because it's a keyword.
+  #foo.finally;
+       ^^^^^^^
+
+parser/error_recovery/symbols:52:8: 'for' can't be used as an identifier because it's a keyword.
+  #foo.for;
+       ^^^
+
+parser/error_recovery/symbols:53:8: 'if' can't be used as an identifier because it's a keyword.
+  #foo.if;
+       ^^
+
+parser/error_recovery/symbols:54:8: 'in' can't be used as an identifier because it's a keyword.
+  #foo.in;
+       ^^
+
+parser/error_recovery/symbols:55:8: 'is' can't be used as an identifier because it's a keyword.
+  #foo.is;
+       ^^
+
+parser/error_recovery/symbols:56:8: 'new' can't be used as an identifier because it's a keyword.
+  #foo.new;
+       ^^^
+
+parser/error_recovery/symbols:57:8: 'null' can't be used as an identifier because it's a keyword.
+  #foo.null;
+       ^^^^
+
+parser/error_recovery/symbols:58:8: 'rethrow' can't be used as an identifier because it's a keyword.
+  #foo.rethrow;
+       ^^^^^^^
+
+parser/error_recovery/symbols:59:8: 'return' can't be used as an identifier because it's a keyword.
+  #foo.return;
+       ^^^^^^
+
+parser/error_recovery/symbols:60:8: 'super' can't be used as an identifier because it's a keyword.
+  #foo.super;
+       ^^^^^
+
+parser/error_recovery/symbols:61:8: 'switch' can't be used as an identifier because it's a keyword.
+  #foo.switch;
+       ^^^^^^
+
+parser/error_recovery/symbols:62:8: 'this' can't be used as an identifier because it's a keyword.
+  #foo.this;
+       ^^^^
+
+parser/error_recovery/symbols:63:8: 'throw' can't be used as an identifier because it's a keyword.
+  #foo.throw;
+       ^^^^^
+
+parser/error_recovery/symbols:64:8: 'true' can't be used as an identifier because it's a keyword.
+  #foo.true;
+       ^^^^
+
+parser/error_recovery/symbols:65:8: 'try' can't be used as an identifier because it's a keyword.
+  #foo.try;
+       ^^^
+
+parser/error_recovery/symbols:66:8: 'var' can't be used as an identifier because it's a keyword.
+  #foo.var;
+       ^^^
+
+parser/error_recovery/symbols:67:8: 'while' can't be used as an identifier because it's a keyword.
+  #foo.while;
+       ^^^^^
+
+parser/error_recovery/symbols:68:8: 'with' can't be used as an identifier because it's a keyword.
+  #foo.with;
+       ^^^^
+
+parser/error_recovery/symbols:69:4: 'assert' can't be used as an identifier because it's a keyword.
+  #assert.foo;
+   ^^^^^^
+
+parser/error_recovery/symbols:70:4: 'break' can't be used as an identifier because it's a keyword.
+  #break.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:71:4: 'case' can't be used as an identifier because it's a keyword.
+  #case.foo;
+   ^^^^
+
+parser/error_recovery/symbols:72:4: 'catch' can't be used as an identifier because it's a keyword.
+  #catch.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:73:4: 'class' can't be used as an identifier because it's a keyword.
+  #class.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:74:4: 'const' can't be used as an identifier because it's a keyword.
+  #const.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:75:4: 'continue' can't be used as an identifier because it's a keyword.
+  #continue.foo;
+   ^^^^^^^^
+
+parser/error_recovery/symbols:76:4: 'default' can't be used as an identifier because it's a keyword.
+  #default.foo;
+   ^^^^^^^
+
+parser/error_recovery/symbols:77:4: 'do' can't be used as an identifier because it's a keyword.
+  #do.foo;
+   ^^
+
+parser/error_recovery/symbols:78:4: 'else' can't be used as an identifier because it's a keyword.
+  #else.foo;
+   ^^^^
+
+parser/error_recovery/symbols:79:4: 'enum' can't be used as an identifier because it's a keyword.
+  #enum.foo;
+   ^^^^
+
+parser/error_recovery/symbols:80:4: 'extends' can't be used as an identifier because it's a keyword.
+  #extends.foo;
+   ^^^^^^^
+
+parser/error_recovery/symbols:81:4: 'false' can't be used as an identifier because it's a keyword.
+  #false.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:82:4: 'final' can't be used as an identifier because it's a keyword.
+  #final.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:83:4: 'finally' can't be used as an identifier because it's a keyword.
+  #finally.foo;
+   ^^^^^^^
+
+parser/error_recovery/symbols:84:4: 'for' can't be used as an identifier because it's a keyword.
+  #for.foo;
+   ^^^
+
+parser/error_recovery/symbols:85:4: 'if' can't be used as an identifier because it's a keyword.
+  #if.foo;
+   ^^
+
+parser/error_recovery/symbols:86:4: 'in' can't be used as an identifier because it's a keyword.
+  #in.foo;
+   ^^
+
+parser/error_recovery/symbols:87:4: 'is' can't be used as an identifier because it's a keyword.
+  #is.foo;
+   ^^
+
+parser/error_recovery/symbols:88:4: 'new' can't be used as an identifier because it's a keyword.
+  #new.foo;
+   ^^^
+
+parser/error_recovery/symbols:89:4: 'null' can't be used as an identifier because it's a keyword.
+  #null.foo;
+   ^^^^
+
+parser/error_recovery/symbols:90:4: 'rethrow' can't be used as an identifier because it's a keyword.
+  #rethrow.foo;
+   ^^^^^^^
+
+parser/error_recovery/symbols:91:4: 'return' can't be used as an identifier because it's a keyword.
+  #return.foo;
+   ^^^^^^
+
+parser/error_recovery/symbols:92:4: 'super' can't be used as an identifier because it's a keyword.
+  #super.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:93:4: 'switch' can't be used as an identifier because it's a keyword.
+  #switch.foo;
+   ^^^^^^
+
+parser/error_recovery/symbols:94:4: 'this' can't be used as an identifier because it's a keyword.
+  #this.foo;
+   ^^^^
+
+parser/error_recovery/symbols:95:4: 'throw' can't be used as an identifier because it's a keyword.
+  #throw.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:96:4: 'true' can't be used as an identifier because it's a keyword.
+  #true.foo;
+   ^^^^
+
+parser/error_recovery/symbols:97:4: 'try' can't be used as an identifier because it's a keyword.
+  #try.foo;
+   ^^^
+
+parser/error_recovery/symbols:98:4: 'var' can't be used as an identifier because it's a keyword.
+  #var.foo;
+   ^^^
+
+parser/error_recovery/symbols:99:4: 'while' can't be used as an identifier because it's a keyword.
+  #while.foo;
+   ^^^^^
+
+parser/error_recovery/symbols:100:4: 'with' can't be used as an identifier because it's a keyword.
+  #with.foo;
+   ^^^^
+
+beginCompilationUnit(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({)
+        beginLiteralSymbol(#)
+          handleSymbolVoid(void)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleSymbolVoid(void)
+        endLiteralSymbol(#, 1)
+        handleIdentifier(foo, expressionContinuation)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(foo, ;)
+        handleEndingBinaryExpression(.)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+          handleIdentifier(void, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+          handleIdentifier(assert, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+          handleIdentifier(break, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+          handleIdentifier(case, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+          handleIdentifier(catch, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+          handleIdentifier(class, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+          handleIdentifier(const, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+          handleIdentifier(continue, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+          handleIdentifier(default, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+          handleIdentifier(do, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+          handleIdentifier(else, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+          handleIdentifier(enum, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+          handleIdentifier(extends, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+          handleIdentifier(false, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+          handleIdentifier(final, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+          handleIdentifier(finally, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+          handleIdentifier(for, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+          handleIdentifier(if, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+          handleIdentifier(in, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+          handleIdentifier(is, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+          handleIdentifier(new, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+          handleIdentifier(null, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+          handleIdentifier(rethrow, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+          handleIdentifier(return, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+          handleIdentifier(switch, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+          handleIdentifier(this, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+          handleIdentifier(throw, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+          handleIdentifier(true, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+          handleIdentifier(try, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+          handleIdentifier(var, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+          handleIdentifier(while, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+          handleIdentifier(with, literalSymbol)
+        endLiteralSymbol(#, 1)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+          handleIdentifier(assert, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+          handleIdentifier(break, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+          handleIdentifier(case, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+          handleIdentifier(catch, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+          handleIdentifier(class, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+          handleIdentifier(const, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+          handleIdentifier(continue, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+          handleIdentifier(default, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+          handleIdentifier(do, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+          handleIdentifier(else, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+          handleIdentifier(enum, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+          handleIdentifier(extends, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+          handleIdentifier(false, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+          handleIdentifier(final, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+          handleIdentifier(finally, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+          handleIdentifier(for, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+          handleIdentifier(if, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+          handleIdentifier(in, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+          handleIdentifier(is, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+          handleIdentifier(new, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+          handleIdentifier(null, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+          handleIdentifier(rethrow, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+          handleIdentifier(return, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+          handleIdentifier(switch, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+          handleIdentifier(this, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+          handleIdentifier(throw, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+          handleIdentifier(true, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+          handleIdentifier(try, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+          handleIdentifier(var, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+          handleIdentifier(while, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleIdentifier(foo, literalSymbol)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+          handleIdentifier(with, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+          handleIdentifier(assert, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+          handleIdentifier(break, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+          handleIdentifier(case, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+          handleIdentifier(catch, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+          handleIdentifier(class, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+          handleIdentifier(const, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+          handleIdentifier(continue, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+          handleIdentifier(default, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+          handleIdentifier(do, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+          handleIdentifier(else, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+          handleIdentifier(enum, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+          handleIdentifier(extends, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+          handleIdentifier(false, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+          handleIdentifier(final, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+          handleIdentifier(finally, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+          handleIdentifier(for, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+          handleIdentifier(if, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+          handleIdentifier(in, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+          handleIdentifier(is, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+          handleIdentifier(new, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+          handleIdentifier(null, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+          handleIdentifier(rethrow, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+          handleIdentifier(return, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+          handleIdentifier(switch, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+          handleIdentifier(this, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+          handleIdentifier(throw, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+          handleIdentifier(true, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+          handleIdentifier(try, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+          handleIdentifier(var, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+          handleIdentifier(while, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+        beginLiteralSymbol(#)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+          handleIdentifier(with, literalSymbol)
+          handleIdentifier(foo, literalSymbolContinuation)
+        endLiteralSymbol(#, 2)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(99, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
new file mode 100644
index 0000000..8db03b1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
@@ -0,0 +1,2149 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, #)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement({)
+                    parseExpression({)
+                      parsePrecedenceExpression({, 1, true)
+                        parseUnaryExpression({, true)
+                          parsePrimary({, expression)
+                            parseLiteralSymbol({)
+                              listener: beginLiteralSymbol(#)
+                              listener: handleSymbolVoid(void)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(void)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              listener: handleSymbolVoid(void)
+                              listener: endLiteralSymbol(#, 1)
+                        parsePrimary(., expressionContinuation)
+                          parseSendOrFunctionLiteral(., expressionContinuation)
+                            parseSend(., expressionContinuation)
+                              isNextIdentifier(.)
+                              ensureIdentifier(., expressionContinuation)
+                                listener: handleIdentifier(foo, expressionContinuation)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(foo)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(foo, ;)
+                        listener: handleEndingBinaryExpression(.)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+                                listener: handleIdentifier(void, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(void)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+                                listener: handleIdentifier(assert, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(assert)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+                                listener: handleIdentifier(break, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(break)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+                                listener: handleIdentifier(case, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(case)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+                                listener: handleIdentifier(catch, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(catch)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+                                listener: handleIdentifier(class, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(class)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+                                listener: handleIdentifier(const, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(const)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+                                listener: handleIdentifier(continue, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(continue)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+                                listener: handleIdentifier(default, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(default)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+                                listener: handleIdentifier(do, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(do)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+                                listener: handleIdentifier(else, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(else)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+                                listener: handleIdentifier(enum, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(enum)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+                                listener: handleIdentifier(extends, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(extends)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+                                listener: handleIdentifier(false, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(false)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+                                listener: handleIdentifier(final, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(final)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+                                listener: handleIdentifier(finally, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(finally)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+                                listener: handleIdentifier(for, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(for)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+                                listener: handleIdentifier(if, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(if)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+                                listener: handleIdentifier(in, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(in)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+                                listener: handleIdentifier(is, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(is)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+                                listener: handleIdentifier(new, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(new)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+                                listener: handleIdentifier(null, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(null)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+                                listener: handleIdentifier(rethrow, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(rethrow)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+                                listener: handleIdentifier(return, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(return)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                                listener: handleIdentifier(super, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(super)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+                                listener: handleIdentifier(switch, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(switch)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+                                listener: handleIdentifier(this, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(this)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+                                listener: handleIdentifier(throw, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(throw)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+                                listener: handleIdentifier(true, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(true)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+                                listener: handleIdentifier(try, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(try)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+                                listener: handleIdentifier(var, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(var)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+                                listener: handleIdentifier(while, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(while)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+                                listener: handleIdentifier(with, literalSymbol)
+                              listener: endLiteralSymbol(#, 1)
+                    ensureSemicolon(with)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+                                listener: handleIdentifier(assert, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(assert)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+                                listener: handleIdentifier(break, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(break)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+                                listener: handleIdentifier(case, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(case)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+                                listener: handleIdentifier(catch, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(catch)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+                                listener: handleIdentifier(class, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(class)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+                                listener: handleIdentifier(const, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(const)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+                                listener: handleIdentifier(continue, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(continue)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+                                listener: handleIdentifier(default, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(default)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+                                listener: handleIdentifier(do, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(do)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+                                listener: handleIdentifier(else, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(else)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+                                listener: handleIdentifier(enum, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(enum)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+                                listener: handleIdentifier(extends, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(extends)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+                                listener: handleIdentifier(false, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(false)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+                                listener: handleIdentifier(final, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(final)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+                                listener: handleIdentifier(finally, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(finally)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+                                listener: handleIdentifier(for, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(for)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+                                listener: handleIdentifier(if, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(if)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+                                listener: handleIdentifier(in, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(in)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+                                listener: handleIdentifier(is, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(is)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+                                listener: handleIdentifier(new, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(new)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+                                listener: handleIdentifier(null, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(null)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+                                listener: handleIdentifier(rethrow, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(rethrow)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+                                listener: handleIdentifier(return, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(return)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                                listener: handleIdentifier(super, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(super)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+                                listener: handleIdentifier(switch, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(switch)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+                                listener: handleIdentifier(this, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(this)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+                                listener: handleIdentifier(throw, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(throw)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+                                listener: handleIdentifier(true, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(true)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+                                listener: handleIdentifier(try, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(try)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+                                listener: handleIdentifier(var, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(var)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+                                listener: handleIdentifier(while, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(while)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                listener: handleIdentifier(foo, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+                                listener: handleIdentifier(with, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(with)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+                                listener: handleIdentifier(assert, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+                                listener: handleIdentifier(break, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+                                listener: handleIdentifier(case, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+                                listener: handleIdentifier(catch, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+                                listener: handleIdentifier(class, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+                                listener: handleIdentifier(const, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+                                listener: handleIdentifier(continue, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+                                listener: handleIdentifier(default, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+                                listener: handleIdentifier(do, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+                                listener: handleIdentifier(else, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+                                listener: handleIdentifier(enum, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+                                listener: handleIdentifier(extends, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+                                listener: handleIdentifier(false, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+                                listener: handleIdentifier(final, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+                                listener: handleIdentifier(finally, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+                                listener: handleIdentifier(for, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+                                listener: handleIdentifier(if, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+                                listener: handleIdentifier(in, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+                                listener: handleIdentifier(is, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+                                listener: handleIdentifier(new, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+                                listener: handleIdentifier(null, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+                                listener: handleIdentifier(rethrow, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+                                listener: handleIdentifier(return, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                                listener: handleIdentifier(super, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+                                listener: handleIdentifier(switch, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+                                listener: handleIdentifier(this, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+                                listener: handleIdentifier(throw, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+                                listener: handleIdentifier(true, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+                                listener: handleIdentifier(try, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+                                listener: handleIdentifier(var, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+                                listener: handleIdentifier(while, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, #)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(#)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseLiteralSymbol(;)
+                              listener: beginLiteralSymbol(#)
+                              ensureIdentifier(#, literalSymbol)
+                                reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+                                  listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+                                listener: handleIdentifier(with, literalSymbol)
+                              ensureIdentifier(., literalSymbolContinuation)
+                                listener: handleIdentifier(foo, literalSymbolContinuation)
+                              listener: endLiteralSymbol(#, 2)
+                    ensureSemicolon(foo)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(99, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect
new file mode 100644
index 0000000..4db15cc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect
@@ -0,0 +1,205 @@
+main() {
+#void;
+#void.foo;
+#foo.void;
+#assert;
+#break;
+#case;
+#catch;
+#class;
+#const;
+#continue;
+#default;
+#do;
+#else;
+#enum;
+#extends;
+#false;
+#final;
+#finally;
+#for;
+#if;
+#in;
+#is;
+#new;
+#null;
+#rethrow;
+#return;
+#super;
+#switch;
+#this;
+#throw;
+#true;
+#try;
+#var;
+#while;
+#with;
+#foo.assert;
+#foo.break;
+#foo.case;
+#foo.catch;
+#foo.class;
+#foo.const;
+#foo.continue;
+#foo.default;
+#foo.do;
+#foo.else;
+#foo.enum;
+#foo.extends;
+#foo.false;
+#foo.final;
+#foo.finally;
+#foo.for;
+#foo.if;
+#foo.in;
+#foo.is;
+#foo.new;
+#foo.null;
+#foo.rethrow;
+#foo.return;
+#foo.super;
+#foo.switch;
+#foo.this;
+#foo.throw;
+#foo.true;
+#foo.try;
+#foo.var;
+#foo.while;
+#foo.with;
+#assert.foo;
+#break.foo;
+#case.foo;
+#catch.foo;
+#class.foo;
+#const.foo;
+#continue.foo;
+#default.foo;
+#do.foo;
+#else.foo;
+#enum.foo;
+#extends.foo;
+#false.foo;
+#final.foo;
+#finally.foo;
+#for.foo;
+#if.foo;
+#in.foo;
+#is.foo;
+#new.foo;
+#null.foo;
+#rethrow.foo;
+#return.foo;
+#super.foo;
+#switch.foo;
+#this.foo;
+#throw.foo;
+#true.foo;
+#try.foo;
+#var.foo;
+#while.foo;
+#with.foo;
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+#[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]void[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect
new file mode 100644
index 0000000..4db15cc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect
@@ -0,0 +1,205 @@
+main() {
+#void;
+#void.foo;
+#foo.void;
+#assert;
+#break;
+#case;
+#catch;
+#class;
+#const;
+#continue;
+#default;
+#do;
+#else;
+#enum;
+#extends;
+#false;
+#final;
+#finally;
+#for;
+#if;
+#in;
+#is;
+#new;
+#null;
+#rethrow;
+#return;
+#super;
+#switch;
+#this;
+#throw;
+#true;
+#try;
+#var;
+#while;
+#with;
+#foo.assert;
+#foo.break;
+#foo.case;
+#foo.catch;
+#foo.class;
+#foo.const;
+#foo.continue;
+#foo.default;
+#foo.do;
+#foo.else;
+#foo.enum;
+#foo.extends;
+#foo.false;
+#foo.final;
+#foo.finally;
+#foo.for;
+#foo.if;
+#foo.in;
+#foo.is;
+#foo.new;
+#foo.null;
+#foo.rethrow;
+#foo.return;
+#foo.super;
+#foo.switch;
+#foo.this;
+#foo.throw;
+#foo.true;
+#foo.try;
+#foo.var;
+#foo.while;
+#foo.with;
+#assert.foo;
+#break.foo;
+#case.foo;
+#catch.foo;
+#class.foo;
+#const.foo;
+#continue.foo;
+#default.foo;
+#do.foo;
+#else.foo;
+#enum.foo;
+#extends.foo;
+#false.foo;
+#final.foo;
+#finally.foo;
+#for.foo;
+#if.foo;
+#in.foo;
+#is.foo;
+#new.foo;
+#null.foo;
+#rethrow.foo;
+#return.foo;
+#super.foo;
+#switch.foo;
+#this.foo;
+#throw.foo;
+#true.foo;
+#try.foo;
+#var.foo;
+#while.foo;
+#with.foo;
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+#[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]void[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart
new file mode 100644
index 0000000..5d082fb
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  A.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+  factory A.redirectingTwice() = A.redirectingFactory;
+}
+
+class B extends A {}
+
+test() {
+  A Function() f1 = A.redirectingFactory;
+  A Function() f2 = A.redirectingFactoryChild;
+  A Function() f3 = A.redirectingTwice;
+  A x1 = f1();
+  B x2 = f2() as B;
+  A x3 f3();
+}
+
+main() => test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
new file mode 100644
index 0000000..93e586a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+//   A Function() f1 = A.redirectingFactory;
+//                       ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+//   A Function() f2 = A.redirectingFactoryChild;
+//                       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+//   A Function() f3 = A.redirectingTwice;
+//                       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+//   A x3 f3();
+//     ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+  static factory redirectingTwice() → self::A
+    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+static method test() → dynamic {
+  () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+  A Function() f1 = A.redirectingFactory;
+                      ^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+  A Function() f2 = A.redirectingFactoryChild;
+                      ^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+  A Function() f3 = A.redirectingTwice;
+                      ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  self::A x1 = f1(){() → self::A};
+  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+  self::A x3;
+  f3(){() → self::A};
+}
+static method main() → dynamic
+  return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..dbc8412
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+//   A Function() f1 = A.redirectingFactory;
+//                       ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+//   A Function() f2 = A.redirectingFactoryChild;
+//                       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+//   A Function() f3 = A.redirectingTwice;
+//                       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+//   A x3 f3();
+//     ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  static factory redirectingFactory() → self::A
+    let Never #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let core::String* #redirecting_factory = "B.new" in invalid-expression;
+  static factory redirectingTwice() → self::A
+    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+static method test() → dynamic {
+  () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+  A Function() f1 = A.redirectingFactory;
+                      ^^^^^^^^^^^^^^^^^^";
+  () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+  A Function() f2 = A.redirectingFactoryChild;
+                      ^^^^^^^^^^^^^^^^^^^^^^^";
+  () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+  A Function() f3 = A.redirectingTwice;
+                      ^^^^^^^^^^^^^^^^";
+  self::A x1 = f1(){() → self::A};
+  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+  self::A x3;
+  f3(){() → self::A};
+}
+static method main() → dynamic
+  return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..1e775a7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class A {
+  A.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+  factory A.redirectingTwice() = A.redirectingFactory;
+}
+class B extends A {}
+test() {}
+main() => test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
new file mode 100644
index 0000000..93e586a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+//   A Function() f1 = A.redirectingFactory;
+//                       ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+//   A Function() f2 = A.redirectingFactoryChild;
+//                       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+//   A Function() f3 = A.redirectingTwice;
+//                       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+//   A x3 f3();
+//     ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+  static factory redirectingTwice() → self::A
+    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+static method test() → dynamic {
+  () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+  A Function() f1 = A.redirectingFactory;
+                      ^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+  A Function() f2 = A.redirectingFactoryChild;
+                      ^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+  A Function() f3 = A.redirectingTwice;
+                      ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  self::A x1 = f1(){() → self::A};
+  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+  self::A x3;
+  f3(){() → self::A};
+}
+static method main() → dynamic
+  return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..a8e0129
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  constructor new() → self::A
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+  static factory redirectingTwice() → self::A
+    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..dbc8412
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+//   A Function() f1 = A.redirectingFactory;
+//                       ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+//   A Function() f2 = A.redirectingFactoryChild;
+//                       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+//   A Function() f3 = A.redirectingTwice;
+//                       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+//   A x3 f3();
+//     ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  static factory redirectingFactory() → self::A
+    let Never #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let core::String* #redirecting_factory = "B.new" in invalid-expression;
+  static factory redirectingTwice() → self::A
+    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+static method test() → dynamic {
+  () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+  A Function() f1 = A.redirectingFactory;
+                      ^^^^^^^^^^^^^^^^^^";
+  () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+  A Function() f2 = A.redirectingFactoryChild;
+                      ^^^^^^^^^^^^^^^^^^^^^^^";
+  () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+  A Function() f3 = A.redirectingTwice;
+                      ^^^^^^^^^^^^^^^^";
+  self::A x1 = f1(){() → self::A};
+  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+  self::A x3;
+  f3(){() → self::A};
+}
+static method main() → dynamic
+  return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart
new file mode 100644
index 0000000..681aeae
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  A.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+  A.redirecting() : this.new();
+}
+
+class B extends A {}
+
+class C {
+  final int x;
+  const C.new(this.x);
+}
+
+class D extend C {
+  D(int x) : super.new(x * 2);
+}
+
+test() {
+  D.new(1);
+  const C.new(1);
+  new C.new(1);
+  
+  var f1 = A.new;
+  var f2 = B.new;
+  var f3 = C.new;
+  var f4 = D.new;
+  f1();
+  f2();
+  f3(1);
+  f4(1);
+
+  A Function() g1 = A.new;
+  B Function() g2 = B.new;
+  C Function(int x) g3 = C.new;
+  D Function(int x) g4 = D.new;
+  g1();
+  g2();
+  g3(1);
+  g4(1);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
new file mode 100644
index 0000000..c5f6007
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.redirecting() : this.new();
+//                          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(this.x);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D(int x) : super.new(x * 2);
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+//   D(int x) : super.new(x * 2);
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(1);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   new C.new(1);
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  constructor redirecting() → self::A
+    : this self::A::new()
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor new(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •(core::int x) → self::D
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+  D(int x) : super.new(x * 2);
+             ^^^^^"
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+  D.new(1);
+    ^^^";
+  #C2;
+  new self::C::new(1);
+  dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+  var f1 = A.new;
+             ^^^";
+  dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+  var f2 = B.new;
+             ^^^";
+  dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+  var f3 = C.new;
+             ^^^";
+  dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+  var f4 = D.new;
+             ^^^";
+  f1{dynamic}.call();
+  f2{dynamic}.call();
+  f3{dynamic}.call(1);
+  f4{dynamic}.call(1);
+  () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+  A Function() g1 = A.new;
+                      ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+  B Function() g2 = B.new;
+                      ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::B;
+  (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+  C Function(int x) g3 = C.new;
+                           ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::C;
+  (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+  D Function(int x) g4 = D.new;
+                           ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::D;
+  g1(){() → self::A};
+  g2(){() → self::B};
+  g3(1){(core::int) → self::C};
+  g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..7323740
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.redirecting() : this.new();
+//                          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(this.x);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D(int x) : super.new(x * 2);
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+//   D(int x) : super.new(x * 2);
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(1);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   new C.new(1);
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  constructor redirecting() → self::A
+    : this self::A::new()
+    ;
+  static factory redirectingFactory() → self::A
+    let Never #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let core::String* #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor new(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •(core::int x) → self::D
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+  D(int x) : super.new(x * 2);
+             ^^^^^"
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+  D.new(1);
+    ^^^";
+  #C2;
+  new self::C::new(1);
+  dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+  var f1 = A.new;
+             ^^^";
+  dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+  var f2 = B.new;
+             ^^^";
+  dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+  var f3 = C.new;
+             ^^^";
+  dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+  var f4 = D.new;
+             ^^^";
+  f1{dynamic}.call();
+  f2{dynamic}.call();
+  f3{dynamic}.call(1);
+  f4{dynamic}.call(1);
+  () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+  A Function() g1 = A.new;
+                      ^^^";
+  () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+  B Function() g2 = B.new;
+                      ^^^";
+  (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+  C Function(int x) g3 = C.new;
+                           ^^^";
+  (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+  D Function(int x) g4 = D.new;
+                           ^^^";
+  g1(){() → self::A};
+  g2(){() → self::B};
+  g3(1){(core::int) → self::C};
+  g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..d70331c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class A {
+  A.new();
+  factory A.redirectingFactory() = A.new;
+  factory A.redirectingFactoryChild() = B.new;
+  A.redirecting() : this.new();
+}
+class B extends A {}
+class C {
+  final int x;
+  const C.new(this.x);
+}
+class D extend C {
+  D(int x) : super.new(x * 2);
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
new file mode 100644
index 0000000..c5f6007
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.redirecting() : this.new();
+//                          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(this.x);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D(int x) : super.new(x * 2);
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+//   D(int x) : super.new(x * 2);
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(1);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   new C.new(1);
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  constructor redirecting() → self::A
+    : this self::A::new()
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor new(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •(core::int x) → self::D
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+  D(int x) : super.new(x * 2);
+             ^^^^^"
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+  D.new(1);
+    ^^^";
+  #C2;
+  new self::C::new(1);
+  dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+  var f1 = A.new;
+             ^^^";
+  dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+  var f2 = B.new;
+             ^^^";
+  dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+  var f3 = C.new;
+             ^^^";
+  dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+  var f4 = D.new;
+             ^^^";
+  f1{dynamic}.call();
+  f2{dynamic}.call();
+  f3{dynamic}.call(1);
+  f4{dynamic}.call(1);
+  () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+  A Function() g1 = A.new;
+                      ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+  () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+  B Function() g2 = B.new;
+                      ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::B;
+  (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+  C Function(int x) g3 = C.new;
+                           ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::C;
+  (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+  D Function(int x) g4 = D.new;
+                           ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::D;
+  g1(){() → self::A};
+  g2(){() → self::B};
+  g3(1){(core::int) → self::C};
+  g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..286b949
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.redirecting() : this.new();
+//                          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(this.x);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D(int x) : super.new(x * 2);
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  constructor new() → self::A
+    ;
+  constructor redirecting() → self::A
+    ;
+  static factory redirectingFactory() → self::A
+    let dynamic #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor new(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •(core::int x) → self::D
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..7323740
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.new();
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactory() = A.new;
+//                                      ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   factory A.redirectingFactoryChild() = B.new;
+//                                           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A.redirecting() : this.new();
+//                          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(this.x);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D(int x) : super.new(x * 2);
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+//   factory A.redirectingFactoryChild() = B.new;
+//                                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+//   D(int x) : super.new(x * 2);
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+//   D.new(1);
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   const C.new(1);
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   new C.new(1);
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+//   var f1 = A.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+//   var f2 = B.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+//   var f3 = C.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+//   var f4 = D.new;
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+//   A Function() g1 = A.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+//   B Function() g2 = B.new;
+//                       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+//   C Function(int x) g3 = C.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+//   D Function(int x) g4 = D.new;
+//                            ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  constructor new() → self::A
+    : super core::Object::•()
+    ;
+  constructor redirecting() → self::A
+    : this self::A::new()
+    ;
+  static factory redirectingFactory() → self::A
+    let Never #redirecting_factory = self::A::new in invalid-expression;
+  static factory redirectingFactoryChild() → self::A
+    let core::String* #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : invalid-initializer
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor new(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •(core::int x) → self::D
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+  D(int x) : super.new(x * 2);
+             ^^^^^"
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+  D.new(1);
+    ^^^";
+  #C2;
+  new self::C::new(1);
+  dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+  var f1 = A.new;
+             ^^^";
+  dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+  var f2 = B.new;
+             ^^^";
+  dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+  var f3 = C.new;
+             ^^^";
+  dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+  var f4 = D.new;
+             ^^^";
+  f1{dynamic}.call();
+  f2{dynamic}.call();
+  f3{dynamic}.call(1);
+  f4{dynamic}.call(1);
+  () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+  A Function() g1 = A.new;
+                      ^^^";
+  () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+  B Function() g2 = B.new;
+                      ^^^";
+  (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+  C Function(int x) g3 = C.new;
+                           ^^^";
+  (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+  D Function(int x) g4 = D.new;
+                           ^^^";
+  g1(){() → self::A};
+  g2(){() → self::B};
+  g3(1){(core::int) → self::C};
+  g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
index 3144a2d..9b677e7 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
@@ -46,16 +46,6 @@
 // const fromDeferredLib = lib.x;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:44: Error: Constant evaluation error:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//                                            ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:51: Context: The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '"42"'.
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//                                                   ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:14: Context: While analyzing:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//              ^
-//
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
@@ -159,37 +149,37 @@
 static const field core::bool isMapOfMapOfInt1 = #C8;
 static const field core::bool isMapOfMapOfInt2 = #C8;
 static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
-static const field core::Symbol symbolWithInvalidName = invalid-expression "The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '\"42\"'.";
-static const field self::Class<self::B>? c0 = #C33;
+static const field core::Symbol symbolWithInvalidName = #C32;
+static const field self::Class<self::B>? c0 = #C34;
 static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^";
-static const field self::Subclass<self::B>? c2 = #C34;
-static const field self::Class<self::A>? c3 = #C35;
-static const field self::Class<self::B>? c4 = #C36;
-static const field self::Subclass<self::A>? c5 = #C37;
-static const field self::Subclass<self::B>? c6 = #C38;
-static const field core::Type f = #C39;
-static field self::ConstClassWithF constClassWithF1 = #C41;
-static const field self::ConstClassWithF constClassWithF2 = #C41;
-static const field core::bool unevaluatedBool = #C42;
-static const field core::bool notUnevaluatedBool = #C43;
-static const field core::bool? unevaluatedBoolOrNull = #C44;
-static const field core::bool unevaluatedBoolNotNull = #C45;
+static const field self::Subclass<self::B>? c2 = #C35;
+static const field self::Class<self::A>? c3 = #C36;
+static const field self::Class<self::B>? c4 = #C37;
+static const field self::Subclass<self::A>? c5 = #C38;
+static const field self::Subclass<self::B>? c6 = #C39;
+static const field core::Type f = #C40;
+static field self::ConstClassWithF constClassWithF1 = #C42;
+static const field self::ConstClassWithF constClassWithF2 = #C42;
+static const field core::bool unevaluatedBool = #C43;
+static const field core::bool notUnevaluatedBool = #C44;
+static const field core::bool? unevaluatedBoolOrNull = #C45;
+static const field core::bool unevaluatedBoolNotNull = #C46;
 static method procedure(core::int i, {core::int named = #C9}) → core::int
   return i;
 static method main() → dynamic {
-  core::print(#C33);
+  core::print(#C34);
   core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^");
-  core::print(#C34);
   core::print(#C35);
   core::print(#C36);
   core::print(#C37);
   core::print(#C38);
+  core::print(#C39);
   core::print(#C20);
   core::print((#C20).{self::Foo::saved}{core::bool});
   core::print((#C20).{self::Foo::value}{core::int});
@@ -233,20 +223,21 @@
   #C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
   #C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
   #C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
-  #C32 = "x"
-  #C33 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C34 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C35 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
-  #C36 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C37 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
-  #C38 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C39 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
-  #C40 = tearoff self::procedure
-  #C41 = self::ConstClassWithF {foo:#C40}
-  #C42 = eval const core::bool::fromEnvironment(#C1)
-  #C43 = eval !const core::bool::fromEnvironment(#C1)
-  #C44 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
-  #C45 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
+  #C32 = #42
+  #C33 = "x"
+  #C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+  #C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+  #C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
+  #C41 = tearoff self::procedure
+  #C42 = self::ConstClassWithF {foo:#C41}
+  #C43 = eval const core::bool::fromEnvironment(#C1)
+  #C44 = eval !const core::bool::fromEnvironment(#C1)
+  #C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
+  #C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
index 247eb18..f9aaa93 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
@@ -200,6 +200,7 @@
 Evaluated: IsExpression @ org-dartlang-testcase:///various.dart:73:46 -> BoolConstant(true)
 Evaluated with empty environment: ConstructorInvocation @ org-dartlang-testcase:///various.dart:76:11 -> SymbolConstant(#)
 Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:76:25 -> StringConstant("")
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:77:44 -> SymbolConstant(#42)
 Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:107:17 -> BoolConstant(false)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:107:71 -> InstanceConstant(const C{})
 Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:108:17 -> BoolConstant(false)
@@ -227,4 +228,4 @@
 Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:130:10 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:130:35 -> BoolConstant(false)
 Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:131:37 -> NullConstant(null)
-Extra constant evaluation: evaluated: 112, effectively constant: 68
+Extra constant evaluation: evaluated: 112, effectively constant: 69
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
index bb6d767..b2b5426 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
@@ -46,16 +46,6 @@
 // const fromDeferredLib = lib.x;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:44: Error: Constant evaluation error:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//                                            ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:51: Context: The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '"42"'.
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//                                                   ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:14: Context: While analyzing:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-//              ^
-//
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
@@ -159,40 +149,40 @@
 static const field core::bool isMapOfMapOfInt1 = #C8;
 static const field core::bool isMapOfMapOfInt2 = #C8;
 static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
-static const field core::Symbol symbolWithInvalidName = invalid-expression "The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '\"42\"'.";
-static const field self::Class<self::B>? c0 = #C33;
+static const field core::Symbol symbolWithInvalidName = #C32;
+static const field self::Class<self::B>? c0 = #C34;
 static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^";
-static const field self::Subclass<self::B>? c2 = #C34;
-static const field self::Class<self::A>? c3 = #C35;
-static const field self::Class<self::B>? c4 = #C36;
-static const field self::Subclass<self::A>? c5 = #C37;
-static const field self::Subclass<self::B>? c6 = #C38;
-static const field core::Type f = #C39;
-static field self::ConstClassWithF constClassWithF1 = #C41;
-static const field self::ConstClassWithF constClassWithF2 = #C41;
-static const field core::bool unevaluatedBool = #C42;
-static const field core::bool notUnevaluatedBool = #C43;
-static const field core::bool? unevaluatedBoolOrNull = #C44;
-static const field core::bool unevaluatedBoolNotNull = #C45;
+static const field self::Subclass<self::B>? c2 = #C35;
+static const field self::Class<self::A>? c3 = #C36;
+static const field self::Class<self::B>? c4 = #C37;
+static const field self::Subclass<self::A>? c5 = #C38;
+static const field self::Subclass<self::B>? c6 = #C39;
+static const field core::Type f = #C40;
+static field self::ConstClassWithF constClassWithF1 = #C42;
+static const field self::ConstClassWithF constClassWithF2 = #C42;
+static const field core::bool unevaluatedBool = #C43;
+static const field core::bool notUnevaluatedBool = #C44;
+static const field core::bool? unevaluatedBoolOrNull = #C45;
+static const field core::bool unevaluatedBoolNotNull = #C46;
 static method procedure(core::int i, {core::int named = #C9}) → core::int
   return i;
 static method main() → dynamic {
-  core::print(#C46);
+  core::print(#C47);
   core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
   const Class.method(T t) : this(-t);
                                  ^");
-  core::print(#C47);
   core::print(#C48);
   core::print(#C49);
   core::print(#C50);
   core::print(#C51);
   core::print(#C52);
-  core::print((#C52).{self::Foo::saved}{core::bool});
-  core::print((#C52).{self::Foo::value}{core::int});
+  core::print(#C53);
+  core::print((#C53).{self::Foo::saved}{core::bool});
+  core::print((#C53).{self::Foo::value}{core::int});
 }
 
 library /*isNonNullableByDefault*/;
@@ -233,27 +223,28 @@
   #C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
   #C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
   #C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
-  #C32 = "x"
-  #C33 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C34 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C35 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
-  #C36 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C37 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
-  #C38 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C39 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
-  #C40 = tearoff self::procedure
-  #C41 = self::ConstClassWithF {foo:#C40}
-  #C42 = eval const core::bool::fromEnvironment(#C1)
-  #C43 = eval !const core::bool::fromEnvironment(#C1)
-  #C44 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
-  #C45 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
-  #C46 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C47 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
-  #C48 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
-  #C49 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C50 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
-  #C51 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
-  #C52 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
+  #C32 = #42
+  #C33 = "x"
+  #C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+  #C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+  #C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
+  #C41 = tearoff self::procedure
+  #C42 = self::ConstClassWithF {foo:#C41}
+  #C43 = eval const core::bool::fromEnvironment(#C1)
+  #C44 = eval !const core::bool::fromEnvironment(#C1)
+  #C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
+  #C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
+  #C47 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C48 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C49 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+  #C50 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C51 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+  #C52 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C53 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
index 40fc5da..be9d427 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
@@ -2,20 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected an identifier, but got 'final'.
-// Try inserting an identifier before 'final'.
+// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
 //   #final;
 //    ^^^^^
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected ';' after this.
-//   #final;
-//    ^^^^^
-//
-// pkg/front_end/testcases/general/issue42610.dart:6:9: Error: Expected an identifier, but got ';'.
-// Try inserting an identifier before ';'.
-//   #final;
-//         ^
-//
 // pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final x;
@@ -37,6 +28,29 @@
 //             ^
 //
 import self as self;
+import "dart:core" as core;
 
-static method test() → void {}
+static method test() → void {
+  #C1;
+  final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final x;
+        ^";
+  const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final int z;
+            ^" as{TypeError,ForDynamic} core::int*;
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
 static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
index 40fc5da..78cba42 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
@@ -2,20 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected an identifier, but got 'final'.
-// Try inserting an identifier before 'final'.
+// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
 //   #final;
 //    ^^^^^
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected ';' after this.
-//   #final;
-//    ^^^^^
-//
-// pkg/front_end/testcases/general/issue42610.dart:6:9: Error: Expected an identifier, but got ';'.
-// Try inserting an identifier before ';'.
-//   #final;
-//         ^
-//
 // pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final x;
@@ -37,6 +28,29 @@
 //             ^
 //
 import self as self;
+import "dart:core" as core;
 
-static method test() → void {}
+static method test() → void {
+  #C1;
+  final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final x;
+        ^";
+  const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final int z;
+            ^";
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
 static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index f3bdfc8..cfb0715 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -8,6 +8,7 @@
 
 dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
 
+constructor_tearoffs/redirecting_constructors: RuntimeError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 6d4e214..24201ec 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -6,6 +6,7 @@
 # the round trip for Kernel textual serialization where the initial binary
 # Kernel files are produced by compiling Dart code via Fasta.
 
+constructor_tearoffs/redirecting_constructors: RuntimeError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 31ef5f3..5dd912a 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -28,6 +28,8 @@
 constructor_tearoffs/instantiation: FormatterCrash
 constructor_tearoffs/nongeneric_tearoff_with_context: FormatterCrash
 constructor_tearoffs/nongeneric_tearoff_without_context: FormatterCrash
+constructor_tearoffs/redirecting_constructors: FormatterCrash
+constructor_tearoffs/unnamed_constructor: FormatterCrash
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
 extensions/extension_constructor: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 751db7e..3c2c427 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -11,6 +11,7 @@
 regress/utf_16_le_content.crash: SemiFuzzCrash
 dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
 
+constructor_tearoffs/redirecting_constructors: RuntimeError
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
 extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index e1a99a8..f66182a 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1216,8 +1216,7 @@
       for (Member mixinMember in _buildDeclaredMembers(
           mixedInClassNode, mixedInInfo,
           setters: setters)) {
-        if (mixinMember is! Procedure ||
-            (mixinMember is Procedure && !mixinMember.isSynthetic)) {
+        if (mixinMember is! Procedure || !mixinMember.isSynthetic) {
           memberMap[mixinMember.name] = mixinMember;
         }
       }
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 3ae06c1..c98e62c 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -220,8 +220,6 @@
 
   final Set<PromotableElement> _lateHintedLocals = {};
 
-  final Set<PromotableElement> _requiredHintedParameters = {};
-
   final Map<Token, HintComment> _nullCheckHints = {};
 
   /// Helper that assists us in transforming Iterable methods to their "OrNull"
@@ -801,22 +799,31 @@
   DecoratedType visitDefaultFormalParameter(DefaultFormalParameter node) {
     _dispatch(node.parameter);
     var defaultValue = node.defaultValue;
+    var declaredElement = node.declaredElement;
     if (defaultValue == null) {
-      if (node.declaredElement.hasRequired) {
+      if (declaredElement.hasRequired) {
         // Nothing to do; the implicit default value of `null` will never be
         // reached.
       } else if (_variables.getRequiredHint(source, node) != null) {
         // Nothing to do; assume the implicit default value of `null` will never
         // be reached.
-        _requiredHintedParameters.add(node.declaredElement);
       } else {
-        _graph.makeNullable(
-            getOrComputeElementType(node, node.declaredElement).node,
-            OptionalFormalParameterOrigin(source, node));
+        var enclosingElement = declaredElement.enclosingElement;
+        if (enclosingElement is ConstructorElement &&
+            enclosingElement.isFactory &&
+            enclosingElement.redirectedConstructor != null) {
+          // Redirecting factory constructors inherit their parameters' default
+          // values from the constructors they redirect to, so the lack of a
+          // default value doesn't mean the parameter has to be nullable.
+        } else {
+          _graph.makeNullable(
+              getOrComputeElementType(node, declaredElement).node,
+              OptionalFormalParameterOrigin(source, node));
+        }
       }
     } else {
       _handleAssignment(defaultValue,
-          destinationType: getOrComputeElementType(node, node.declaredElement),
+          destinationType: getOrComputeElementType(node, declaredElement),
           fromDefaultValue: true);
     }
     return null;
@@ -1647,7 +1654,6 @@
       if (!node.inDeclarationContext() &&
           node.inGetterContext() &&
           !_lateHintedLocals.contains(staticElement) &&
-          !_requiredHintedParameters.contains(staticElement) &&
           !_flowAnalysis.isAssigned(staticElement)) {
         _graph.makeNullable(type.node, UninitializedReadOrigin(source, node));
       }
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index bc70677..633732f 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -185,8 +185,9 @@
   EditPlanner(this.lineInfo, this.sourceText, {this.removeViaComments = false});
 
   /// Creates a new edit plan that consists of executing [innerPlan], and then
-  /// converting the late [hint] into an explicit `late`.
-  NodeProducingEditPlan acceptLateHint(
+  /// converting the [hint] (which precedes the node) into text that is not
+  /// commented out.
+  NodeProducingEditPlan acceptPrefixHint(
       NodeProducingEditPlan innerPlan, HintComment hint,
       {AtomicEditInfo info}) {
     var affixPlan = innerPlan is _CommentAffixPlan
@@ -200,8 +201,9 @@
   }
 
   /// Creates a new edit plan that consists of executing [innerPlan], and then
-  /// converting the nullability [hint] into an explicit `?` or `!`.
-  NodeProducingEditPlan acceptNullabilityOrNullCheckHint(
+  /// converting the [hint] (which follows the node) into text that is not
+  /// commented out.
+  NodeProducingEditPlan acceptSuffixHint(
       NodeProducingEditPlan innerPlan, HintComment hint,
       {AtomicEditInfo info}) {
     var affixPlan = innerPlan is _CommentAffixPlan
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 60e779d..2df2b83 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -746,6 +746,10 @@
   /// contained in the edit.
   AtomicEditInfo addRequiredKeywordInfo;
 
+  /// If [addRequiredKeyword] is `true`, and there is a `/*required*/` hint,
+  /// the hint comment that should be converted into a simple `required` string.
+  HintComment requiredHint;
+
   /// If non-null, indicates a `@required` annotation which should be removed
   /// from this node.
   Annotation annotationToRemove;
@@ -762,8 +766,13 @@
 
   @override
   EditPlan _apply(DefaultFormalParameter node, FixAggregator aggregator) {
-    var innerPlan = aggregator.innerPlanForNode(node);
-    if (!addRequiredKeyword) return innerPlan;
+    if (!addRequiredKeyword) return aggregator.innerPlanForNode(node);
+
+    if (requiredHint != null) {
+      var innerPlan = aggregator.innerPlanForNode(node);
+      return aggregator.planner.acceptPrefixHint(innerPlan, requiredHint,
+          info: addRequiredKeywordInfo);
+    }
 
     var offset = node.firstTokenAfterCommentAndMetadata.offset;
     return aggregator.planner.passThrough(node, innerPlans: [
@@ -1205,8 +1214,7 @@
     if (_makeNullable) {
       var hint = _nullabilityHint;
       if (hint != null) {
-        return aggregator.planner.acceptNullabilityOrNullCheckHint(
-            innerPlan, hint,
+        return aggregator.planner.acceptSuffixHint(innerPlan, hint,
             info: AtomicEditInfo(
                 NullabilityFixDescription.makeTypeNullableDueToHint(typeName),
                 fixReasons,
@@ -1302,7 +1310,7 @@
       var description = lateHint.kind == HintCommentKind.late_
           ? NullabilityFixDescription.addLateDueToHint
           : NullabilityFixDescription.addLateFinalDueToHint;
-      plan = aggregator.planner.acceptLateHint(plan, lateHint,
+      plan = aggregator.planner.acceptPrefixHint(plan, lateHint,
           info: AtomicEditInfo(description, {}, hintComment: lateHint));
     }
     return plan;
@@ -1348,8 +1356,7 @@
   NodeProducingEditPlan applyExpression(FixAggregator aggregator,
       NodeProducingEditPlan innerPlan, AtomicEditInfo info) {
     if (hint != null) {
-      return aggregator.planner
-          .acceptNullabilityOrNullCheckHint(innerPlan, hint, info: info);
+      return aggregator.planner.acceptSuffixHint(innerPlan, hint, info: info);
     } else {
       return aggregator.planner
           .addUnaryPostfix(innerPlan, TokenType.BANG, info: info);
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index add21a0..6a7731b 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -426,7 +426,7 @@
       node,
       () => node.elements,
       () => _collectionElements[node] ??=
-          _transformCollectionElements(node.elements, node.typeArguments));
+          _transformCollectionElements(node.elements));
 
   @override
   List<CollectionElement> getSetOrMapElements(SetOrMapLiteral node) =>
@@ -434,7 +434,7 @@
           node,
           () => node.elements,
           () => _collectionElements[node] ??=
-              _transformCollectionElements(node.elements, node.typeArguments));
+              _transformCollectionElements(node.elements));
 
   @override
   DartType getTypeParameterBound(TypeParameterElementImpl element) {
@@ -808,7 +808,7 @@
   }
 
   List<CollectionElement> _transformCollectionElements(
-      NodeList<CollectionElement> elements, TypeArgumentList typeArguments) {
+      NodeList<CollectionElement> elements) {
     return elements
         .map(_transformCollectionElement)
         .where((e) => e != null)
@@ -1113,17 +1113,27 @@
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
     var element = node.declaredElement;
     if (node.defaultValue == null) {
+      var requiredHint =
+          _fixBuilder._variables.getRequiredHint(_fixBuilder.source, node);
       var nullabilityNode =
           _fixBuilder._variables.decoratedElementType(element).node;
       if (!nullabilityNode.isNullable) {
-        if (element.isNamed) {
-          _addRequiredKeyword(node, nullabilityNode);
+        var enclosingElement = element.enclosingElement;
+        if (enclosingElement is ConstructorElement &&
+            enclosingElement.isFactory &&
+            enclosingElement.redirectedConstructor != null) {
+          // Redirecting factory constructors inherit their parameters' default
+          // values from the constructors they redirect to, so the lack of a
+          // default value doesn't mean the parameter has to be nullable.
+        } else if (element.isNamed) {
+          _addRequiredKeyword(node, nullabilityNode, requiredHint);
         } else {
           _fixBuilder._addProblem(
               node, const NonNullableUnnamedOptionalParameter());
         }
-      } else if (element.metadata.any((m) => m.isRequired)) {
-        _addRequiredKeyword(node, nullabilityNode);
+      } else if (requiredHint != null ||
+          element.metadata.any((m) => m.isRequired)) {
+        _addRequiredKeyword(node, nullabilityNode, requiredHint);
       }
     }
     super.visitDefaultFormalParameter(node);
@@ -1199,8 +1209,8 @@
     super.visitTypeName(node);
   }
 
-  void _addRequiredKeyword(
-      DefaultFormalParameter parameter, NullabilityNode node) {
+  void _addRequiredKeyword(DefaultFormalParameter parameter,
+      NullabilityNode node, HintComment requiredHint) {
     // Change an existing `@required` annotation into a `required` keyword if
     // possible.
     final element = parameter.declaredElement;
@@ -1226,7 +1236,8 @@
     var nodeChange = (_fixBuilder._getChange(parameter)
         as NodeChangeForDefaultFormalParameter)
       ..addRequiredKeyword = true
-      ..addRequiredKeywordInfo = info;
+      ..addRequiredKeywordInfo = info
+      ..requiredHint = requiredHint;
     var requiredAnnotation = metadata?.firstWhere(
         (annotation) => annotation.elementAnnotation.isRequired,
         orElse: () => null);
diff --git a/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart b/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
index 07398ba..6099a8f 100644
--- a/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
@@ -20,20 +20,12 @@
   /// The node used for type sources that are never `null`.
   NullabilityNodeInfo never;
 
-  /// A map associating [NodeInformation] with [NullabilityNodeInfo] objects.
-  Map<NullabilityNodeInfo, NodeInformation> nodeInformation = {};
-
   /// The instrumentation information that is specific to a single source.
   final Map<Source, SourceInformation> sourceInformation = {};
 
   /// Initialize a newly created holder of instrumentation information.
   InstrumentationInformation();
 
-  /// Return information about the given [node].
-  NodeInformation nodeInfoFor(NullabilityNodeInfo node) {
-    return nodeInformation[node];
-  }
-
   /// Return the type annotation associated with the [node] or `null` if the
   /// node represents an implicit type.
   TypeAnnotation typeAnnotationForNode(NullabilityNodeInfo node) {
diff --git a/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart b/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
index c72f61c..c6927da 100644
--- a/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
@@ -32,21 +31,20 @@
   @override
   void explicitTypeNullability(
       Source source, TypeAnnotation typeAnnotation, NullabilityNodeInfo node) {
-    data.nodeInformation[node] =
-        NodeInformation(_filePathForSource(source), typeAnnotation, null);
     _sourceInfo(source).explicitTypeNullability[typeAnnotation] = node;
   }
 
   @override
-  void externalDecoratedType(Element element, DecoratedTypeInfo decoratedType) {
-    _storeNodeInformation(decoratedType, element.source, null, element);
-  }
+  void externalDecoratedType(
+      Element element, DecoratedTypeInfo decoratedType) {}
 
   @override
   void externalDecoratedTypeParameterBound(
-      TypeParameterElement typeParameter, DecoratedTypeInfo decoratedType) {
-    _storeNodeInformation(
-        decoratedType, typeParameter.source, null, typeParameter);
+      TypeParameterElement typeParameter, DecoratedTypeInfo decoratedType) {}
+
+  @override
+  void finished() {
+    migrationSummary?.write();
   }
 
   @override
@@ -62,23 +60,15 @@
 
   @override
   void implicitReturnType(
-      Source source, AstNode node, DecoratedTypeInfo decoratedReturnType) {
-    _storeNodeInformation(decoratedReturnType, source, node, null);
-  }
+      Source source, AstNode node, DecoratedTypeInfo decoratedReturnType) {}
 
   @override
   void implicitType(
-      Source source, AstNode node, DecoratedTypeInfo decoratedType) {
-    _storeNodeInformation(decoratedType, source, node, null);
-  }
+      Source source, AstNode node, DecoratedTypeInfo decoratedType) {}
 
   @override
   void implicitTypeArguments(
-      Source source, AstNode node, Iterable<DecoratedTypeInfo> types) {
-    for (var type in types) {
-      _storeNodeInformation(type, source, node, null);
-    }
-  }
+      Source source, AstNode node, Iterable<DecoratedTypeInfo> types) {}
 
   @override
   void prepareForUpdate() {
@@ -87,52 +77,8 @@
     }
   }
 
-  String _filePathForSource(Source source) {
-    return source.fullName;
-  }
-
   /// Return the source information associated with the given [source], creating
   /// it if there has been no previous information for that source.
   SourceInformation _sourceInfo(Source source) =>
       data.sourceInformation.putIfAbsent(source, () => SourceInformation());
-
-  // TODO(srawlins): This code is completely untested.
-  void _storeNodeInformation(DecoratedTypeInfo decoratedType, Source source,
-      AstNode astNode, Element element) {
-    // Make sure source info exists for the given source.
-    _sourceInfo(source);
-    data.nodeInformation[decoratedType.node] =
-        NodeInformation(_filePathForSource(source), astNode, element);
-    var dartType = decoratedType.type;
-    if (dartType is InterfaceType) {
-      for (var i = 0; i < dartType.typeArguments.length; i++) {
-        _storeNodeInformation(
-            decoratedType.typeArgument(i), source, astNode, element);
-      }
-    } else if (dartType is FunctionType) {
-      _storeNodeInformation(
-        decoratedType.returnType,
-        source,
-        astNode,
-        element,
-      );
-      var i = 0;
-      for (var parameter in dartType.parameters) {
-        if (parameter.isNamed) {
-          var name = parameter.name;
-          _storeNodeInformation(
-              decoratedType.namedParameter(name), source, astNode, element);
-        } else {
-          _storeNodeInformation(
-              decoratedType.positionalParameter(i), source, astNode, element);
-          i++;
-        }
-      }
-    }
-  }
-
-  @override
-  void finished() {
-    migrationSummary?.write();
-  }
 }
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 19248f9..cd978d6 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -124,6 +124,32 @@
 
 /// Mixin containing test cases for the provisional API.
 mixin _ProvisionalApiTestCases on _ProvisionalApiTestBase {
+  Future<void> test_accept_required_hint() async {
+    var content = '''
+f({/*required*/ int i}) {}
+''';
+    var expected = '''
+f({required int i}) {}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_accept_required_hint_nullable() async {
+    var content = '''
+f({/*required*/ int i}) {}
+g() {
+  f(i: null);
+}
+''';
+    var expected = '''
+f({required int? i}) {}
+g() {
+  f(i: null);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_add_explicit_parameter_type() async {
     var content = '''
 abstract class C {
@@ -1070,6 +1096,86 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_constructor_optional_param_factory() async {
+    var content = '''
+class C {
+  factory C([int x]) => C._();
+  C._([int x = 0]);
+}
+''';
+    var expected = '''
+class C {
+  factory C([int? x]) => C._();
+  C._([int x = 0]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void>
+      test_constructor_optional_param_factory_redirecting_named() async {
+    var content = '''
+class C {
+  factory C({int x}) = C._;
+  C._({int x = 0});
+}
+''';
+    var expected = '''
+class C {
+  factory C({int x}) = C._;
+  C._({int x = 0});
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void>
+      test_constructor_optional_param_factory_redirecting_unnamed() async {
+    var content = '''
+class C {
+  factory C([int x]) = C._;
+  C._([int x = 0]);
+}
+''';
+    var expected = '''
+class C {
+  factory C([int x]) = C._;
+  C._([int x = 0]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_constructor_optional_param_normal() async {
+    var content = '''
+class C {
+  C([int x]);
+}
+''';
+    var expected = '''
+class C {
+  C([int? x]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_constructor_optional_param_redirecting() async {
+    var content = '''
+class C {
+  C([int x]) : this._();
+  C._([int x = 0]);
+}
+''';
+    var expected = '''
+class C {
+  C([int? x]) : this._();
+  C._([int x = 0]);
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_constructorDeclaration_factory_non_null_return() async {
     var content = '''
 class C {
diff --git a/pkg/nnbd_migration/test/edit_plan_test.dart b/pkg/nnbd_migration/test/edit_plan_test.dart
index 078318e..d7881a2 100644
--- a/pkg/nnbd_migration/test/edit_plan_test.dart
+++ b/pkg/nnbd_migration/test/edit_plan_test.dart
@@ -64,7 +64,7 @@
     await analyze(code);
     var hint = getPrefixHint(findNode.simple('int').token);
     var changes = checkPlan(
-        planner.acceptLateHint(
+        planner.acceptPrefixHint(
             planner.passThrough(findNode.simple('int')), hint),
         'late int x = 0;');
     expect(changes.keys, unorderedEquals([0, 7]));
@@ -77,7 +77,7 @@
     await analyze(code);
     var hint = getPrefixHint(findNode.simple('int').token);
     checkPlan(
-        planner.acceptLateHint(
+        planner.acceptPrefixHint(
             planner.passThrough(findNode.simple('int')), hint),
         'late int x = 0;');
   }
@@ -87,7 +87,7 @@
     await analyze(code);
     var hint = getPrefixHint(findNode.simple('int').token);
     checkPlan(
-        planner.acceptLateHint(
+        planner.acceptPrefixHint(
             planner.passThrough(findNode.simple('int')), hint),
         '@deprecated late int x = 0;');
   }
@@ -103,7 +103,7 @@
     var parameter = findNode.fieldFormalParameter('void this.f(int i)');
     var typeName = planner.passThrough(parameter);
     checkPlan(
-        planner.acceptNullabilityOrNullCheckHint(
+        planner.acceptSuffixHint(
             typeName, getPostfixHint(parameter.parameters.rightParenthesis)),
         '''
 class C {
@@ -118,7 +118,7 @@
     var parameter = findNode.functionTypedFormalParameter('void g(int i)');
     var typeName = planner.passThrough(parameter);
     checkPlan(
-        planner.acceptNullabilityOrNullCheckHint(
+        planner.acceptSuffixHint(
             typeName, getPostfixHint(parameter.parameters.rightParenthesis)),
         'f(void g(int i)?) {}');
   }
@@ -128,9 +128,7 @@
     await analyze(code);
     var intRef = findNode.simple('int');
     var typeName = planner.passThrough(intRef);
-    checkPlan(
-        planner.acceptNullabilityOrNullCheckHint(
-            typeName, getPostfixHint(intRef.token)),
+    checkPlan(planner.acceptSuffixHint(typeName, getPostfixHint(intRef.token)),
         'int? x = 0;');
   }
 
@@ -141,7 +139,7 @@
     checkPlan(
         planner.extract(
             xRef.parent.parent,
-            planner.acceptNullabilityOrNullCheckHint(
+            planner.acceptSuffixHint(
                 planner.passThrough(xRef), getPostfixHint(xRef.token))),
         'f(x) => x!;');
   }
diff --git a/pkg/test_runner/lib/src/command_output.dart b/pkg/test_runner/lib/src/command_output.dart
index ae762aa..579b10e 100644
--- a/pkg/test_runner/lib/src/command_output.dart
+++ b/pkg/test_runner/lib/src/command_output.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:convert';
+
 // We need to use the 'io' prefix here, otherwise io.exitCode will shadow
 // CommandOutput.exitCode in subclasses of CommandOutput.
 import 'dart:io' as io;
@@ -459,11 +460,11 @@
 
 /// A parsed analyzer error diagnostic.
 class AnalyzerError implements Comparable<AnalyzerError> {
-  /// Parses all errors from analyzer [stderr] output.
-  static List<AnalyzerError> parseStderr(String stderr) {
+  /// Parses all errors from analyzer [stdout] output.
+  static List<AnalyzerError> parseStdout(String stdout) {
     var result = <AnalyzerError>[];
 
-    var jsonData = json.decode(stderr) as Map<String, dynamic>;
+    var jsonData = json.decode(stdout) as Map<String, dynamic>;
     var version = jsonData['version'];
     if (version != 1) {
       DebugLogger.error('Unexpected analyzer JSON data version: $version');
@@ -543,8 +544,11 @@
 }
 
 class AnalysisCommandOutput extends CommandOutput with _StaticErrorOutput {
-  static void parseErrors(String stderr, List<StaticError> errors,
-      [List<StaticError> warnings]) {
+  static void parseErrors(
+    String stdout,
+    List<StaticError> errors, [
+    List<StaticError> warnings,
+  ]) {
     StaticError convert(AnalyzerError error) {
       var staticError = StaticError(ErrorSource.analyzer, error.errorCode,
           line: error.line, column: error.column, length: error.length);
@@ -570,7 +574,7 @@
 
     // Parse as Analyzer errors and then convert them to the StaticError objects
     // the static error tests expect.
-    for (var diagnostic in AnalyzerError.parseStderr(stderr)) {
+    for (var diagnostic in AnalyzerError.parseStdout(stdout)) {
       if (diagnostic.severity == 'ERROR') {
         errors.add(convert(diagnostic));
       } else if (diagnostic.severity == 'WARNING' && warnings != null) {
@@ -579,18 +583,18 @@
     }
   }
 
-  /// If the stderr of analyzer could not be parsed as valid JSON, this will
-  /// be the stderr as a string instead. Otherwise it will be null.
-  String get invalidJsonStderr {
+  /// If the stdout of analyzer could not be parsed as valid JSON, this will be
+  /// the stdout as a string instead. Otherwise it will be null.
+  String get invalidJsonStdout {
     if (!_parsedErrors) {
       _parseErrors();
       _parsedErrors = true;
     }
 
-    return _invalidJsonStderr;
+    return _invalidJsonStdout;
   }
 
-  String _invalidJsonStderr;
+  String _invalidJsonStdout;
 
   AnalysisCommandOutput(
       Command command,
@@ -614,7 +618,7 @@
     if (hasNonUtf8) return Expectation.nonUtf8Error;
     if (truncatedOutput) return Expectation.truncatedOutput;
 
-    if (invalidJsonStderr != null) return Expectation.fail;
+    if (invalidJsonStdout != null) return Expectation.fail;
 
     // If it's a static error test, validate the exact errors.
     if (testCase.testFile.isStaticErrorTest) {
@@ -661,7 +665,7 @@
     if (hasNonUtf8) return Expectation.nonUtf8Error;
     if (truncatedOutput) return Expectation.truncatedOutput;
 
-    if (invalidJsonStderr != null) return Expectation.fail;
+    if (invalidJsonStdout != null) return Expectation.fail;
 
     // If it's a static error test, validate the exact errors.
     if (testCase.testFile.isStaticErrorTest) {
@@ -679,9 +683,9 @@
 
   @override
   void describe(TestCase testCase, Progress progress, OutputWriter output) {
-    if (invalidJsonStderr != null) {
-      output.subsection("invalid JSON on analyzer stderr");
-      output.write(invalidJsonStderr);
+    if (invalidJsonStdout != null) {
+      output.subsection("invalid analyzer json");
+      output.write(invalidJsonStdout);
       return;
     }
 
@@ -692,7 +696,7 @@
     } else {
       // Parse and sort the errors.
       var errorsByFile = <String, List<AnalyzerError>>{};
-      for (var error in AnalyzerError.parseStderr(decodeUtf8(stderr))) {
+      for (var error in AnalyzerError.parseStdout(decodeUtf8(stdout))) {
         errorsByFile.putIfAbsent(error.file, () => []).add(error);
       }
 
@@ -720,20 +724,20 @@
     }
   }
 
-  /// Parses the JSON output of analyzer.
+  /// Parses the JSON output of the analyzer.
   @override
   void _parseErrors() {
-    var stderrString = decodeUtf8(stderr);
+    var stdoutString = decodeUtf8(stdout);
     try {
       var errors = <StaticError>[];
       var warnings = <StaticError>[];
-      parseErrors(stderrString, errors, warnings);
+      parseErrors(stdoutString, errors, warnings);
       errors.forEach(addError);
       warnings.forEach(addWarning);
     } on FormatException {
       // It wasn't JSON. This can happen if analyzer instead prints:
       // "No dart files found at: ..."
-      _invalidJsonStderr = stderrString;
+      _invalidJsonStdout = stdoutString;
     }
   }
 }
@@ -1293,6 +1297,7 @@
   }
 
   Expectation result(TestCase testCase) => _result;
+
   Expectation realResult(TestCase testCase) => _result;
 
   bool get canRunDependendCommands => _result == Expectation.pass;
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index 9758107..053dcbd 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -244,7 +244,7 @@
 
   var errors = <StaticError>[];
   var warnings = <StaticError>[];
-  AnalysisCommandOutput.parseErrors(result.stderr as String, errors, warnings);
+  AnalysisCommandOutput.parseErrors(result.stdout as String, errors, warnings);
   return [...errors, ...warnings];
 }
 
diff --git a/pkg/vm/lib/http_filesystem.dart b/pkg/vm/lib/http_filesystem.dart
index 6d249e3..cd8e42a 100644
--- a/pkg/vm/lib/http_filesystem.dart
+++ b/pkg/vm/lib/http_filesystem.dart
@@ -29,6 +29,7 @@
     return connectAndRun((io.HttpClient httpClient) async {
       io.HttpClientRequest request = await httpClient.headUrl(uri);
       io.HttpClientResponse response = await request.close();
+      await response.drain();
       return response.statusCode == io.HttpStatus.ok;
     });
   }
@@ -42,6 +43,7 @@
       io.HttpClientRequest request = await httpClient.getUrl(uri);
       io.HttpClientResponse response = await request.close();
       if (response.statusCode != io.HttpStatus.ok) {
+        await response.drain();
         throw new FileSystemException(uri, response.toString());
       }
       List<List<int>> list = await response.toList();
@@ -57,13 +59,13 @@
     return String.fromCharCodes(await readAsBytes());
   }
 
-  T connectAndRun<T>(T body(io.HttpClient httpClient)) {
+  Future<T> connectAndRun<T>(Future<T> body(io.HttpClient httpClient)) async {
     io.HttpClient httpClient;
     try {
       httpClient = new io.HttpClient();
       // Set timeout to be shorter than anticipated OS default
       httpClient.connectionTimeout = const Duration(seconds: 5);
-      return body(httpClient);
+      return await body(httpClient);
     } on Exception catch (e) {
       throw new FileSystemException(uri, e.toString());
     } finally {
diff --git a/pkg/vm_service/example/sample_isolates.dart b/pkg/vm_service/example/sample_isolates.dart
index e57fd09..98eb667 100644
--- a/pkg/vm_service/example/sample_isolates.dart
+++ b/pkg/vm_service/example/sample_isolates.dart
@@ -4,7 +4,7 @@
 
 import 'dart:isolate';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   var arr = newArray(5);
   var arr2 = newArray(417);
   var hash1 = newHash(5);
@@ -30,7 +30,7 @@
   Isolate.spawn(isolateEntry, val);
 }
 
-isolateEntry(message) async {
+Future isolateEntry(message) async {
   print('starting $message');
   await Future.delayed(Duration(seconds: message));
   print('ending $message');
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java b/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
index 207cdc5..cf058e0 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
@@ -572,6 +572,10 @@
     }
   }
 
+  protected String removeNewLines(String str) {
+    return str.replaceAll("\r\n", " ").replaceAll("\n", " ");
+  }
+
   void processResponse(JsonObject json) {
     JsonElement idElem = json.get(ID);
     if (idElem == null) {
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 209f06e..983d0f7 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -2899,7 +2899,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Breakpoint && id == other.id;
+  bool operator ==(Object other) => other is Breakpoint && id == other.id;
 
   String toString() => '[Breakpoint ' //
       'id: ${id}, breakpointNumber: ${breakpointNumber}, enabled: ${enabled}, ' //
@@ -2955,7 +2955,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is ClassRef && id == other.id;
+  bool operator ==(Object other) => other is ClassRef && id == other.id;
 
   String toString() =>
       '[ClassRef id: ${id}, name: ${name}, library: ${library}]';
@@ -3098,7 +3098,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Class && id == other.id;
+  bool operator ==(Object other) => other is Class && id == other.id;
 
   String toString() => '[Class]';
 }
@@ -3235,7 +3235,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is CodeRef && id == other.id;
+  bool operator ==(Object other) => other is CodeRef && id == other.id;
 
   String toString() => '[CodeRef id: ${id}, name: ${name}, kind: ${kind}]';
 }
@@ -3280,7 +3280,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Code && id == other.id;
+  bool operator ==(Object other) => other is Code && id == other.id;
 
   String toString() => '[Code id: ${id}, name: ${name}, kind: ${kind}]';
 }
@@ -3318,7 +3318,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is ContextRef && id == other.id;
+  bool operator ==(Object other) => other is ContextRef && id == other.id;
 
   String toString() => '[ContextRef id: ${id}, length: ${length}]';
 }
@@ -3375,7 +3375,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Context && id == other.id;
+  bool operator ==(Object other) => other is Context && id == other.id;
 
   String toString() =>
       '[Context id: ${id}, length: ${length}, variables: ${variables}]';
@@ -3631,7 +3631,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is ErrorRef && id == other.id;
+  bool operator ==(Object other) => other is ErrorRef && id == other.id;
 
   String toString() =>
       '[ErrorRef id: ${id}, kind: ${kind}, message: ${message}]';
@@ -3696,7 +3696,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Error && id == other.id;
+  bool operator ==(Object other) => other is Error && id == other.id;
 
   String toString() => '[Error id: ${id}, kind: ${kind}, message: ${message}]';
 }
@@ -4082,7 +4082,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is FieldRef && id == other.id;
+  bool operator ==(Object other) => other is FieldRef && id == other.id;
 
   String toString() => '[FieldRef ' //
       'id: ${id}, name: ${name}, owner: ${owner}, declaredType: ${declaredType}, ' //
@@ -4177,7 +4177,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Field && id == other.id;
+  bool operator ==(Object other) => other is Field && id == other.id;
 
   String toString() => '[Field ' //
       'id: ${id}, name: ${name}, owner: ${owner}, declaredType: ${declaredType}, ' //
@@ -4396,7 +4396,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is FuncRef && id == other.id;
+  bool operator ==(Object other) => other is FuncRef && id == other.id;
 
   String toString() => '[FuncRef ' //
       'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
@@ -4473,7 +4473,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Func && id == other.id;
+  bool operator ==(Object other) => other is Func && id == other.id;
 
   String toString() => '[Func ' //
       'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
@@ -4686,7 +4686,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is InstanceRef && id == other.id;
+  bool operator ==(Object other) => other is InstanceRef && id == other.id;
 
   String toString() => '[InstanceRef ' //
       'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -5120,7 +5120,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Instance && id == other.id;
+  bool operator ==(Object other) => other is Instance && id == other.id;
 
   String toString() => '[Instance ' //
       'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -5177,7 +5177,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is IsolateRef && id == other.id;
+  bool operator ==(Object other) => other is IsolateRef && id == other.id;
 
   String toString() => '[IsolateRef ' //
       'id: ${id}, number: ${number}, name: ${name}, isSystemIsolate: ${isSystemIsolate}]';
@@ -5329,7 +5329,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Isolate && id == other.id;
+  bool operator ==(Object other) => other is Isolate && id == other.id;
 
   String toString() => '[Isolate]';
 }
@@ -5419,7 +5419,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is IsolateGroupRef && id == other.id;
+  bool operator ==(Object other) => other is IsolateGroupRef && id == other.id;
 
   String toString() => '[IsolateGroupRef ' //
       'id: ${id}, number: ${number}, name: ${name}, isSystemIsolateGroup: ${isSystemIsolateGroup}]';
@@ -5483,7 +5483,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is IsolateGroup && id == other.id;
+  bool operator ==(Object other) => other is IsolateGroup && id == other.id;
 
   String toString() => '[IsolateGroup ' //
       'id: ${id}, number: ${number}, name: ${name}, isSystemIsolateGroup: ${isSystemIsolateGroup}, ' //
@@ -5651,7 +5651,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is LibraryRef && id == other.id;
+  bool operator ==(Object other) => other is LibraryRef && id == other.id;
 
   String toString() => '[LibraryRef id: ${id}, name: ${name}, uri: ${uri}]';
 }
@@ -5743,7 +5743,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Library && id == other.id;
+  bool operator ==(Object other) => other is Library && id == other.id;
 
   String toString() => '[Library]';
 }
@@ -6125,7 +6125,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is NullValRef && id == other.id;
+  bool operator ==(Object other) => other is NullValRef && id == other.id;
 
   String toString() => '[NullValRef ' //
       'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -6177,7 +6177,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is NullVal && id == other.id;
+  bool operator ==(Object other) => other is NullVal && id == other.id;
 
   String toString() => '[NullVal ' //
       'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -6225,7 +6225,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is ObjRef && id == other.id;
+  bool operator ==(Object other) => other is ObjRef && id == other.id;
 
   String toString() => '[ObjRef id: ${id}]';
 }
@@ -6301,7 +6301,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Obj && id == other.id;
+  bool operator ==(Object other) => other is Obj && id == other.id;
 
   String toString() => '[Obj id: ${id}]';
 }
@@ -6792,7 +6792,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is ScriptRef && id == other.id;
+  bool operator ==(Object other) => other is ScriptRef && id == other.id;
 
   String toString() => '[ScriptRef id: ${id}, uri: ${uri}]';
 }
@@ -6927,7 +6927,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is Script && id == other.id;
+  bool operator ==(Object other) => other is Script && id == other.id;
 
   String toString() => '[Script id: ${id}, uri: ${uri}, library: ${library}]';
 }
@@ -7474,7 +7474,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is TypeArgumentsRef && id == other.id;
+  bool operator ==(Object other) => other is TypeArgumentsRef && id == other.id;
 
   String toString() => '[TypeArgumentsRef id: ${id}, name: ${name}]';
 }
@@ -7525,7 +7525,7 @@
 
   int get hashCode => id.hashCode;
 
-  operator ==(other) => other is TypeArguments && id == other.id;
+  bool operator ==(Object other) => other is TypeArguments && id == other.id;
 
   String toString() =>
       '[TypeArguments id: ${id}, name: ${name}, types: ${types}]';
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index 0f9897f..2cf8fd8 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -1731,7 +1731,7 @@
       gen.writeln();
 
       gen.writeStatement(
-          'operator==(other) => other is ${name} && id == other.id;');
+          'bool operator ==(Object other) => other is ${name} && id == other.id;');
       gen.writeln();
     }
 
diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart
index 321b125..b9ef51f 100644
--- a/pkg/vm_service/tool/generate.dart
+++ b/pkg/vm_service/tool/generate.dart
@@ -16,7 +16,7 @@
 
 /// Parse the 'service.md' into a model and generate both Dart and Java
 /// libraries.
-main(List<String> args) async {
+void main(List<String> args) async {
   String appDirPath = dirname(Platform.script.toFilePath());
 
   // Parse service.md into a model.
@@ -36,7 +36,7 @@
   await _generateAsserts(appDirPath, nodes);
 }
 
-_generateDart(String appDirPath, List<Node> nodes) async {
+Future _generateDart(String appDirPath, List<Node> nodes) async {
   var outDirPath = normalize(join(appDirPath, '..', 'lib/src'));
   var outDir = Directory(outDirPath);
   if (!outDir.existsSync()) outDir.createSync(recursive: true);
@@ -64,7 +64,7 @@
   print('Wrote Dart to ${outputFile.path}.');
 }
 
-_generateJava(String appDirPath, List<Node> nodes) async {
+Future _generateJava(String appDirPath, List<Node> nodes) async {
   var srcDirPath = normalize(join(appDirPath, '..', 'java', 'src'));
   var generator = java.JavaGenerator(srcDirPath);
   java.api = java.Api();
@@ -93,7 +93,7 @@
   print('Wrote Java to $srcDirPath.');
 }
 
-_generateAsserts(String appDirPath, List<Node> nodes) async {
+Future _generateAsserts(String appDirPath, List<Node> nodes) async {
   var outDirPath = normalize(join(appDirPath, '..', 'example'));
   var outDir = Directory(outDirPath);
   if (!outDir.existsSync()) outDir.createSync(recursive: true);
diff --git a/pkg/vm_service/tool/java/generate_java.dart b/pkg/vm_service/tool/java/generate_java.dart
index e70b0a0..9ef243d 100644
--- a/pkg/vm_service/tool/java/generate_java.dart
+++ b/pkg/vm_service/tool/java/generate_java.dart
@@ -549,14 +549,6 @@
   }
 
   void generateVmServiceMethod(TypeWriter writer, {includeOptional = false}) {
-    // TODO(danrubel) move this to the Consumer's javadoc
-//    String javadoc = docs == null ? '' : docs;
-//    if (returnType.isMultipleReturns) {
-//      javadoc += '\n\nThe return value can be one of '
-//          '${joinLast(returnType.types.map((t) => '[${t}]'), ', ', ' or ')}.';
-//      javadoc = javadoc.trim();
-//    }
-
     // Update method docs
     var javadoc = StringBuffer(docs == null ? '' : docs!);
     bool firstParamDoc = true;
@@ -594,18 +586,23 @@
       writer.addLine('final JsonObject params = new JsonObject();');
       for (MethodArg arg in args) {
         if (!includeOptional && arg.optional) continue;
-        var name = arg.name;
-        String op = arg.optional ? 'if (${name} != null) ' : '';
+        var argName = arg.name;
+        String op = arg.optional ? 'if (${argName} != null) ' : '';
         if (arg.isEnumType) {
-          writer.addLine('${op}params.addProperty("$name", $name.name());');
+          writer
+              .addLine('${op}params.addProperty("$argName", $argName.name());');
         } else if (arg.type.name == 'Map') {
           writer.addLine(
-              '${op}params.add("$name", convertMapToJsonObject($name));');
+              '${op}params.add("$argName", convertMapToJsonObject($argName));');
         } else if (arg.type.arrayDepth > 0) {
           writer.addLine(
-              '${op}params.add("$name", convertIterableToJsonArray($name));');
+              '${op}params.add("$argName", convertIterableToJsonArray($argName));');
+        } else if (name.startsWith('evaluate') && argName == 'expression') {
+          // Special case the eval expression parameters.
+          writer.addLine(
+              '${op}params.addProperty("$argName", removeNewLines($argName));');
         } else {
-          writer.addLine('${op}params.addProperty("$name", $name);');
+          writer.addLine('${op}params.addProperty("$argName", $argName);');
         }
       }
       writer.addLine('request("$name", params, consumer);');
@@ -626,7 +623,7 @@
 
   MethodArg(this.parent, this.type, this.name);
 
-  get asJavaMethodArg {
+  JavaMethodArg get asJavaMethodArg {
     if (optional && type.ref == 'int') {
       return JavaMethodArg(name, 'Integer');
     }
@@ -768,7 +765,7 @@
 
   bool get isSimple => simpleTypes.contains(name);
 
-  get jsonTypeName {
+  String? get jsonTypeName {
     if (name == 'ClassObj') return 'Class';
     if (name == 'ErrorObj') return 'Error';
     return name;
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index b3bc9a9..3567d21 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -96,7 +96,7 @@
     MutexLocker locker(mutex_);
     HANDLE wait_handle = INVALID_HANDLE_VALUE;
     BOOL success = RegisterWaitForSingleObject(
-        &wait_handle, handle, &ExitCodeCallback, reinterpret_cast<void*>(pid),
+        &wait_handle, handle, &ExitCodeCallback, reinterpret_cast<PVOID>(pid),
         INFINITE, WT_EXECUTEONLYONCE);
     if (!success) {
       FATAL("Failed to register exit code wait operation.");
@@ -151,7 +151,7 @@
     if (timed_out) {
       return;
     }
-    DWORD pid = reinterpret_cast<DWORD>(data);
+    DWORD pid = reinterpret_cast<UINT_PTR>(data);
     HANDLE handle;
     HANDLE wait_handle;
     HANDLE exit_pipe;
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index e15ff53..922ad2b 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -283,15 +283,18 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, obj, arguments->NativeArgAt(1));
 
   Object& validated_result = Object::Handle(zone);
-  Object& msg_obj = Object::Handle(zone, obj.ptr());
+  const Object& msg_obj = Object::Handle(zone, obj.ptr());
   validated_result = ValidateMessageObject(zone, isolate, msg_obj);
+  // msg_array = [<message>, <object-in-message-to-rehash>]
+  const Array& msg_array = Array::Handle(zone, Array::New(2));
+  msg_array.SetAt(0, msg_obj);
   if (validated_result.IsUnhandledException()) {
     Exceptions::PropagateError(Error::Cast(validated_result));
     UNREACHABLE();
   }
   PersistentHandle* handle =
       isolate->group()->api_state()->AllocatePersistentHandle();
-  handle->set_ptr(msg_obj);
+  handle->set_ptr(msg_array);
   isolate->bequeath(std::unique_ptr<Bequest>(new Bequest(handle, port.Id())));
   // TODO(aam): Ensure there are no dart api calls after this point as we want
   // to ensure that validated message won't get tampered with.
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 134a71d..f41c51d 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -1272,19 +1272,15 @@
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
 // can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
                                Label* equal,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
-                               Register scratch,
-                               bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+                               Register scratch) {
+  Label different_cids, not_integer, not_integer_or_string;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ CompareImmediate(cid1, kClosureCid);
@@ -1300,13 +1296,10 @@
   // Check if there are no type arguments. In this case we can return true.
   // Otherwise fall through into the runtime to handle comparison.
   __ LoadClassById(scratch, cid1);
-  __ ldr(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
-  __ b(&equal_cids_but_generic, NE);
+  __ ldrh(scratch,
+          FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+  __ CompareImmediate(scratch, 0);
+  __ b(normal_ir_body, NE);
   __ b(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
@@ -1325,50 +1318,35 @@
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1, scratch,
-                  testing_instance_cids ? &not_integer_or_string : not_equal);
+  JumpIfNotString(assembler, cid1, scratch, &not_integer_or_string);
 
   // First type is String. Check if the second is a string too.
   JumpIfString(assembler, cid2, scratch, equal);
   // String types are only equivalent to other String types.
   __ b(not_equal);
 
-  if (testing_instance_cids) {
-    __ Bind(&not_integer_or_string);
-    // Check if the first type is a Type. If it is not then types are not
-    // equivalent because they have different class ids and they are not String
-    // or integer or Type.
-    JumpIfNotType(assembler, cid1, scratch, not_equal);
+  __ Bind(&not_integer_or_string);
+  // Check if the first type is a Type. If it is not then types are not
+  // equivalent because they have different class ids and they are not String
+  // or integer or Type.
+  JumpIfNotType(assembler, cid1, scratch, not_equal);
 
-    // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, scratch, equal);
-    // Type types are only equivalent to other Type types.
-    __ b(not_equal);
-  }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
+  // First type is a Type. Check if the second is a Type too.
+  JumpIfType(assembler, cid2, scratch, equal);
+  // Type types are only equivalent to other Type types.
+  __ b(not_equal);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
                                                 Label* normal_ir_body) {
-  __ ldm(IA, SP, (1 << R1 | 1 << R2));
-  __ LoadClassIdMayBeSmi(R1, R1);
-  __ LoadClassIdMayBeSmi(R2, R2);
+  __ ldr(R0, Address(SP, 0 * target::kWordSize));
+  __ LoadClassIdMayBeSmi(R1, R0);
+
+  __ ldr(R0, Address(SP, 1 * target::kWordSize));
+  __ LoadClassIdMayBeSmi(R2, R0);
 
   Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0,
-                     /* testing_instance_cids = */ true);
-
-  // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
-  __ ldm(IA, SP, (1 << R1 | 1 << R2));
-  __ AddImmediate(R1, -kHeapObjectTag);
-  __ ldr(R1, Address(R1, R0, LSL, target::kWordSizeLog2));
-  __ AddImmediate(R2, -kHeapObjectTag);
-  __ ldr(R2, Address(R2, R0, LSL, target::kWordSizeLog2));
-  __ cmp(R1, Operand(R2));
-  __ b(&not_equal, NE);
-  // Fall through to equal case if type arguments are equal.
+  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0);
 
   __ Bind(&equal);
   __ LoadObject(R0, CastHandle<Object>(TrueObject()));
@@ -1418,16 +1396,8 @@
   __ SmiUntag(R3);
   __ ldr(R4, FieldAddress(R2, target::Type::type_class_id_offset()));
   __ SmiUntag(R4);
-  // We are not testing instance cids, but type class cids of Type instances.
   EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, R3, R4,
-                     R0, /* testing_instance_cids = */ false);
-
-  // Compare type arguments in Type instances.
-  __ ldr(R3, FieldAddress(R1, target::Type::arguments_offset()));
-  __ ldr(R4, FieldAddress(R2, target::Type::arguments_offset()));
-  __ cmp(R3, Operand(R4));
-  __ b(normal_ir_body, NE);
-  // Fall through to check nullability if type arguments are equal.
+                     R0);
 
   // Check nullability.
   __ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 04718ce..5749365 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1418,19 +1418,15 @@
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
 // can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
                                Label* equal,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
-                               Register scratch,
-                               bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+                               Register scratch) {
+  Label different_cids, not_integer, not_integer_or_string;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ CompareImmediate(cid1, kClosureCid);
@@ -1447,12 +1443,10 @@
   // Otherwise fall through into the runtime to handle comparison.
   __ LoadClassById(scratch, cid1);
   __ ldr(scratch,
-         FieldAddress(
-             scratch,
-             target::Class::host_type_arguments_field_offset_in_words_offset()),
-         kFourBytes);
-  __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
-  __ b(&equal_cids_but_generic, NE);
+         FieldAddress(scratch, target::Class::num_type_arguments_offset(),
+                      kTwoBytes),
+         kTwoBytes);
+  __ cbnz(normal_ir_body, scratch);
   __ b(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
@@ -1471,50 +1465,35 @@
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1, scratch,
-                  testing_instance_cids ? &not_integer_or_string : not_equal);
+  JumpIfNotString(assembler, cid1, scratch, &not_integer_or_string);
 
   // First type is String. Check if the second is a string too.
   JumpIfString(assembler, cid2, scratch, equal);
   // String types are only equivalent to other String types.
   __ b(not_equal);
 
-  if (testing_instance_cids) {
-    __ Bind(&not_integer_or_string);
-    // Check if the first type is a Type. If it is not then types are not
-    // equivalent because they have different class ids and they are not String
-    // or integer or Type.
-    JumpIfNotType(assembler, cid1, scratch, not_equal);
+  __ Bind(&not_integer_or_string);
+  // Check if the first type is a Type. If it is not then types are not
+  // equivalent because they have different class ids and they are not String
+  // or integer or Type.
+  JumpIfNotType(assembler, cid1, scratch, not_equal);
 
-    // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, scratch, equal);
-    // Type types are only equivalent to other Type types.
-    __ b(not_equal);
-  }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
+  // First type is a Type. Check if the second is a Type too.
+  JumpIfType(assembler, cid2, scratch, equal);
+  // Type types are only equivalent to other Type types.
+  __ b(not_equal);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
                                                 Label* normal_ir_body) {
-  __ ldp(R0, R1, Address(SP, 0 * target::kWordSize, Address::PairOffset));
-  __ LoadClassIdMayBeSmi(R2, R1);
+  __ ldr(R0, Address(SP, 0 * target::kWordSize));
   __ LoadClassIdMayBeSmi(R1, R0);
 
-  Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0,
-                     /* testing_instance_cids = */ true);
+  __ ldr(R0, Address(SP, 1 * target::kWordSize));
+  __ LoadClassIdMayBeSmi(R2, R0);
 
-  // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
-  __ ldp(R1, R2, Address(SP, 0 * target::kWordSize, Address::PairOffset));
-  __ AddImmediate(R1, -kHeapObjectTag);
-  __ ldr(R1, Address(R1, R0, UXTX, Address::Scaled));
-  __ AddImmediate(R2, -kHeapObjectTag);
-  __ ldr(R2, Address(R2, R0, UXTX, Address::Scaled));
-  __ CompareObjectRegisters(R1, R2);
-  __ b(&not_equal, NE);
-  // Fall through to equal case if type arguments are equal.
+  Label equal, not_equal;
+  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0);
 
   __ Bind(&equal);
   __ LoadObject(R0, CastHandle<Object>(TrueObject()));
@@ -1570,16 +1549,8 @@
   __ LoadCompressedSmi(R4,
                        FieldAddress(R2, target::Type::type_class_id_offset()));
   __ SmiUntag(R4);
-  // We are not testing instance cids, but type class cids of Type instances.
   EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, R3, R4,
-                     R0, /* testing_instance_cids = */ false);
-
-  // Compare type arguments in Type instances.
-  __ LoadCompressed(R3, FieldAddress(R1, target::Type::arguments_offset()));
-  __ LoadCompressed(R4, FieldAddress(R2, target::Type::arguments_offset()));
-  __ CompareObjectRegisters(R3, R4);
-  __ b(normal_ir_body, NE);
-  // Fall through to check nullability if type arguments are equal.
+                     R0);
 
   // Check nullability.
   __ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index f1cf3ac..5909eab 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1358,19 +1358,15 @@
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
 // can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
                                Label* equal,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
-                               Register scratch,
-                               bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+                               Register scratch) {
+  Label different_cids, not_integer, not_integer_or_string;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ cmpl(cid1, Immediate(kClosureCid));
@@ -1386,13 +1382,10 @@
   // Check if there are no type arguments. In this case we can return true.
   // Otherwise fall through into the runtime to handle comparison.
   __ LoadClassById(scratch, cid1);
-  __ movl(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+  __ movzxw(scratch,
+            FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+  __ cmpl(scratch, Immediate(0));
+  __ j(NOT_EQUAL, normal_ir_body);
   __ jmp(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
@@ -1412,29 +1405,23 @@
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1,
-                  testing_instance_cids ? &not_integer_or_string : not_equal);
+  JumpIfNotString(assembler, cid1, &not_integer_or_string);
 
   // First type is a String. Check if the second is a String too.
   JumpIfString(assembler, cid2, equal);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
-  if (testing_instance_cids) {
-    __ Bind(&not_integer_or_string);
-    // Check if the first type is a Type. If it is not then types are not
-    // equivalent because they have different class ids and they are not String
-    // or integer or Type.
-    JumpIfNotType(assembler, cid1, not_equal);
+  __ Bind(&not_integer_or_string);
+  // Check if the first type is a Type. If it is not then types are not
+  // equivalent because they have different class ids and they are not String
+  // or integer or Type.
+  JumpIfNotType(assembler, cid1, not_equal);
 
-    // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, equal);
-    // Type types are only equivalent to other Type types.
-    __ jmp(not_equal);
-  }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
+  // First type is a Type. Check if the second is a Type too.
+  JumpIfType(assembler, cid2, equal);
+  // Type types are only equivalent to other Type types.
+  __ jmp(not_equal);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1447,16 +1434,7 @@
 
   Label equal, not_equal;
   EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, EDI, EBX,
-                     EAX, /* testing_instance_cids = */ true);
-
-  // Compare type arguments, host_type_arguments_field_offset_in_words in EAX.
-  __ movl(EDI, Address(ESP, +1 * target::kWordSize));
-  __ movl(EBX, Address(ESP, +2 * target::kWordSize));
-  __ movl(EDI, FieldAddress(EDI, EAX, TIMES_4, 0));
-  __ movl(EBX, FieldAddress(EBX, EAX, TIMES_4, 0));
-  __ cmpl(EDI, EBX);
-  __ j(NOT_EQUAL, &not_equal, Assembler::kNearJump);
-  // Fall through to equal case if type arguments are equal.
+                     EAX);
 
   __ Bind(&equal);
   __ LoadObject(EAX, CastHandle<Object>(TrueObject()));
@@ -1511,16 +1489,8 @@
   __ SmiUntag(ECX);
   __ movl(EDX, FieldAddress(EBX, target::Type::type_class_id_offset()));
   __ SmiUntag(EDX);
-  // We are not testing instance cids, but type class cids of Type instances.
   EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, ECX,
-                     EDX, EAX, /* testing_instance_cids = */ false);
-
-  // Compare type arguments in Type instances.
-  __ movl(ECX, FieldAddress(EDI, target::Type::arguments_offset()));
-  __ movl(EDX, FieldAddress(EBX, target::Type::arguments_offset()));
-  __ cmpl(ECX, EDX);
-  __ j(NOT_EQUAL, normal_ir_body, Assembler::kNearJump);
-  // Fall through to check nullability if type arguments are equal.
+                     EDX, EAX);
 
   // Check nullability.
   __ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index d13388a..f691931 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1262,19 +1262,15 @@
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
 // can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
                                Label* equal,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
-                               Register scratch,
-                               bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string;
+                               Register scratch) {
+  Label different_cids, not_integer, not_integer_or_string;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ cmpq(cid1, Immediate(kClosureCid));
@@ -1290,13 +1286,10 @@
   // Check if there are no type arguments. In this case we can return true.
   // Otherwise fall through into the runtime to handle comparison.
   __ LoadClassById(scratch, cid1);
-  __ movl(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+  __ movzxw(scratch,
+            FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+  __ cmpq(scratch, Immediate(0));
+  __ j(NOT_EQUAL, normal_ir_body);
   __ jmp(equal);
 
   // Class ids are different. Check if we are comparing two string types (with
@@ -1316,29 +1309,23 @@
 
   __ Bind(&not_integer);
   // Check if both are String types.
-  JumpIfNotString(assembler, cid1,
-                  testing_instance_cids ? &not_integer_or_string : not_equal);
+  JumpIfNotString(assembler, cid1, &not_integer_or_string);
 
   // First type is a String. Check if the second is a String too.
   JumpIfString(assembler, cid2, equal);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
-  if (testing_instance_cids) {
-    __ Bind(&not_integer_or_string);
-    // Check if the first type is a Type. If it is not then types are not
-    // equivalent because they have different class ids and they are not String
-    // or integer or Type.
-    JumpIfNotType(assembler, cid1, not_equal);
+  __ Bind(&not_integer_or_string);
+  // Check if the first type is a Type. If it is not then types are not
+  // equivalent because they have different class ids and they are not String
+  // or integer or Type.
+  JumpIfNotType(assembler, cid1, not_equal);
 
-    // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, equal);
-    // Type types are only equivalent to other Type types.
-    __ jmp(not_equal);
-  }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
+  // First type is a Type. Check if the second is a Type too.
+  JumpIfType(assembler, cid2, equal);
+  // Type types are only equivalent to other Type types.
+  __ jmp(not_equal);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1351,16 +1338,7 @@
 
   Label equal, not_equal;
   EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, RCX, RDX,
-                     RAX, /* testing_instance_cids = */ true);
-
-  // Compare type arguments, host_type_arguments_field_offset_in_words in RAX.
-  __ movq(RCX, Address(RSP, +1 * target::kWordSize));
-  __ movq(RDX, Address(RSP, +2 * target::kWordSize));
-  __ movq(RCX, FieldAddress(RCX, RAX, TIMES_8, 0));
-  __ movq(RDX, FieldAddress(RDX, RAX, TIMES_8, 0));
-  __ cmpq(RCX, RDX);
-  __ j(NOT_EQUAL, &not_equal, Assembler::kNearJump);
-  // Fall through to equal case if type arguments are equal.
+                     RAX);
 
   __ Bind(&equal);
   __ LoadObject(RAX, CastHandle<Object>(TrueObject()));
@@ -1421,16 +1399,8 @@
   __ LoadCompressedSmi(RSI,
                        FieldAddress(RDX, target::Type::type_class_id_offset()));
   __ SmiUntag(RSI);
-  // We are not testing instance cids, but type class cids of Type instances.
   EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, RDI,
-                     RSI, RAX, /* testing_instance_cids = */ false);
-
-  // Compare type arguments in Type instances.
-  __ LoadCompressed(RDI, FieldAddress(RCX, target::Type::arguments_offset()));
-  __ LoadCompressed(RSI, FieldAddress(RDX, target::Type::arguments_offset()));
-  __ cmpq(RDI, RSI);
-  __ j(NOT_EQUAL, normal_ir_body, Assembler::kNearJump);
-  // Fall through to check nullability if type arguments are equal.
+                     RSI, RAX);
 
   // Check nullability.
   __ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/backend/code_statistics.cc b/runtime/vm/compiler/backend/code_statistics.cc
index f18339c..3a0621b 100644
--- a/runtime/vm/compiler/backend/code_statistics.cc
+++ b/runtime/vm/compiler/backend/code_statistics.cc
@@ -175,7 +175,6 @@
 }
 
 void CodeStatistics::AppendTo(CombinedCodeStatistics* stat) {
-  intptr_t sum = 0;
   bool returns_constant = true;
   bool returns_const_with_load_field_ = true;
 
@@ -183,7 +182,6 @@
     intptr_t bytes = entries_[i].bytes;
     stat->entries_[i].count += entries_[i].count;
     if (bytes > 0) {
-      sum += bytes;
       stat->entries_[i].bytes += bytes;
       if (i != CombinedCodeStatistics::kTagParallelMove &&
           i != CombinedCodeStatistics::kTagReturn &&
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 8130b72..620199b 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -1113,6 +1113,10 @@
   return !(r == lr);
 }
 
+inline Register ConcreteRegister(LinkRegister) {
+  return LR;
+}
+
 #undef LR
 
 #define LINK_REGISTER (LinkRegister())
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 0b5b142..ab868b4 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -845,4 +845,24 @@
   return result.ptr();
 }
 
+ObjectPtr DartLibraryCalls::RehashObjects(
+    Thread* thread,
+    const Object& array_or_growable_array) {
+  ASSERT(array_or_growable_array.IsArray() ||
+         array_or_growable_array.IsGrowableObjectArray());
+
+  auto zone = thread->zone();
+  const Library& collections_lib =
+      Library::Handle(zone, Library::CollectionLibrary());
+  const Function& rehashing_function = Function::Handle(
+      zone,
+      collections_lib.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
+  ASSERT(!rehashing_function.IsNull());
+
+  const Array& arguments = Array::Handle(zone, Array::New(1));
+  arguments.SetAt(0, array_or_growable_array);
+
+  return DartEntry::InvokeFunction(rehashing_function, arguments);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 13d10fa..5f868bd 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -303,6 +303,10 @@
   // _startMicrotaskLoop from dart:async.
   // Returns null on success, an ErrorPtr on failure.
   static ObjectPtr EnsureScheduleImmediate();
+
+  // Runs the `_rehashObjects()` function.
+  static ObjectPtr RehashObjects(Thread* thread,
+                                 const Object& array_or_growable_array);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 0f18a47..8f0ed32 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1331,8 +1331,7 @@
     TypeParameters& type_params = TypeParameters::Handle();
     Function& current = Function::Handle(function().ptr());
     intptr_t mapping_offset = num_vars;
-    for (intptr_t i = 0; !current.IsNull(); i += current.NumTypeParameters(),
-                  current = current.parent_function()) {
+    for (; !current.IsNull(); current = current.parent_function()) {
       type_params = current.type_parameters();
       if (type_params.IsNull()) continue;
       intptr_t size = current.NumTypeParameters();
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index ab90490..0db0a6d 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -9,6 +9,7 @@
 #include "vm/dwarf.h"
 #include "vm/hash_map.h"
 #include "vm/image_snapshot.h"
+#include "vm/stack_frame.h"
 #include "vm/thread.h"
 #include "vm/zone_text_buffer.h"
 
@@ -564,6 +565,11 @@
     ASSERT(index < text_.length());
     return text_.buffer() + index;
   }
+
+  static const intptr_t kNotIndexed = CStringIntMapKeyValueTrait::kNoValue;
+
+  // Returns the index of |str| if it is present in the string table
+  // and |kNotIndexed| otherwise.
   intptr_t Lookup(const char* str) const {
     return text_indices_.LookupValue(str);
   }
@@ -1208,6 +1214,126 @@
   return nullptr;
 }
 
+void Elf::FinalizeEhFrame() {
+#if defined(DART_PRECOMPILER) &&                                               \
+    (defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64))
+  // Multiplier which will be used to scale operands of DW_CFA_offset and
+  // DW_CFA_val_offset.
+  const intptr_t kDataAlignment = kWordSize;
+
+  const uint8_t DW_CFA_offset = 0x80;
+  const uint8_t DW_CFA_val_offset = 0x14;
+  const uint8_t DW_CFA_def_cfa = 0x0c;
+
+  // Relocation from .eh_frame into bytes within some previously emitted
+  // section.
+  struct Reloc {
+    intptr_t target_memory_offset;
+    intptr_t source_offset;
+  };
+
+  GrowableArray<Reloc> relocs(2);
+  ZoneWriteStream stream(zone(), kInitialDwarfBufferSize);
+  DwarfElfStream dwarf_stream(zone_, &stream, /*symtab=*/nullptr);
+
+  // Emits length prefixed CIE or FDE, returns starting offset.
+  auto emit_record = [&](auto&& body) -> intptr_t {
+    const intptr_t start = stream.Position();
+    stream.WriteFixed<uint32_t>(0);
+    body();
+    stream.Align(kWordSize);
+    const intptr_t end = stream.Position();
+    stream.SetPosition(start);
+    // Write length not counting the length field itself.
+    stream.WriteFixed(static_cast<uint32_t>(end - start - 4));
+    stream.SetPosition(end);
+    return start;
+  };
+
+  // Emit pcrel|sdata4 reference to the target memory offset.
+  auto add_pcrel_ref = [&](intptr_t target_memory_offset) {
+    relocs.Add({target_memory_offset, stream.Position()});
+    dwarf_stream.u4(0);
+  };
+
+  // Emit CIE.
+  const intptr_t cie_position = emit_record([&]() {
+    dwarf_stream.u4(0);  // CIE
+    dwarf_stream.u1(1);  // Version (must be 1 or 3)
+    // Augmentation String
+    dwarf_stream.string("zR");             // NOLINT
+    dwarf_stream.uleb128(1);               // Code alignment (must be 1).
+    dwarf_stream.sleb128(kDataAlignment);  // Data alignment
+    dwarf_stream.u1(
+        ConcreteRegister(LINK_REGISTER));  // Return address register
+    dwarf_stream.uleb128(1);               // Augmentation size
+    dwarf_stream.u1(0x1b);  // FDE encoding: DW_EH_PE_pcrel | DW_EH_PE_sdata4
+    // CFA is FP+0
+    dwarf_stream.u1(DW_CFA_def_cfa);
+    dwarf_stream.uleb128(FP);
+    dwarf_stream.uleb128(0);
+  });
+
+  // Emit an FDE covering each .text section.
+  const auto text_name = shstrtab_->Lookup(".text");
+  ASSERT(text_name != StringTable::kNotIndexed);
+  for (auto section : sections_) {
+    if (section->name() == text_name) {
+      RELEASE_ASSERT(section->memory_offset_is_set());
+      emit_record([&]() {
+        // Offset to CIE. Note that unlike pcrel this offset is encoded
+        // backwards: it will be subtracted from the current position.
+        dwarf_stream.u4(stream.Position() - cie_position);
+        add_pcrel_ref(section->memory_offset());  // Start address.
+        dwarf_stream.u4(section->MemorySize());   // Size.
+        dwarf_stream.u1(0);                       // Augmentation Data length.
+
+        // FP at FP+kSavedCallerPcSlotFromFp*kWordSize
+        COMPILE_ASSERT(kSavedCallerFpSlotFromFp >= 0);
+        dwarf_stream.u1(DW_CFA_offset | FP);
+        dwarf_stream.uleb128(kSavedCallerFpSlotFromFp);
+
+        // LR at FP+kSavedCallerPcSlotFromFp*kWordSize
+        COMPILE_ASSERT(kSavedCallerPcSlotFromFp >= 0);
+        dwarf_stream.u1(DW_CFA_offset | ConcreteRegister(LINK_REGISTER));
+        dwarf_stream.uleb128(kSavedCallerPcSlotFromFp);
+
+        // SP is FP+kCallerSpSlotFromFp*kWordSize
+        COMPILE_ASSERT(kCallerSpSlotFromFp >= 0);
+        dwarf_stream.u1(DW_CFA_val_offset);
+#if defined(TARGET_ARCH_ARM64)
+        dwarf_stream.uleb128(ConcreteRegister(CSP));
+#elif defined(TARGET_ARCH_ARM)
+        dwarf_stream.uleb128(SP);
+#else
+#error "Unsupported .eh_frame architecture"
+#endif
+        dwarf_stream.uleb128(kCallerSpSlotFromFp);
+      });
+    }
+  }
+
+  dwarf_stream.u4(0);  // end of section
+
+  // Add section and then relocate its contents.
+  auto const eh_frame = new (zone_) BitsContainer(
+      type_, false, false, stream.bytes_written(), stream.buffer());
+  AddSection(eh_frame, ".eh_frame");
+
+  // Relocate contents now that we have memory_offset assigned.
+  for (auto& reloc : relocs) {
+    const intptr_t pcrel_offset =
+        reloc.target_memory_offset -
+        (eh_frame->memory_offset() + reloc.source_offset);
+    // Note: IsInt<int32_t>(32, ...) does not work correctly.
+    RELEASE_ASSERT(kBitsPerWord == 32 || Utils::IsInt(32, pcrel_offset));
+    *reinterpret_cast<int32_t*>(stream.buffer() + reloc.source_offset) =
+        static_cast<int32_t>(pcrel_offset);
+  }
+#endif  // defined(DART_PRECOMPILER) && \
+        //   (defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64))
+}
+
 void Elf::FinalizeDwarfSections() {
   if (dwarf_ == nullptr) return;
 #if defined(DART_PRECOMPILER)
@@ -1277,6 +1403,7 @@
   }
   AddSection(shstrtab_, ".shstrtab");
   FinalizeDwarfSections();
+  FinalizeEhFrame();
 
   // At this point, all non-programmatically calculated sections and segments
   // have been added. Add any programatically calculated sections and segments
diff --git a/runtime/vm/elf.h b/runtime/vm/elf.h
index 9c7cbf5..91c8202b 100644
--- a/runtime/vm/elf.h
+++ b/runtime/vm/elf.h
@@ -109,6 +109,8 @@
   void FinalizeProgramTable();
   void ComputeFileOffsets();
 
+  void FinalizeEhFrame();
+
   void WriteHeader(ElfWriteStream* stream);
   void WriteSectionTable(ElfWriteStream* stream);
   void WriteProgramTable(ElfWriteStream* stream);
diff --git a/runtime/vm/heap/compactor.cc b/runtime/vm/heap/compactor.cc
index 462a9d2..a4bd219 100644
--- a/runtime/vm/heap/compactor.cc
+++ b/runtime/vm/heap/compactor.cc
@@ -473,7 +473,6 @@
 
   // 1. Compute bitvector of surviving allocation units in the block.
   intptr_t block_live_size = 0;
-  intptr_t block_dead_size = 0;
   uword current = first_object;
   while (current < block_end) {
     ObjectPtr obj = UntaggedObject::FromAddr(current);
@@ -483,8 +482,6 @@
       ASSERT(static_cast<intptr_t>(forwarding_block->Lookup(current)) ==
              block_live_size);
       block_live_size += size;
-    } else {
-      block_dead_size += size;
     }
     current += size;
   }
diff --git a/runtime/vm/heap/freelist.cc b/runtime/vm/heap/freelist.cc
index edc9534..881e595 100644
--- a/runtime/vm/heap/freelist.cc
+++ b/runtime/vm/heap/freelist.cc
@@ -220,16 +220,12 @@
 }
 
 void FreeList::PrintSmall() const {
-  int small_sizes = 0;
-  int small_objects = 0;
   intptr_t small_bytes = 0;
   for (int i = 0; i < kNumLists; ++i) {
     if (free_lists_[i] == NULL) {
       continue;
     }
-    small_sizes += 1;
     intptr_t list_length = LengthLocked(i);
-    small_objects += list_length;
     intptr_t list_bytes = list_length * i * kObjectAlignment;
     small_bytes += list_bytes;
     OS::PrintErr(
@@ -265,20 +261,16 @@
 };
 
 void FreeList::PrintLarge() const {
-  int large_sizes = 0;
-  int large_objects = 0;
   intptr_t large_bytes = 0;
   MallocDirectChainedHashMap<NumbersKeyValueTrait<IntptrPair> > map;
   FreeListElement* node;
   for (node = free_lists_[kNumLists]; node != NULL; node = node->next()) {
     IntptrPair* pair = map.Lookup(node->HeapSize());
     if (pair == NULL) {
-      large_sizes += 1;
       map.Insert(IntptrPair(node->HeapSize(), 1));
     } else {
       pair->set_second(pair->second() + 1);
     }
-    large_objects += 1;
   }
 
   MallocDirectChainedHashMap<NumbersKeyValueTrait<IntptrPair> >::Iterator it =
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index 3c174a1..ee48775 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -521,24 +521,23 @@
   }
 };
 
-class MergeIsolatesHeapsHandler : public MessageHandler {
+class SendAndExitMessagesHandler : public MessageHandler {
  public:
-  explicit MergeIsolatesHeapsHandler(Isolate* owner)
+  explicit SendAndExitMessagesHandler(Isolate* owner)
       : msg_(Utils::CreateCStringUniquePtr(nullptr)), owner_(owner) {}
 
   const char* name() const { return "merge-isolates-heaps-handler"; }
 
-  ~MergeIsolatesHeapsHandler() { PortMap::ClosePorts(this); }
+  ~SendAndExitMessagesHandler() { PortMap::ClosePorts(this); }
 
   MessageStatus HandleMessage(std::unique_ptr<Message> message) {
     // Parse the message.
     Object& response_obj = Object::Handle();
     if (message->IsRaw()) {
       response_obj = message->raw_obj();
-    } else if (message->IsBequest()) {
-      Bequest* bequest = message->bequest();
-      PersistentHandle* handle = bequest->handle();
-      // Object in the receiving isolate's heap.
+    } else if (message->IsPersistentHandle()) {
+      PersistentHandle* handle = message->persistent_handle();
+      // Object is in the receiving isolate's heap.
       EXPECT(isolate()->group()->heap()->Contains(
           UntaggedObject::ToAddr(handle->ptr())));
       response_obj = handle->ptr();
@@ -582,7 +581,7 @@
   Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
   EXPECT_EQ(parent, Dart_CurrentIsolate());
   {
-    MergeIsolatesHeapsHandler handler(Isolate::Current());
+    SendAndExitMessagesHandler handler(Isolate::Current());
     Dart_Port port_id = PortMap::CreatePort(&handler);
     EXPECT_EQ(PortMap::GetIsolate(port_id), Isolate::Current());
     Dart_ExitIsolate();
@@ -616,7 +615,7 @@
   const char* TEST_MESSAGE = "hello, world";
   Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
   EXPECT_EQ(parent, Dart_CurrentIsolate());
-  MergeIsolatesHeapsHandler handler(Isolate::Current());
+  SendAndExitMessagesHandler handler(Isolate::Current());
   Dart_Port port_id = PortMap::CreatePort(&handler);
   EXPECT_EQ(PortMap::GetIsolate(port_id), Isolate::Current());
   Dart_ExitIsolate();
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index eaffe44..8318801 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -1282,8 +1282,10 @@
   assembly_stream_->WriteString(
       ".cfi_offset rip, 8\n");  // saved pc is *(CFA+8)
   // saved sp is CFA+16
-  // Should be ".cfi_value_offset rsp, 16", but requires gcc newer than late
-  // 2016 and not supported by Android's libunwind.
+  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+  // because DW_CFA_val_offset uses scaled operand and we don't know what
+  // data alignment factor will be choosen by the assembler when emitting CIE.
   // DW_CFA_expression          0x10
   // uleb128 register (rsp)        7   (DWARF register number)
   // uleb128 size of operation     2
@@ -1300,19 +1302,36 @@
   assembly_stream_->WriteString(
       ".cfi_offset x30, 8\n");  // saved pc is *(CFA+8)
   // saved sp is CFA+16
-  // Should be ".cfi_value_offset sp, 16", but requires gcc newer than late
-  // 2016 and not supported by Android's libunwind.
+  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+  // because DW_CFA_val_offset uses scaled operand and we don't know what
+  // data alignment factor will be choosen by the assembler when emitting CIE.
+#if defined(TARGET_OS_ANDROID)
+  // On Android libunwindstack has a bug (b/191113792): it does not push
+  // CFA value to the expression stack before evaluating expression given
+  // to DW_CFA_expression. We have to workaround this bug by manually pushing
+  // CFA (R11) to the stack using DW_OP_breg29 0.
+  // DW_CFA_expression          0x10
+  // uleb128 register (x31)       31
+  // uleb128 size of operation     4
+  // DW_OP_breg11               0x8d (0x70 + 29)
+  // sleb128 offset                0
+  // DW_OP_plus_uconst          0x23
+  // uleb128 addend               16
+  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x8d, 0, 0x23, 16\n");
+#else
   // DW_CFA_expression          0x10
   // uleb128 register (x31)       31
   // uleb128 size of operation     2
   // DW_OP_plus_uconst          0x23
   // uleb128 addend               16
   assembly_stream_->WriteString(".cfi_escape 0x10, 31, 2, 0x23, 16\n");
+#endif
 
 #elif defined(TARGET_ARCH_ARM)
 #if defined(TARGET_OS_MACOS) || defined(TARGET_OS_MACOS_IOS)
   COMPILE_ASSERT(FP == R7);
-  assembly_stream_->WriteString(".cfi_def_cfa r7, 0\n");  // CFA is fp+j0
+  assembly_stream_->WriteString(".cfi_def_cfa r7, 0\n");  // CFA is fp+0
   assembly_stream_->WriteString(".cfi_offset r7, 0\n");  // saved fp is *(CFA+0)
 #else
   COMPILE_ASSERT(FP == R11);
@@ -1322,14 +1341,31 @@
 #endif
   assembly_stream_->WriteString(".cfi_offset lr, 4\n");  // saved pc is *(CFA+4)
   // saved sp is CFA+8
-  // Should be ".cfi_value_offset sp, 8", but requires gcc newer than late
-  // 2016 and not supported by Android's libunwind.
+  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+  // because DW_CFA_val_offset uses scaled operand and we don't know what
+  // data alignment factor will be choosen by the assembler when emitting CIE.
+#if defined(TARGET_OS_ANDROID)
+  // On Android libunwindstack has a bug (b/191113792): it does not push
+  // CFA value to the expression stack before evaluating expression given
+  // to DW_CFA_expression. We have to workaround this bug by manually pushing
+  // CFA (R11) to the stack using DW_OP_breg11 0.
+  // DW_CFA_expression          0x10
+  // uleb128 register (sp)        13
+  // uleb128 size of operation     4
+  // DW_OP_breg11               0x7b (0x70 + 11)
+  // sleb128 offset                0
+  // DW_OP_plus_uconst          0x23
+  // uleb128 addend                8
+  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x7b, 0, 0x23, 16\n");
+#else
   // DW_CFA_expression          0x10
   // uleb128 register (sp)        13
   // uleb128 size of operation     2
   // DW_OP_plus_uconst          0x23
   // uleb128 addend                8
   assembly_stream_->WriteString(".cfi_escape 0x10, 13, 2, 0x23, 8\n");
+#endif
 
 // libunwind on ARM may use .ARM.exidx instead of .debug_frame
 #if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS)
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 234a43a..cb00d29 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -881,6 +881,10 @@
 }
 
 Bequest::~Bequest() {
+  if (handle_ == nullptr) {
+    return;
+  }
+
   IsolateGroup* isolate_group = IsolateGroup::Current();
   CHECK_ISOLATE_GROUP(isolate_group);
   NoSafepointScope no_safepoint_scope;
@@ -1345,11 +1349,19 @@
     msg_obj = message->raw_obj();
     // We should only be sending RawObjects that can be converted to CObjects.
     ASSERT(ApiObjectConverter::CanConvert(msg_obj.ptr()));
-  } else if (message->IsBequest()) {
-    Bequest* bequest = message->bequest();
-    PersistentHandle* handle = bequest->handle();
-    const Object& obj = Object::Handle(zone, handle->ptr());
-    msg_obj = obj.ptr();
+  } else if (message->IsPersistentHandle()) {
+    // msg_array = [<message>, <object-in-message-to-rehash>]
+    const auto& msg_array = Array::Handle(
+        zone, Array::RawCast(message->persistent_handle()->ptr()));
+    msg_obj = msg_array.At(0);
+    if (msg_array.At(1) != Object::null()) {
+      const auto& objects_to_rehash = Object::Handle(zone, msg_array.At(1));
+      const auto& result = Object::Handle(
+          zone, DartLibraryCalls::RehashObjects(thread, objects_to_rehash));
+      if (result.ptr() != Object::null()) {
+        msg_obj = result.ptr();
+      }
+    }
   } else {
     MessageSnapshotReader reader(message.get(), thread);
     msg_obj = reader.ReadObject();
@@ -2505,8 +2517,10 @@
   // This ensures that exit message comes last.
   if (bequest_.get() != nullptr) {
     auto beneficiary = bequest_->beneficiary();
-    PortMap::PostMessage(Message::New(beneficiary, bequest_.release(),
-                                      Message::kNormalPriority));
+    auto handle = bequest_->TakeHandle();
+    PortMap::PostMessage(
+        Message::New(beneficiary, handle, Message::kNormalPriority));
+    bequest_.reset();
   }
 
   LowLevelShutdown();
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 69dc7bc..c17a81d 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -956,6 +956,11 @@
   ~Bequest();
 
   PersistentHandle* handle() { return handle_; }
+  PersistentHandle* TakeHandle() {
+    auto handle = handle_;
+    handle_ = nullptr;
+    return handle;
+  }
   Dart_Port beneficiary() { return beneficiary_; }
 
  private:
diff --git a/runtime/vm/message.cc b/runtime/vm/message.cc
index e533e32..e4430e6 100644
--- a/runtime/vm/message.cc
+++ b/runtime/vm/message.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "vm/dart_api_state.h"
 #include "vm/dart_entry.h"
 #include "vm/json_stream.h"
 #include "vm/object.h"
@@ -21,8 +22,7 @@
                  MessageFinalizableData* finalizable_data,
                  Priority priority,
                  Dart_Port delivery_failure_port)
-    : next_(NULL),
-      dest_port_(dest_port),
+    : dest_port_(dest_port),
       delivery_failure_port_(delivery_failure_port),
       payload_(snapshot),
       snapshot_length_(snapshot_length),
@@ -37,12 +37,9 @@
                  ObjectPtr raw_obj,
                  Priority priority,
                  Dart_Port delivery_failure_port)
-    : next_(NULL),
-      dest_port_(dest_port),
+    : dest_port_(dest_port),
       delivery_failure_port_(delivery_failure_port),
       payload_(raw_obj),
-      snapshot_length_(0),
-      finalizable_data_(NULL),
       priority_(priority) {
   ASSERT(!raw_obj->IsHeapObject() || raw_obj->untag()->InVMIsolateHeap());
   ASSERT((priority == kNormalPriority) ||
@@ -51,19 +48,17 @@
 }
 
 Message::Message(Dart_Port dest_port,
-                 Bequest* bequest,
+                 PersistentHandle* handle,
                  Priority priority,
                  Dart_Port delivery_failure_port)
-    : next_(nullptr),
-      dest_port_(dest_port),
+    : dest_port_(dest_port),
       delivery_failure_port_(delivery_failure_port),
-      payload_(bequest),
-      snapshot_length_(-1),
-      finalizable_data_(nullptr),
+      payload_(handle),
+      snapshot_length_(kPersistentHandleSnapshotLen),
       priority_(priority) {
   ASSERT((priority == kNormalPriority) ||
          (delivery_failure_port == kIllegalPort));
-  ASSERT(IsBequest());
+  ASSERT(IsPersistentHandle());
 }
 
 Message::~Message() {
@@ -72,8 +67,10 @@
     free(payload_.snapshot_);
   }
   delete finalizable_data_;
-  if (IsBequest()) {
-    delete (payload_.bequest_);
+  if (IsPersistentHandle()) {
+    auto isolate_group = IsolateGroup::Current();
+    isolate_group->api_state()->FreePersistentHandle(
+        payload_.persistent_handle_);
   }
 }
 
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index f6f0b02..bbdf5f9 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.h
@@ -19,7 +19,6 @@
 
 namespace dart {
 
-class Bequest;
 class JSONStream;
 class PersistentHandle;
 class OldPage;
@@ -68,7 +67,7 @@
           Dart_Port delivery_failure_port = kIllegalPort);
 
   Message(Dart_Port dest_port,
-          Bequest* bequest,
+          PersistentHandle* handle,
           Priority priority,
           Dart_Port delivery_failure_port = kIllegalPort);
 
@@ -101,9 +100,9 @@
     ASSERT(IsRaw());
     return payload_.raw_obj_;
   }
-  Bequest* bequest() const {
-    ASSERT(IsBequest());
-    return payload_.bequest_;
+  PersistentHandle* persistent_handle() const {
+    ASSERT(IsPersistentHandle());
+    return payload_.persistent_handle_;
   }
   Priority priority() const { return priority_; }
 
@@ -111,11 +110,14 @@
   // of at the top of the message loop. Control messages from dart:isolate or
   // vm-service requests.
   bool IsOOB() const { return priority_ == Message::kOOBPriority; }
-  bool IsSnapshot() const { return !IsRaw() && !IsBequest(); }
+  bool IsSnapshot() const { return !IsRaw() && !IsPersistentHandle(); }
   // A message whose object is an immortal object from the vm-isolate's heap.
   bool IsRaw() const { return snapshot_length_ == 0; }
-  // A message sent from sendAndExit.
-  bool IsBequest() const { return snapshot_length_ == -1; }
+  // A message sent from SendPort.send or SendPort.sendAndExit where sender and
+  // receiver are in the same isolate group.
+  bool IsPersistentHandle() const {
+    return snapshot_length_ == kPersistentHandleSnapshotLen;
+  }
 
   bool RedirectToDeliveryFailurePort();
 
@@ -130,22 +132,25 @@
   static const char* PriorityAsString(Priority priority);
 
  private:
+  static intptr_t const kPersistentHandleSnapshotLen = -1;
+
   friend class MessageQueue;
 
-  Message* next_;
+  Message* next_ = nullptr;
   Dart_Port dest_port_;
   Dart_Port delivery_failure_port_;
   union Payload {
     Payload(uint8_t* snapshot) : snapshot_(snapshot) {}
     Payload(ObjectPtr raw_obj) : raw_obj_(raw_obj) {}
-    Payload(Bequest* bequest) : bequest_(bequest) {}
+    Payload(PersistentHandle* persistent_handle)
+        : persistent_handle_(persistent_handle) {}
 
     uint8_t* snapshot_;
     ObjectPtr raw_obj_;
-    Bequest* bequest_;
+    PersistentHandle* persistent_handle_;
   } payload_;
-  intptr_t snapshot_length_;
-  MessageFinalizableData* finalizable_data_;
+  intptr_t snapshot_length_ = 0;
+  MessageFinalizableData* finalizable_data_ = nullptr;
   Priority priority_;
 
   DISALLOW_COPY_AND_ASSIGN(Message);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 2979b4c..07f8188 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -313,7 +313,6 @@
 
   printer.Clear();
   intptr_t start = 0;
-  intptr_t final_len = 0;
   intptr_t len = sum_segment_len;
   bool is_setter = false;
   if (is_extension) {
@@ -323,7 +322,6 @@
         intptr_t slen = i + 1;
         intptr_t plen = slen - start;
         AppendSubString(&printer, unmangled_name, start, plen);
-        final_len = plen;
         unmangled_name += slen;
         len -= slen;
         break;
@@ -379,13 +377,11 @@
   intptr_t end = ((dot_pos + 1) == len) ? dot_pos : len;
 
   intptr_t substr_len = end - start;
-  final_len += substr_len;
   AppendSubString(&printer, unmangled_name, start, substr_len);
   if (is_setter) {
     const char* equals = Symbols::Equals().ToCString();
     const intptr_t equals_len = strlen(equals);
     AppendSubString(&printer, equals, 0, equals_len);
-    final_len += equals_len;
   }
 
   return printer.buffer();
@@ -7090,7 +7086,11 @@
 }
 
 uword Function::Hash() const {
-  return String::HashRawSymbol(name());
+  const uword hash = String::HashRawSymbol(name());
+  if (untag()->owner()->IsClass()) {
+    return hash ^ Class::RawCast(untag()->owner())->untag()->id();
+  }
+  return hash;
 }
 
 bool Function::HasBreakpoint() const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 1d5cfa6..3620f18 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -110,33 +110,36 @@
   object##Ptr ptr() const { return static_cast<object##Ptr>(ptr_); }           \
   bool Is##object() const { return true; }                                     \
   DART_NOINLINE static object& Handle() {                                      \
-    return HandleImpl(Thread::Current()->zone(), object::null());              \
+    return static_cast<object&>(                                               \
+        HandleImpl(Thread::Current()->zone(), object::null(), kClassId));      \
   }                                                                            \
   DART_NOINLINE static object& Handle(Zone* zone) {                            \
-    return HandleImpl(zone, object::null());                                   \
+    return static_cast<object&>(HandleImpl(zone, object::null(), kClassId));   \
   }                                                                            \
   DART_NOINLINE static object& Handle(object##Ptr ptr) {                       \
-    return HandleImpl(Thread::Current()->zone(), ptr);                         \
+    return static_cast<object&>(                                               \
+        HandleImpl(Thread::Current()->zone(), ptr, kClassId));                 \
   }                                                                            \
   DART_NOINLINE static object& Handle(Zone* zone, object##Ptr ptr) {           \
-    return HandleImpl(zone, ptr);                                              \
+    return static_cast<object&>(HandleImpl(zone, ptr, kClassId));              \
   }                                                                            \
   DART_NOINLINE static object& ZoneHandle() {                                  \
-    return ZoneHandleImpl(Thread::Current()->zone(), object::null());          \
+    return static_cast<object&>(                                               \
+        ZoneHandleImpl(Thread::Current()->zone(), object::null(), kClassId));  \
   }                                                                            \
   DART_NOINLINE static object& ZoneHandle(Zone* zone) {                        \
-    return ZoneHandleImpl(zone, object::null());                               \
+    return static_cast<object&>(                                               \
+        ZoneHandleImpl(zone, object::null(), kClassId));                       \
   }                                                                            \
   DART_NOINLINE static object& ZoneHandle(object##Ptr ptr) {                   \
-    return ZoneHandleImpl(Thread::Current()->zone(), ptr);                     \
+    return static_cast<object&>(                                               \
+        ZoneHandleImpl(Thread::Current()->zone(), ptr, kClassId));             \
   }                                                                            \
   DART_NOINLINE static object& ZoneHandle(Zone* zone, object##Ptr ptr) {       \
-    return ZoneHandleImpl(zone, ptr);                                          \
+    return static_cast<object&>(ZoneHandleImpl(zone, ptr, kClassId));          \
   }                                                                            \
-  DART_NOINLINE static object* ReadOnlyHandle() {                              \
-    object* obj = reinterpret_cast<object*>(Dart::AllocateReadOnlyHandle());   \
-    initializeHandle(obj, object::null());                                     \
-    return obj;                                                                \
+  static object* ReadOnlyHandle() {                                            \
+    return static_cast<object*>(ReadOnlyHandleImpl(kClassId));                 \
   }                                                                            \
   DART_NOINLINE static object& CheckedHandle(Zone* zone, ObjectPtr ptr) {      \
     object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(zone));  \
@@ -178,26 +181,9 @@
   static const ClassId kClassId = k##object##Cid;                              \
                                                                                \
  private: /* NOLINT */                                                         \
-  static object& HandleImpl(Zone* zone, object##Ptr ptr) {                     \
-    object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(zone));  \
-    initializeHandle(obj, ptr);                                                \
-    return *obj;                                                               \
-  }                                                                            \
-  static object& ZoneHandleImpl(Zone* zone, object##Ptr ptr) {                 \
-    object* obj =                                                              \
-        reinterpret_cast<object*>(VMHandles::AllocateZoneHandle(zone));        \
-    initializeHandle(obj, ptr);                                                \
-    return *obj;                                                               \
-  }                                                                            \
   /* Initialize the handle based on the ptr in the presence of null. */        \
   static void initializeHandle(object* obj, ObjectPtr ptr) {                   \
-    if (ptr != Object::null()) {                                               \
-      obj->SetPtr(ptr);                                                        \
-    } else {                                                                   \
-      obj->ptr_ = Object::null();                                              \
-      object fake_object;                                                      \
-      obj->set_vtable(fake_object.vtable());                                   \
-    }                                                                          \
+    obj->SetPtr(ptr, kClassId);                                                \
   }                                                                            \
   /* Disallow allocation, copy constructors and override super assignment. */  \
  public: /* NOLINT */                                                          \
@@ -237,8 +223,10 @@
 
 #define OBJECT_IMPLEMENTATION(object, super)                                   \
  public: /* NOLINT */                                                          \
-  void operator=(object##Ptr value) { initializeHandle(this, value); }         \
-  void operator^=(ObjectPtr value) {                                           \
+  DART_NOINLINE void operator=(object##Ptr value) {                            \
+    initializeHandle(this, value);                                             \
+  }                                                                            \
+  DART_NOINLINE void operator^=(ObjectPtr value) {                             \
     initializeHandle(this, value);                                             \
     ASSERT(IsNull() || Is##object());                                          \
   }                                                                            \
@@ -637,8 +625,28 @@
 
   uword raw_value() const { return static_cast<uword>(ptr()); }
 
-  inline void SetPtr(ObjectPtr value);
+  inline void SetPtr(ObjectPtr value, intptr_t default_cid);
   void CheckHandle() const;
+  DART_NOINLINE static Object& HandleImpl(Zone* zone,
+                                          ObjectPtr ptr,
+                                          intptr_t default_cid) {
+    Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateHandle(zone));
+    obj->SetPtr(ptr, default_cid);
+    return *obj;
+  }
+  DART_NOINLINE static Object& ZoneHandleImpl(Zone* zone,
+                                              ObjectPtr ptr,
+                                              intptr_t default_cid) {
+    Object* obj =
+        reinterpret_cast<Object*>(VMHandles::AllocateZoneHandle(zone));
+    obj->SetPtr(ptr, default_cid);
+    return *obj;
+  }
+  DART_NOINLINE static Object* ReadOnlyHandleImpl(intptr_t cid) {
+    Object* obj = reinterpret_cast<Object*>(Dart::AllocateReadOnlyHandle());
+    obj->SetPtr(Object::null(), cid);
+    return obj;
+  }
 
   cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); }
   void set_vtable(cpp_vtable value) { *vtable_address() = value; }
@@ -779,13 +787,7 @@
 
   /* Initialize the handle based on the ptr in the presence of null. */
   static void initializeHandle(Object* obj, ObjectPtr ptr) {
-    if (ptr != Object::null()) {
-      obj->SetPtr(ptr);
-    } else {
-      obj->ptr_ = Object::null();
-      Object fake_object;
-      obj->set_vtable(fake_object.vtable());
-    }
+    obj->SetPtr(ptr, kObjectCid);
   }
 
   cpp_vtable* vtable_address() const {
@@ -11611,19 +11613,20 @@
 }
 
 DART_FORCE_INLINE
-void Object::SetPtr(ObjectPtr value) {
-  NoSafepointScope no_safepoint_scope;
+void Object::SetPtr(ObjectPtr value, intptr_t default_cid) {
   ptr_ = value;
   intptr_t cid = value->GetClassIdMayBeSmi();
   // Free-list elements cannot be wrapped in a handle.
   ASSERT(cid != kFreeListElement);
   ASSERT(cid != kForwardingCorpse);
-  if (cid >= kNumPredefinedCids) {
+  if (cid == kNullCid) {
+    cid = default_cid;
+  } else if (cid >= kNumPredefinedCids) {
     cid = kInstanceCid;
   }
   set_vtable(builtin_vtables_[cid]);
 #if defined(DEBUG)
-  if (FLAG_verify_handles && ptr_->IsHeapObject()) {
+  if (FLAG_verify_handles && ptr_->IsHeapObject() && (ptr_ != Object::null())) {
     Heap* isolate_heap = IsolateGroup::Current()->heap();
     // TODO(rmacnak): Remove after rewriting StackFrame::VisitObjectPointers
     // to not use handles.
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index b25b2bb..7c75e83 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1015,6 +1015,8 @@
     kTypeFinalized,
   };
 
+  classid_t id() const { return id_; }
+
  private:
   RAW_HEAP_OBJECT_IMPLEMENTATION(Class);
 
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 4d9a35f..f18f6ab 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -375,17 +375,7 @@
 
 ObjectPtr SnapshotReader::RunDelayedRehashingOfMaps() {
   if (!objects_to_rehash_.IsNull()) {
-    const Library& collections_lib =
-        Library::Handle(zone_, Library::CollectionLibrary());
-    const Function& rehashing_function = Function::Handle(
-        zone_,
-        collections_lib.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
-    ASSERT(!rehashing_function.IsNull());
-
-    const Array& arguments = Array::Handle(zone_, Array::New(1));
-    arguments.SetAt(0, objects_to_rehash_);
-
-    return DartEntry::InvokeFunction(rehashing_function, arguments);
+    return DartLibraryCalls::RehashObjects(thread(), objects_to_rehash_);
   }
   return Object::null();
 }
diff --git a/samples/ffi/resource_management/arena.dart b/samples/ffi/resource_management/arena.dart
deleted file mode 100644
index 8d30382..0000000
--- a/samples/ffi/resource_management/arena.dart
+++ /dev/null
@@ -1,182 +0,0 @@
-// 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 file.
-//
-// Explicit arena used for managing resources.
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-
-/// An [Allocator] which frees all allocations at the same time.
-///
-/// The arena allows you to allocate heap memory, but ignores calls to [free].
-/// Instead you call [releaseAll] to release all the allocations at the same
-/// time.
-///
-/// Also allows other resources to be associated with the arena, through the
-/// [using] method, to have a release function called for them when the arena is
-/// released.
-///
-/// An [Allocator] can be provided to do the actual allocation and freeing.
-/// Defaults to using [calloc].
-class Arena implements Allocator {
-  /// The [Allocator] used for allocation and freeing.
-  final Allocator _wrappedAllocator;
-
-  /// Native memory under management by this [Arena].
-  final List<Pointer<NativeType>> _managedMemoryPointers = [];
-
-  /// Callbacks for releasing native resources under management by this [Arena].
-  final List<void Function()> _managedResourceReleaseCallbacks = [];
-
-  bool _inUse = true;
-
-  /// Creates a arena of allocations.
-  ///
-  /// The [allocator] is used to do the actual allocation and freeing of
-  /// memory. It defaults to using [calloc].
-  Arena([Allocator allocator = calloc]) : _wrappedAllocator = allocator;
-
-  /// Allocates memory and includes it in the arena.
-  ///
-  /// Uses the allocator provided to the [Arena] constructor to do the
-  /// allocation.
-  ///
-  /// Throws an [ArgumentError] if the number of bytes or alignment cannot be
-  /// satisfied.
-  @override
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) {
-    _ensureInUse();
-    final p = _wrappedAllocator.allocate<T>(byteCount, alignment: alignment);
-    _managedMemoryPointers.add(p);
-    return p;
-  }
-
-  /// Registers [resource] in this arena.
-  ///
-  /// Executes [releaseCallback] on [releaseAll].
-  ///
-  /// Returns [resource] again, to allow for easily inserting
-  /// `arena.using(resource, ...)` where the resource is allocated.
-  T using<T>(T resource, void Function(T) releaseCallback) {
-    _ensureInUse();
-    releaseCallback = Zone.current.bindUnaryCallback(releaseCallback);
-    _managedResourceReleaseCallbacks.add(() => releaseCallback(resource));
-    return resource;
-  }
-
-  /// Registers [releaseResourceCallback] to be executed on [releaseAll].
-  void onReleaseAll(void Function() releaseResourceCallback) {
-    _managedResourceReleaseCallbacks.add(releaseResourceCallback);
-  }
-
-  /// Releases all resources that this [Arena] manages.
-  ///
-  /// If [reuse] is `true`, the arena can be used again after resources
-  /// have been released. If not, the default, then the [allocate]
-  /// and [using] methods must not be called after a call to `releaseAll`.
-  ///
-  /// If any of the callbacks throw, [releaseAll] is interrupted, and should
-  /// be started again.
-  void releaseAll({bool reuse = false}) {
-    if (!reuse) {
-      _inUse = false;
-    }
-    // The code below is deliberately wirtten to allow allocations to happen
-    // during `releaseAll(reuse:true)`. The arena will still be guaranteed
-    // empty when the `releaseAll` call returns.
-    while (_managedResourceReleaseCallbacks.isNotEmpty) {
-      _managedResourceReleaseCallbacks.removeLast()();
-    }
-    for (final p in _managedMemoryPointers) {
-      _wrappedAllocator.free(p);
-    }
-    _managedMemoryPointers.clear();
-  }
-
-  /// Does nothing, invoke [releaseAll] instead.
-  @override
-  void free(Pointer<NativeType> pointer) {}
-
-  void _ensureInUse() {
-    if (!_inUse) {
-      throw StateError(
-          'Arena no longer in use, `releaseAll(reuse: false)` was called.');
-    }
-  }
-}
-
-/// Runs [computation] with a new [Arena], and releases all allocations at the
-/// end.
-///
-/// If the return value of [computation] is a [Future], all allocations are
-/// released when the future completes.
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_
-/// cleaned up.
-R using<R>(R Function(Arena) computation,
-    [Allocator wrappedAllocator = calloc]) {
-  final arena = Arena(wrappedAllocator);
-  bool isAsync = false;
-  try {
-    final result = computation(arena);
-    if (result is Future) {
-      isAsync = true;
-      return (result.whenComplete(arena.releaseAll) as R);
-    }
-    return result;
-  } finally {
-    if (!isAsync) {
-      arena.releaseAll();
-    }
-  }
-}
-
-/// Creates a zoned [Arena] to manage native resources.
-///
-/// The arena is availabe through [zoneArena].
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_ cleaned up.
-R withZoneArena<R>(R Function() computation,
-    [Allocator wrappedAllocator = calloc]) {
-  final arena = Arena(wrappedAllocator);
-  var arenaHolder = [arena];
-  bool isAsync = false;
-  try {
-    return runZoned(() {
-      final result = computation();
-      if (result is Future) {
-        isAsync = true;
-        result.whenComplete(arena.releaseAll);
-      }
-      return result;
-    }, zoneValues: {#_arena: arenaHolder});
-  } finally {
-    if (!isAsync) {
-      arena.releaseAll();
-      arenaHolder.clear();
-    }
-  }
-}
-
-/// A zone-specific [Arena].
-///
-/// Asynchronous computations can share a [Arena]. Use [withZoneArena] to create
-/// a new zone with a fresh [Arena], and that arena will then be released
-/// automatically when the function passed to [withZoneArena] completes.
-/// All code inside that zone can use `zoneArena` to access the arena.
-///
-/// The current arena must not be accessed by code which is not running inside
-/// a zone created by [withZoneArena].
-Arena get zoneArena {
-  final List<Arena>? arenaHolder = Zone.current[#_arena];
-  if (arenaHolder == null) {
-    throw StateError('Not inside a zone created by `useArena`');
-  }
-  if (arenaHolder.isNotEmpty) {
-    return arenaHolder.single;
-  }
-  throw StateError('Arena has already been cleared with releaseAll.');
-}
diff --git a/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart b/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
index 52ec773..1640554a 100644
--- a/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
+++ b/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
@@ -9,8 +9,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import '../dylib_utils.dart';
 
 void main() {
diff --git a/samples/ffi/resource_management/arena_sample.dart b/samples/ffi/resource_management/arena_sample.dart
index a12b553..8436c15 100644
--- a/samples/ffi/resource_management/arena_sample.dart
+++ b/samples/ffi/resource_management/arena_sample.dart
@@ -8,8 +8,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import 'utf8_helpers.dart';
 import '../dylib_utils.dart';
 
diff --git a/samples/ffi/resource_management/arena_test.dart b/samples/ffi/resource_management/arena_test.dart
deleted file mode 100644
index 18ffaa9..0000000
--- a/samples/ffi/resource_management/arena_test.dart
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-import 'package:test/test.dart';
-
-// TODO(dacoharkes): After merging into `package:ffi`, roll package in DEPS
-// and remove arena.dart.
-import 'arena.dart';
-
-void main() async {
-  test('sync', () async {
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    using((Arena arena) {
-      arena.using(1234, freeInt);
-      expect(freed.isEmpty, true);
-    });
-    expect(freed, [1234]);
-  });
-
-  test('async', () async {
-    /// Calling [using] waits with releasing its resources until after
-    /// [Future]s complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    Future<int> myFutureInt = using((Arena arena) {
-      return Future.microtask(() {
-        arena.using(1234, freeInt);
-        return 1;
-      });
-    });
-
-    expect(freed.isEmpty, true);
-    await myFutureInt;
-    expect(freed, [1234]);
-  });
-
-  test('throw', () {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    // Resources are freed also when abnormal control flow occurs.
-    var didThrow = false;
-    try {
-      using((Arena arena) {
-        arena.using(1234, freeInt);
-        expect(freed.isEmpty, true);
-        throw Exception('Exception 1');
-      });
-    } on Exception {
-      expect(freed.single, 1234);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-  });
-
-  test(
-    'allocate',
-    () {
-      final countingAllocator = CountingAllocator();
-      // To ensure resources are freed, wrap them in a [using] call.
-      using((Arena arena) {
-        final p = arena<Int64>(2);
-        p[1] = p[0];
-      }, countingAllocator);
-      expect(countingAllocator.freeCount, 1);
-    },
-  );
-
-  test('allocate throw', () {
-    // Resources are freed also when abnormal control flow occurs.
-    bool didThrow = false;
-    final countingAllocator = CountingAllocator();
-    try {
-      using((Arena arena) {
-        final p = arena<Int64>(2);
-        p[0] = 25;
-        throw Exception('Exception 2');
-      }, countingAllocator);
-    } on Exception {
-      expect(countingAllocator.freeCount, 1);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-  });
-
-  test('toNativeUtf8', () {
-    final countingAllocator = CountingAllocator();
-    using((Arena arena) {
-      final p = 'Hello world!'.toNativeUtf8(allocator: arena);
-      expect(p.toDartString(), 'Hello world!');
-    }, countingAllocator);
-    expect(countingAllocator.freeCount, 1);
-  });
-
-  test('zone', () async {
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    withZoneArena(() {
-      zoneArena.using(1234, freeInt);
-      expect(freed.isEmpty, true);
-    });
-    expect(freed.length, 1);
-    expect(freed.single, 1234);
-  });
-
-  test('zone async', () async {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    Future<int> myFutureInt = withZoneArena(() {
-      return Future.microtask(() {
-        zoneArena.using(1234, freeInt);
-        return 1;
-      });
-    });
-
-    expect(freed.isEmpty, true);
-    await myFutureInt;
-    expect(freed.length, 1);
-    expect(freed.single, 1234);
-  });
-
-  test('zone throw', () {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    // Resources are freed also when abnormal control flow occurs.
-    bool didThrow = false;
-    try {
-      withZoneArena(() {
-        zoneArena.using(1234, freeInt);
-        expect(freed.isEmpty, true);
-        throw Exception('Exception 3');
-      });
-    } on Exception {
-      expect(freed.single, 1234);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-    expect(freed.single, 1234);
-  });
-
-  test('allocate during releaseAll', () {
-    final countingAllocator = CountingAllocator();
-    final arena = Arena(countingAllocator);
-
-    arena.using(arena<Uint8>(), (Pointer discard) {
-      arena<Uint8>();
-    });
-
-    expect(countingAllocator.allocationCount, 1);
-    expect(countingAllocator.freeCount, 0);
-
-    arena.releaseAll(reuse: true);
-
-    expect(countingAllocator.allocationCount, 2);
-    expect(countingAllocator.freeCount, 2);
-  });
-}
-
-/// Keeps track of the number of allocates and frees for testing purposes.
-class CountingAllocator implements Allocator {
-  final Allocator wrappedAllocator;
-
-  int allocationCount = 0;
-  int freeCount = 0;
-
-  CountingAllocator([this.wrappedAllocator = calloc]);
-
-  @override
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) {
-    allocationCount++;
-    return wrappedAllocator.allocate(byteCount, alignment: alignment);
-  }
-
-  @override
-  void free(Pointer<NativeType> pointer) {
-    freeCount++;
-    return wrappedAllocator.free(pointer);
-  }
-}
diff --git a/samples/ffi/resource_management/arena_zoned_sample.dart b/samples/ffi/resource_management/arena_zoned_sample.dart
index bb1defa..a26cc75 100644
--- a/samples/ffi/resource_management/arena_zoned_sample.dart
+++ b/samples/ffi/resource_management/arena_zoned_sample.dart
@@ -7,8 +7,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import 'utf8_helpers.dart';
 import '../dylib_utils.dart';
 
diff --git a/samples/ffi/sqlite/lib/src/ffi/arena.dart b/samples/ffi/sqlite/lib/src/ffi/arena.dart
deleted file mode 100644
index 290c2fe..0000000
--- a/samples/ffi/sqlite/lib/src/ffi/arena.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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 file.
-
-import "dart:async";
-import "dart:ffi";
-
-import 'package:ffi/ffi.dart';
-
-/// [Arena] manages allocated C memory.
-///
-/// Arenas are zoned.
-class Arena {
-  Arena();
-
-  List<Pointer<Void>> _allocations = [];
-
-  /// Bound the lifetime of [ptr] to this [Arena].
-  T scoped<T extends Pointer>(T ptr) {
-    _allocations.add(ptr.cast());
-    return ptr;
-  }
-
-  /// Frees all memory pointed to by [Pointer]s in this arena.
-  void finalize() {
-    for (final ptr in _allocations) {
-      calloc.free(ptr);
-    }
-  }
-
-  /// The last [Arena] in the zone.
-  factory Arena.current() {
-    return Zone.current[#_currentArena];
-  }
-}
-
-/// Bound the lifetime of [ptr] to the current [Arena].
-T scoped<T extends Pointer>(T ptr) => Arena.current().scoped(ptr);
-
-class RethrownError {
-  dynamic original;
-  StackTrace originalStackTrace;
-  RethrownError(this.original, this.originalStackTrace);
-  toString() => """RethrownError(${original})
-${originalStackTrace}""";
-}
-
-/// Runs the [body] in an [Arena] freeing all memory which is [scoped] during
-/// execution of [body] at the end of the execution.
-R runArena<R>(R Function(Arena) body) {
-  Arena arena = Arena();
-  try {
-    return runZoned(() => body(arena),
-        zoneValues: {#_currentArena: arena},
-        onError: (error, st) => throw RethrownError(error, st));
-  } finally {
-    arena.finalize();
-  }
-}
diff --git a/samples_2/ffi/resource_management/arena.dart b/samples_2/ffi/resource_management/arena.dart
deleted file mode 100644
index 4916c3a..0000000
--- a/samples_2/ffi/resource_management/arena.dart
+++ /dev/null
@@ -1,184 +0,0 @@
-// 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 file.
-//
-// Explicit arena used for managing resources.
-
-// @dart = 2.9
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-
-/// An [Allocator] which frees all allocations at the same time.
-///
-/// The arena allows you to allocate heap memory, but ignores calls to [free].
-/// Instead you call [releaseAll] to release all the allocations at the same
-/// time.
-///
-/// Also allows other resources to be associated with the arena, through the
-/// [using] method, to have a release function called for them when the arena is
-/// released.
-///
-/// An [Allocator] can be provided to do the actual allocation and freeing.
-/// Defaults to using [calloc].
-class Arena implements Allocator {
-  /// The [Allocator] used for allocation and freeing.
-  final Allocator _wrappedAllocator;
-
-  /// Native memory under management by this [Arena].
-  final List<Pointer<NativeType>> _managedMemoryPointers = [];
-
-  /// Callbacks for releasing native resources under management by this [Arena].
-  final List<void Function()> _managedResourceReleaseCallbacks = [];
-
-  bool _inUse = true;
-
-  /// Creates a arena of allocations.
-  ///
-  /// The [allocator] is used to do the actual allocation and freeing of
-  /// memory. It defaults to using [calloc].
-  Arena([Allocator allocator = calloc]) : _wrappedAllocator = allocator;
-
-  /// Allocates memory and includes it in the arena.
-  ///
-  /// Uses the allocator provided to the [Arena] constructor to do the
-  /// allocation.
-  ///
-  /// Throws an [ArgumentError] if the number of bytes or alignment cannot be
-  /// satisfied.
-  @override
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int alignment}) {
-    _ensureInUse();
-    final p = _wrappedAllocator.allocate<T>(byteCount, alignment: alignment);
-    _managedMemoryPointers.add(p);
-    return p;
-  }
-
-  /// Registers [resource] in this arena.
-  ///
-  /// Executes [releaseCallback] on [releaseAll].
-  ///
-  /// Returns [resource] again, to allow for easily inserting
-  /// `arena.using(resource, ...)` where the resource is allocated.
-  T using<T>(T resource, void Function(T) releaseCallback) {
-    _ensureInUse();
-    releaseCallback = Zone.current.bindUnaryCallback(releaseCallback);
-    _managedResourceReleaseCallbacks.add(() => releaseCallback(resource));
-    return resource;
-  }
-
-  /// Registers [releaseResourceCallback] to be executed on [releaseAll].
-  void onReleaseAll(void Function() releaseResourceCallback) {
-    _managedResourceReleaseCallbacks.add(releaseResourceCallback);
-  }
-
-  /// Releases all resources that this [Arena] manages.
-  ///
-  /// If [reuse] is `true`, the arena can be used again after resources
-  /// have been released. If not, the default, then the [allocate]
-  /// and [using] methods must not be called after a call to `releaseAll`.
-  ///
-  /// If any of the callbacks throw, [releaseAll] is interrupted, and should
-  /// be started again.
-  void releaseAll({bool reuse = false}) {
-    if (!reuse) {
-      _inUse = false;
-    }
-    // The code below is deliberately wirtten to allow allocations to happen
-    // during `releaseAll(reuse:true)`. The arena will still be guaranteed
-    // empty when the `releaseAll` call returns.
-    while (_managedResourceReleaseCallbacks.isNotEmpty) {
-      _managedResourceReleaseCallbacks.removeLast()();
-    }
-    for (final p in _managedMemoryPointers) {
-      _wrappedAllocator.free(p);
-    }
-    _managedMemoryPointers.clear();
-  }
-
-  /// Does nothing, invoke [releaseAll] instead.
-  @override
-  void free(Pointer<NativeType> pointer) {}
-
-  void _ensureInUse() {
-    if (!_inUse) {
-      throw StateError(
-          'Arena no longer in use, `releaseAll(reuse: false)` was called.');
-    }
-  }
-}
-
-/// Runs [computation] with a new [Arena], and releases all allocations at the
-/// end.
-///
-/// If the return value of [computation] is a [Future], all allocations are
-/// released when the future completes.
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_
-/// cleaned up.
-R using<R>(R Function(Arena) computation,
-    [Allocator wrappedAllocator = calloc]) {
-  final arena = Arena(wrappedAllocator);
-  bool isAsync = false;
-  try {
-    final result = computation(arena);
-    if (result is Future) {
-      isAsync = true;
-      return (result.whenComplete(arena.releaseAll) as R);
-    }
-    return result;
-  } finally {
-    if (!isAsync) {
-      arena.releaseAll();
-    }
-  }
-}
-
-/// Creates a zoned [Arena] to manage native resources.
-///
-/// The arena is availabe through [zoneArena].
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_ cleaned up.
-R withZoneArena<R>(R Function() computation,
-    [Allocator wrappedAllocator = calloc]) {
-  final arena = Arena(wrappedAllocator);
-  var arenaHolder = [arena];
-  bool isAsync = false;
-  try {
-    return runZoned(() {
-      final result = computation();
-      if (result is Future) {
-        isAsync = true;
-        result.whenComplete(arena.releaseAll);
-      }
-      return result;
-    }, zoneValues: {#_arena: arenaHolder});
-  } finally {
-    if (!isAsync) {
-      arena.releaseAll();
-      arenaHolder.clear();
-    }
-  }
-}
-
-/// A zone-specific [Arena].
-///
-/// Asynchronous computations can share a [Arena]. Use [withZoneArena] to create
-/// a new zone with a fresh [Arena], and that arena will then be released
-/// automatically when the function passed to [withZoneArena] completes.
-/// All code inside that zone can use `zoneArena` to access the arena.
-///
-/// The current arena must not be accessed by code which is not running inside
-/// a zone created by [withZoneArena].
-Arena get zoneArena {
-  final List<Arena> arenaHolder = Zone.current[#_arena];
-  if (arenaHolder == null) {
-    throw StateError('Not inside a zone created by `useArena`');
-  }
-  if (arenaHolder.isNotEmpty) {
-    return arenaHolder.single;
-  }
-  throw StateError('Arena has already been cleared with releaseAll.');
-}
diff --git a/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart b/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
index 8d1e5c7..89dbd01 100644
--- a/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
+++ b/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
@@ -11,8 +11,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import '../dylib_utils.dart';
 
 void main() {
diff --git a/samples_2/ffi/resource_management/arena_sample.dart b/samples_2/ffi/resource_management/arena_sample.dart
index d8cbe80..d45719b 100644
--- a/samples_2/ffi/resource_management/arena_sample.dart
+++ b/samples_2/ffi/resource_management/arena_sample.dart
@@ -9,8 +9,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import 'utf8_helpers.dart';
 import '../dylib_utils.dart';
 
diff --git a/samples_2/ffi/resource_management/arena_test.dart b/samples_2/ffi/resource_management/arena_test.dart
deleted file mode 100644
index 699d94b..0000000
--- a/samples_2/ffi/resource_management/arena_test.dart
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// @dart = 2.9
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-import 'package:test/test.dart';
-
-// TODO(dacoharkes): After merging into `package:ffi`, roll package in DEPS
-// and remove arena.dart.
-import 'arena.dart';
-
-void main() async {
-  test('sync', () async {
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    using((Arena arena) {
-      arena.using(1234, freeInt);
-      expect(freed.isEmpty, true);
-    });
-    expect(freed, [1234]);
-  });
-
-  test('async', () async {
-    /// Calling [using] waits with releasing its resources until after
-    /// [Future]s complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    Future<int> myFutureInt = using((Arena arena) {
-      return Future.microtask(() {
-        arena.using(1234, freeInt);
-        return 1;
-      });
-    });
-
-    expect(freed.isEmpty, true);
-    await myFutureInt;
-    expect(freed, [1234]);
-  });
-
-  test('throw', () {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    // Resources are freed also when abnormal control flow occurs.
-    var didThrow = false;
-    try {
-      using((Arena arena) {
-        arena.using(1234, freeInt);
-        expect(freed.isEmpty, true);
-        throw Exception('Exception 1');
-      });
-    } on Exception {
-      expect(freed.single, 1234);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-  });
-
-  test(
-    'allocate',
-    () {
-      final countingAllocator = CountingAllocator();
-      // To ensure resources are freed, wrap them in a [using] call.
-      using((Arena arena) {
-        final p = arena<Int64>(2);
-        p[1] = p[0];
-      }, countingAllocator);
-      expect(countingAllocator.freeCount, 1);
-    },
-  );
-
-  test('allocate throw', () {
-    // Resources are freed also when abnormal control flow occurs.
-    bool didThrow = false;
-    final countingAllocator = CountingAllocator();
-    try {
-      using((Arena arena) {
-        final p = arena<Int64>(2);
-        p[0] = 25;
-        throw Exception('Exception 2');
-      }, countingAllocator);
-    } on Exception {
-      expect(countingAllocator.freeCount, 1);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-  });
-
-  test('toNativeUtf8', () {
-    final countingAllocator = CountingAllocator();
-    using((Arena arena) {
-      final p = 'Hello world!'.toNativeUtf8(allocator: arena);
-      expect(p.toDartString(), 'Hello world!');
-    }, countingAllocator);
-    expect(countingAllocator.freeCount, 1);
-  });
-
-  test('zone', () async {
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    withZoneArena(() {
-      zoneArena.using(1234, freeInt);
-      expect(freed.isEmpty, true);
-    });
-    expect(freed.length, 1);
-    expect(freed.single, 1234);
-  });
-
-  test('zone async', () async {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    Future<int> myFutureInt = withZoneArena(() {
-      return Future.microtask(() {
-        zoneArena.using(1234, freeInt);
-        return 1;
-      });
-    });
-
-    expect(freed.isEmpty, true);
-    await myFutureInt;
-    expect(freed.length, 1);
-    expect(freed.single, 1234);
-  });
-
-  test('zone throw', () {
-    /// [using] waits with releasing its resources until after [Future]s
-    /// complete.
-    List<int> freed = [];
-    void freeInt(int i) {
-      freed.add(i);
-    }
-
-    // Resources are freed also when abnormal control flow occurs.
-    bool didThrow = false;
-    try {
-      withZoneArena(() {
-        zoneArena.using(1234, freeInt);
-        expect(freed.isEmpty, true);
-        throw Exception('Exception 3');
-      });
-    } on Exception {
-      expect(freed.single, 1234);
-      didThrow = true;
-    }
-    expect(didThrow, true);
-    expect(freed.single, 1234);
-  });
-
-  test('allocate during releaseAll', () {
-    final countingAllocator = CountingAllocator();
-    final arena = Arena(countingAllocator);
-
-    arena.using(arena<Uint8>(), (Pointer discard) {
-      arena<Uint8>();
-    });
-
-    expect(countingAllocator.allocationCount, 1);
-    expect(countingAllocator.freeCount, 0);
-
-    arena.releaseAll(reuse: true);
-
-    expect(countingAllocator.allocationCount, 2);
-    expect(countingAllocator.freeCount, 2);
-  });
-}
-
-/// Keeps track of the number of allocates and frees for testing purposes.
-class CountingAllocator implements Allocator {
-  final Allocator wrappedAllocator;
-
-  int allocationCount = 0;
-  int freeCount = 0;
-
-  CountingAllocator([this.wrappedAllocator = calloc]);
-
-  @override
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int alignment}) {
-    allocationCount++;
-    return wrappedAllocator.allocate(byteCount, alignment: alignment);
-  }
-
-  @override
-  void free(Pointer<NativeType> pointer) {
-    freeCount++;
-    return wrappedAllocator.free(pointer);
-  }
-}
diff --git a/samples_2/ffi/resource_management/arena_zoned_sample.dart b/samples_2/ffi/resource_management/arena_zoned_sample.dart
index a22e279..54839bd 100644
--- a/samples_2/ffi/resource_management/arena_zoned_sample.dart
+++ b/samples_2/ffi/resource_management/arena_zoned_sample.dart
@@ -9,8 +9,8 @@
 import 'dart:ffi';
 
 import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
 
-import 'arena.dart';
 import 'utf8_helpers.dart';
 import '../dylib_utils.dart';
 
diff --git a/samples_2/ffi/sqlite/lib/src/ffi/arena.dart b/samples_2/ffi/sqlite/lib/src/ffi/arena.dart
deleted file mode 100644
index 56b6fea..0000000
--- a/samples_2/ffi/sqlite/lib/src/ffi/arena.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// 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 file.
-
-// @dart = 2.9
-
-import "dart:async";
-import "dart:ffi";
-
-import 'package:ffi/ffi.dart';
-
-/// [Arena] manages allocated C memory.
-///
-/// Arenas are zoned.
-class Arena {
-  Arena();
-
-  List<Pointer<Void>> _allocations = [];
-
-  /// Bound the lifetime of [ptr] to this [Arena].
-  T scoped<T extends Pointer>(T ptr) {
-    _allocations.add(ptr.cast());
-    return ptr;
-  }
-
-  /// Frees all memory pointed to by [Pointer]s in this arena.
-  void finalize() {
-    for (final ptr in _allocations) {
-      calloc.free(ptr);
-    }
-  }
-
-  /// The last [Arena] in the zone.
-  factory Arena.current() {
-    return Zone.current[#_currentArena];
-  }
-}
-
-/// Bound the lifetime of [ptr] to the current [Arena].
-T scoped<T extends Pointer>(T ptr) => Arena.current().scoped(ptr);
-
-class RethrownError {
-  dynamic original;
-  StackTrace originalStackTrace;
-  RethrownError(this.original, this.originalStackTrace);
-  toString() => """RethrownError(${original})
-${originalStackTrace}""";
-}
-
-/// Runs the [body] in an [Arena] freeing all memory which is [scoped] during
-/// execution of [body] at the end of the execution.
-R runArena<R>(R Function(Arena) body) {
-  Arena arena = Arena();
-  try {
-    return runZoned(() => body(arena),
-        zoneValues: {#_currentArena: arena},
-        onError: (error, st) => throw RethrownError(error, st));
-  } finally {
-    arena.finalize();
-  }
-}
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index b491dd6..7ff2354 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -238,7 +238,10 @@
     final int tmpUsed = _usedData;
     _usedData = 0;
     for (int i = 0; i < tmpUsed; i += 2) {
-      this[_data[i]] = _data[i + 1];
+      final key = _data[i];
+      if (!_HashBase._isDeleted(_data, key)) {
+        this[key] = _data[i + 1];
+      }
     }
   }
 
diff --git a/tests/language/identifier/built_in_illegal_test.dart b/tests/language/identifier/built_in_illegal_test.dart
index 12be975..0fd6336 100644
--- a/tests/language/identifier/built_in_illegal_test.dart
+++ b/tests/language/identifier/built_in_illegal_test.dart
@@ -18,24 +18,8 @@
 // [cfe] Can't use 'dynamic' as a name here.
 class export { }
 //    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-//    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'export'.
-// [error line 19, column 14, length 0]
-// [cfe] Expected ';' after this.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'export' as a name here.
 class external { }
 //    ^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -46,132 +30,47 @@
 // [cfe] Can't use 'factory' as a name here.
 class get { }
 //    ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [cfe] A function declaration needs an explicit list of parameters.
-//    ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'get'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'get' as a name here.
 class interface { }
 //    ^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'interface' as a name here.
 class implements { }
 //    ^^^^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'implements'.
-// [error line 61, column 18, length 0]
-// [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-// [cfe] Expected a type, but got '{'.
-//               ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TYPE_NAME
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'implements' as a name here.
 class import { }
 //    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-//    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'import'.
-// [error line 70, column 14, length 0]
-// [cfe] Expected ';' after this.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'import' as a name here.
 class mixin { }
 //    ^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'mixin'.
-//          ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'mixin' as a name here.
 class library { }
 //    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.LIBRARY_DIRECTIVE_NOT_FIRST
-// [cfe] Expected an identifier, but got 'library'.
-//    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] The library directive must appear before all other directives.
-//            ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected ';' after this.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'library' as a name here.
 class operator { }
 //    ^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'operator' as a name here.
 class part { }
 //    ^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-//    ^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'part'.
-// [error line 123, column 12, length 0]
-// [cfe] Expected ';' after this.
-//         ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-//         ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-//         ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'part' as a name here.
 class set { }
 //    ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [cfe] A function declaration needs an explicit list of parameters.
-//    ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'set'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'set' as a name here.
 class static { }
 //    ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'static' as a name here.
 class typedef { }
 //    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-//    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'typedef'.
-//            ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] A typedef needs an explicit list of parameters.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_TYPEDEF_PARAMETERS
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'typedef' as a name here.
 
 main() {}
diff --git a/tests/language/vm/regression_38412.dart b/tests/language/vm/regression_38412_test.dart
similarity index 100%
rename from tests/language/vm/regression_38412.dart
rename to tests/language/vm/regression_38412_test.dart
diff --git a/tests/language/vm/regression_38436.dart b/tests/language/vm/regression_38436.dart
deleted file mode 100644
index ea5fafd..0000000
--- a/tests/language/vm/regression_38436.dart
+++ /dev/null
@@ -1,2362 +0,0 @@
-// 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 file.
-
-// VMOptions=--optimization_counter_threshold=1
-
-import "package:expect/expect.dart";
-
-// Found by DartFuzzing: would sometimes crash on OSR
-// https://github.com/dart-lang/sdk/issues/38436
-
-import 'dart:async';
-import 'dart:cli';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:core';
-import 'dart:io';
-import 'dart:isolate';
-import 'dart:math';
-import 'dart:typed_data';
-
-String var0 = '';
-bool var1 = true;
-int var2 = -30;
-double var3 = 0.895077679110543;
-String var4 = '';
-List<int> var5 = [55, -70];
-Set<int> var6 = {
-  1024,
-  for (int loc0 in [
-    79,
-    ...[23],
-    ...[90, -89, -24],
-    -90,
-    11,
-    -19,
-    -91
-  ])
-    -55,
-  67,
-  -80,
-  for (int loc0 = 0; loc0 < 29; loc0++) 20,
-  for (int loc0 = 0; loc0 < 24; loc0++) ...{23, -41},
-  ...{
-    -75,
-    128,
-    9223372034707292159,
-    -56,
-    -59,
-    for (int loc0 in {
-      -67,
-      for (int loc1 in [-27, -59, 31, 32, -66, -87]) -9223372036854775680,
-      85,
-      -45,
-      if (false) 70,
-      13,
-      43,
-      48
-    })
-      if (true) 63,
-    ...{-90, -24, -9223372036854743041, -9223372032559808383, 86},
-    -25
-  }
-};
-Map<int, String> var7 = {
-  6: '',
-  ...{56: 'B\u2665pwO', 73: 'ZJDi\u{1f600}m'},
-  ...{73: ')', 14: '93Q'},
-  98: 'xA0jQL',
-  21: ')\u2665TOy',
-  for (int loc0 = 0; loc0 < 82; loc0++) 34: 'Q3\u2665#61',
-  ...{70: 'XXRXl3O', 56: '\u2665lda2Zy', 38: 'Dr#mtz', 6: 'nx'},
-  27: '('
-};
-
-Set<int> foo0() {
-  var3 += ((((var0 + var7[var5[88]])).isEmpty ? true : var1)
-      ? (var1 ? (var3 ?? var3) : var3)
-      : (var1 ? 0.24414824314186978 : var3));
-  var1 ??= true;
-  return {(var2--), Duration.secondsPerHour, var5[var2]};
-}
-
-Map<int, String> foo1(List<int> par1, bool par2) {
-  throw ((-(var3)) * (-(0.943305664017911)));
-}
-
-List<int> foo2(Set<int> par1, List<int> par2, Map<int, String> par3) {
-  switch (-49) {
-    case 4149672951:
-      {
-        for (int loc0 in foo0()) {
-          var6 = var6;
-          try {
-            for (int loc1 = 0; loc1 < 70; loc1++) {
-              switch (((var1
-                      ? ((var1 ? var1 : true) ? Float32x4.xzzw : (--var2))
-                      : (4295032831 % (loc1 + 93))))
-                  .floor()) {
-                case 3294548737:
-                  {
-                    var5[Int32x4.xxwy] ^=
-                        (loc0 * ('!').compareTo(((!(true)) ? var4 : 'S')));
-                  }
-                  break;
-                case 3294548738:
-                  {
-                    var0 = var4;
-                    loc0 <<= Int32x4.zwxz;
-                  }
-                  break;
-              }
-              {
-                int loc2 = 0;
-                do {
-                  var1 = ('Ncb\u2665P9K').isEmpty;
-                  var1 ??= (!(true));
-                } while (++loc2 < 91);
-              }
-            }
-            par3 ??= {
-              44: ((false
-                      ? false
-                      : ((true
-                              ? var7
-                              : {
-                                  17: par3[(var5[-73] - -20)],
-                                  80: var7[
-                                      ((++loc0) ~/ ((!(false)) ? 47 : var2))],
-                                  30: '8Qvz3',
-                                  36: '',
-                                  10: (('@B!0bW6' + var4)).toLowerCase(),
-                                  89: var7[-9223372036854775296],
-                                  4: ') '
-                                }) !=
-                          var7))
-                  ? ((var1 || (!(var1))) ? var7[Float32x4.wxzw] : var7[-7])
-                  : '8h'),
-              for (int loc1 in [
-                (false
-                    ? ((([
-                                  var2,
-                                  -39,
-                                  -74,
-                                  Float32x4.zzxy,
-                                  (~(var5[(67 + -86)])),
-                                  -53
-                                ] +
-                                [(var2++), var5[par2[(--loc0)]]]) !=
-                            [
-                              var5[var5[var5[(loc0++)]]],
-                              loc0,
-                              loc0,
-                              -55,
-                              -69,
-                              loc0
-                            ])
-                        ? (loc0--)
-                        : loc0)
-                    : var2),
-                (75 ^ 93),
-                (false ? var5[Float32x4.xzyw] : (loc0++)),
-                ...[
-                  for (int loc2 in {
-                    -22,
-                    (loc0 ^ 2),
-                    var5[(-((par2[-79] * 86)))],
-                    (++loc0),
-                    ((par2[var5[-45]] ?? 55) >> (true ? Int32x4.wyww : -45)),
-                    (~((++var2))),
-                    par2[var2]
-                  })
-                    (loc0--),
-                  if ((var7[(false ? (-(loc0)) : 19)]).endsWith(var4))
-                    (++var2)
-                  else
-                    (var1 ? loc0 : 39),
-                  (((var2++) & var2) & -26),
-                  if (false) (var1 ? Float32x4.wzzw : var5[129]),
-                  for (int loc2 in {
-                    (loc0--),
-                    (true ? loc0 : loc0),
-                    var2,
-                    var5[(0.4452451921266031).floor()],
-                    (~(-4294967196)),
-                    (loc0--),
-                    (--var2)
-                  })
-                    (var1 ? -30 : (loc0++)),
-                  (~((var1 ? 51 : var2))),
-                  (((var3 ?? pi) < 0.9098824013356337)
-                      ? ((true ? 57 : -48) << (--var2))
-                      : par2[-59])
-                ]
-              ])
-                84: var4,
-              57: var4
-            };
-          } catch (exception, stackTrace) {
-            /**
-           ** Multi-line
-           ** documentation comment.
-           */
-            for (int loc1 = 0; loc1 < 89; loc1++) {
-              switch ((var2--)) {
-                case 3807258589:
-                  {
-                    print(({
-                          (-34 ^
-                              ((false || var1)
-                                  ? 24
-                                  : (-(((-((var1
-                                          ? par2[(-(71))]
-                                          : 9223372032559808768))) +
-                                      (~(loc1))))))),
-                          (~((true ? loc0 : (false ? -75 : 33)))),
-                          Float32x4.zxwz,
-                          (false ? (15 * -83) : (var2--)),
-                          ((var7 !=
-                                  ((true ? var1 : false)
-                                      ? var7
-                                      : {
-                                          99: (true ? 'TobD' : var0),
-                                          59: (var4 ?? var4),
-                                          13: var4,
-                                          58: Uri.encodeFull(var4),
-                                          99: var7[loc1]
-                                        }))
-                              ? loc1
-                              : (var1
-                                  ? ((72 >> -15) ~/ (loc0--))
-                                  : -9223372030412324864)),
-                          32
-                        } ??
-                        par1));
-                  }
-                  break;
-                case 3807258592:
-                  {
-                    var1 ??= true;
-                    try {
-                      var7 = {9: (var1 ? 'ON' : 'f\u{1f600}b')};
-                      par2 = (true
-                          ? var5
-                          : [
-                              DateTime.january,
-                              (40 - (~(var2))),
-                              (var1 ? (--loc0) : 23),
-                              var5[(--var2)]
-                            ]);
-                    } catch (exception, stackTrace) {
-                      var3 /= 0.9998663372091022;
-                    } finally {
-                      par2 ??= ((var1
-                              ? false
-                              : (((par1 ??
-                                          {
-                                            -68,
-                                            86,
-                                            -33,
-                                            var5[(-9223372034707292159 - 90)],
-                                            (24 - (++var2)),
-                                            (-(var2)),
-                                            (loc1 * Int32x4.wyxx)
-                                          }))
-                                      .difference({
-                                    (var1 ? Float32x4.yzyw : (loc1 % loc0)),
-                                    6,
-                                    22,
-                                    91,
-                                    loc0,
-                                    (true ? loc1 : loc1)
-                                  }) ==
-                                  foo0()))
-                          ? par2
-                          : [
-                              (var2--),
-                              (-((++loc0))),
-                              ((-(var5[-52])) ~/
-                                  (true ? Int32x4.wyyy : (loc0--))),
-                              (var3).toInt()
-                            ]);
-                      var5[99] += (~(Float32x4.ywxw));
-                    }
-                  }
-                  break;
-              }
-              var5 = (par2 ??
-                  [
-                    ...[72],
-                    for (int loc2 in {Float32x4.xxwz, loc1})
-                      ((loc0--) ~/ (var2++)),
-                    par2[(++var2)],
-                    (-((--var2))),
-                    (var2++),
-                    -56,
-                    (~((~(loc0)))),
-                    for (int loc2 in {
-                      (-((~(17)))),
-                      Float32x4.zzzw,
-                      Float32x4.zyyz,
-                      (var2--),
-                      (Int32x4.wzwz % 78),
-                      loc0
-                    })
-                      Int32x4.xzzy
-                  ]);
-            }
-            {
-              int loc1 = 0;
-              do {
-                loc0 &= (-(4295000065));
-              } while (++loc1 < 94);
-            }
-          } finally {
-            var3 -= 0.020483900923215503;
-            try {
-              return [
-                ...[
-                  (loc0--),
-                  for (int loc1 in {Float32x4.yxyz})
-                    if (var1) (~(-35)) else loc0,
-                  (++loc0),
-                  for (int loc1 = 0; loc1 < 43; loc1++)
-                    (var5[var5[par2[var5[-9223372032559808384]]]] &
-                        Int32x4.yzxy),
-                  for (int loc1 = 0; loc1 < 98; loc1++) (-((~(Int32x4.xwwy)))),
-                  Float32x4.yzzz
-                ],
-                (-(Int32x4.xzxz))
-              ];
-            } catch (exception, stackTrace) {
-              for (int loc1
-                  in (((((!((((0.13101852551635873 == 0.4825498460563603)
-                                          ? var7
-                                          : var7) !=
-                                      var7)))
-                                  ? 1
-                                  : par2[var2]))
-                              .isEven
-                          ? {
-                              (var2++),
-                              (-48 | -54),
-                              (~(par2[loc0])),
-                              par2[var5[Int32x4.zyzz]],
-                              -2,
-                              (true ? (~((-(((!(false)) ? -11 : var2))))) : 73),
-                              if ((0.15992181539430828).isInfinite) (++var2)
-                            }
-                          : (false ? {-6} : {((++loc0) % 27), 92})) ??
-                      Set.identity())) {
-                var6 ??= foo0();
-              }
-              var5[(~(((true ? -10 : Float32x4.zzwy) -
-                  Duration.millisecondsPerSecond)))] = (~((var2--)));
-            }
-          }
-        }
-        par3.forEach((loc0, loc1) {
-          // Single-line comment.
-          var6 = (var6 ?? foo0());
-          par1 = {
-            if (('X2yPgV').endsWith('b'))
-              Float32x4.yxxy
-            else if (true)
-              Int32x4.xzyw
-            else
-              for (int loc2 = 0; loc2 < 9; loc2++) (++loc0),
-            (4294967551 ?? (-((loc0--)))),
-            (-69 ~/
-                ((!(false))
-                    ? ((((par2[Int32x4.zwzw]).isEven
-                                ? (var3).truncateToDouble()
-                                : 0.14035347150303745))
-                            .isInfinite
-                        ? Int32x4.yzxx
-                        : par2[loc0])
-                    : (var2++))),
-            ((loc0++) - ((++var2) >> (~(par2[(var2--)]))))
-          };
-        });
-      }
-      break;
-    case 4149672955:
-      {
-        par2[((var2 ^ (~((--var2)))) | -98)] *= -62;
-        {
-          int loc0 = 0;
-          do {
-            var0 = par3[(var5[4294967808] >> Float32x4.wwyx)];
-          } while (++loc0 < 46);
-        }
-      }
-      break;
-  }
-  var1 ??= (!((var3).isNaN));
-  return (var1
-      ? par2
-      : Uri.parseIPv6Address(
-          (var1 ? '' : '26DgiI'), (ZLibOption.maxMemLevel % 65), 68));
-}
-
-class X0 {
-  bool fld0_0 = true;
-  Set<int> fld0_1 = {
-    31,
-    if (true) ...{
-      -93,
-      -4294967041,
-      -4294934527,
-      if (false) 92,
-      if (true) 69
-    } else
-      85,
-    ...{
-      ...{73, 27},
-      for (int loc0 in {
-        for (int loc1 = 0; loc1 < 56; loc1++) -36,
-        -23,
-        -99,
-        20,
-        16,
-        11,
-        if (false) -24,
-        if (true) 14
-      })
-        if (false) 69,
-      -9223372032559808513,
-      -9223372036854775553,
-      -9223372036854774784,
-      -22
-    },
-    81,
-    ...{16, if (false) 67 else -30, if (true) 21 else -61, -84},
-    -69
-  };
-
-  List<int> foo0_0(Map<int, String> par1) {
-    if ((var1 ? ((!(fld0_0)) ? true : false) : true)) {
-      return ((var4).trim()).codeUnits;
-    } else {
-      for (int loc0 in var6) {
-        fld0_0 ??= var1;
-        for (int loc1 = 0; loc1 < 57; loc1++) {
-          {
-            Map<int, String> loc2 = Map.identity();
-            par1 ??= Map.unmodifiable(Map.unmodifiable(Map.unmodifiable((true
-                ? loc2
-                : ((true
-                        ? loc2
-                        : foo1(
-                            [var5[-60], loc0, var5[-48], -80, var5[var5[37]]],
-                            var1)) ??
-                    {
-                      60: var0,
-                      93: ((false ? var0 : '') + 'r\u{1f600}2B#p')
-                    })))));
-            var4 = ' ';
-          }
-          try {
-            var5 = foo2(
-                ({loc0, 37, Float32x4.wwyw} ?? var6),
-                ((fld0_0
-                        ? [
-                            for (int loc2 = 0; loc2 < 1; loc2++)
-                              (~(Float32x4.zyzz)),
-                            (~((true
-                                ? (Float32x4.yyzw >> (48 - (-((var2--)))))
-                                : (~(loc0))))),
-                            ((var4 ==
-                                    String.fromEnvironment(
-                                        (var1 ? 'l9FM' : par1[var5[loc0]])))
-                                ? (++loc0)
-                                : 4),
-                            ...[
-                              (~((var5[-9223372032559808448] - (++var2)))),
-                              ...[
-                                for (int loc2 in [
-                                  ((-12 <= 55) ? 9223372032559841280 : loc0),
-                                  var5[var5[(~(var5[var5[loc1]]))]],
-                                  (var1 ? 67 : -74)
-                                ])
-                                  (var5[var2]).sign,
-                                var5[-65],
-                                if (fld0_0)
-                                  var5[(var5[var5[-90]] ~/ 22)]
-                                else
-                                  (-9223372036854775679 + var5[16]),
-                                76,
-                                7
-                              ],
-                              (++var2),
-                              -9223372034707292160,
-                              (var2--),
-                              var5[(var2--)]
-                            ],
-                            loc1,
-                            Float32x4.ywxz,
-                            ((++loc0) + (--loc0)),
-                            for (int loc2 in [
-                              for (int loc3 = 0; loc3 < 4; loc3++) loc1,
-                              ...[
-                                Float32x4.zxwy,
-                                Float32x4.xzwx,
-                                var2,
-                                (++var2),
-                                Int32x4.xzyy,
-                                (var5[loc1] | (true ? -97 : -93)),
-                                Float32x4.xwyz,
-                                ((true || var1)
-                                    ? (~((--loc0)))
-                                    : (~((var5[18] % (-55 + loc0)))))
-                              ],
-                              (~((++loc0))),
-                              -85,
-                              (~((var2++))),
-                              (true
-                                  ? ZLibOption.maxMemLevel
-                                  : var5[var5[var5[var5[var2]]]]),
-                              ((true
-                                      ? ((!((false
-                                              ? (true ? fld0_0 : (!(false)))
-                                              : fld0_0)))
-                                          ? fld0_0
-                                          : (({
-                                                96: var4,
-                                                60: '(0yBGn\u{1f600}',
-                                                57: var4,
-                                                73: var7[-43],
-                                                38: var0
-                                              })
-                                                  .isNotEmpty ||
-                                              ({
-                                                67: var4,
-                                                14: 'M\u{1f600}1HNbP',
-                                                6: 's',
-                                                85: 'uyq',
-                                                95: var7[(-(Int32x4.wwxw))],
-                                                33: ''
-                                              })
-                                                  .isNotEmpty))
-                                      : false)
-                                  ? var2
-                                  : (++var2))
-                            ]) ...[-27]
-                          ]
-                        : [
-                            for (int loc2 = 0; loc2 < 87; loc2++)
-                              (-47 * (~((((--var2) ^ loc0) ?? 78)))),
-                            (-(((({
-                                  14: (var3).toStringAsExponential(
-                                      (false ? var5[-62] : 33)),
-                                  16: '',
-                                  71: var4,
-                                  78: (([var5[(-(91))]] == var5) ? var4 : var0),
-                                  9: par1[loc1],
-                                  51: '-8ht',
-                                  26: ('(2l3\u2665h' ?? var0),
-                                  79: var4
-                                })
-                                        .isNotEmpty
-                                    ? var5[(var2 % loc0)]
-                                    : var2) %
-                                ((!(NetworkInterface.listSupported))
-                                    ? -22
-                                    : ((var1
-                                            ? ([
-                                                  ZLibOption.STRATEGY_DEFAULT,
-                                                  21,
-                                                  loc1,
-                                                  loc1,
-                                                  loc0,
-                                                  5,
-                                                  loc0,
-                                                  98
-                                                ] ==
-                                                Uri.parseIPv4Address(
-                                                    var7[loc1]))
-                                            : var1)
-                                        ? (~((-20 %
-                                            (var5).removeAt(Float32x4.wyxw))))
-                                        : var5[var5[82]]))))),
-                            (-(Float32x4.wwwz)),
-                            Int32x4.wxxz,
-                            ...[
-                              (loc0++),
-                              ...[
-                                (--loc0),
-                                -2,
-                                ZLibOption.DEFAULT_WINDOW_BITS,
-                                -42,
-                                for (int loc2 = 0; loc2 < 2; loc2++) (-(-22)),
-                                (~(-81))
-                              ],
-                              (--var2)
-                            ],
-                            (++var2),
-                            ((!(false)) ? (--var2) : (((~(34)) >> 48) << 79)),
-                            loc1
-                          ]) +
-                    foo2(
-                        foo0(),
-                        ([
-                              (((~(var5[(-(var5[(87 % var5[(++var2)])]))])) ??
-                                      -11) ~/
-                                  (var2++)),
-                              ((((!(var1)) && true) ? loc1 : 98) <<
-                                  ((!((true != (var4 == par1[var5[(~(-83))]]))))
-                                      ? -44
-                                      : var5[88])),
-                              Float32x4.yyyz,
-                              -44,
-                              Int32x4.xzyx,
-                              (++loc0)
-                            ] ??
-                            [
-                              ((foo1([((!(var1)) ? 24 : 81), -93], true))
-                                      .isEmpty
-                                  ? 52
-                                  : (~(Int32x4.zyww))),
-                              Int32x4.xxwz,
-                              (-(-11)),
-                              (loc0--),
-                              ((!(bool.fromEnvironment('U\u2665')))
-                                  ? (loc0++)
-                                  : (++var2))
-                            ]),
-                        {
-                          70: var7[7],
-                          18: '\u2665(#&c\u{1f600}-',
-                          58: 'KuNr',
-                          96: '\u{1f600}2\u2665YY',
-                          94: var0,
-                          28: 'l-'
-                        })),
-                par1);
-            {
-              double loc2 = double.infinity;
-              /*
-               * Multi-line
-               * comment.
-               */
-              return ('a!wNh!').codeUnits;
-            }
-          } catch (exception, stackTrace) {
-            continue;
-          } finally {
-            fld0_0 = (!(fld0_0));
-            var5 ??= ((Uri.parseIPv4Address('H') ??
-                    (foo2({
-                          loc1,
-                          ([
-                                if (((true ? loc0 : (loc0++)) <
-                                    ((!(var1)) ? -90 : Int32x4.yyzx)))
-                                  (~(var2))
-                                else
-                                  for (int loc2 in {
-                                    if (SecurityContext.alpnSupported)
-                                      var2
-                                    else
-                                      Int32x4.wzzy,
-                                    -9223372036754112763,
-                                    (-((var1
-                                        ? var5[62]
-                                        : (-(Float32x4.wzwz))))),
-                                    (~(Float32x4.yxzy))
-                                  })
-                                    ((((true && (false ? fld0_0 : var1))
-                                                ? fld0_0
-                                                : false)
-                                            ? true
-                                            : (fld0_0 && var1))
-                                        ? (true ? (~(loc1)) : var5[-16])
-                                        : loc0),
-                                for (int loc2 = 0; loc2 < 1; loc2++)
-                                  ((false && var1) ? Float32x4.yzyy : 50)
-                              ][var2] *
-                              [
-                                ...[
-                                  (((-10 >> Int32x4.wxzw) *
-                                          ((0.42979687169554437 >=
-                                                  0.17848133910264385)
-                                              ? -4
-                                              : var5[-15])) |
-                                      var5[(loc0++)]),
-                                  ...[
-                                    (('@jcNl\u2665P')
-                                            .compareTo(var7[(loc0--)]) &
-                                        (~((~(loc0))))),
-                                    if ((!(((!(true)) && true)))) 2,
-                                    loc1,
-                                    ((var5[(loc0--)] | -38) & (loc0++)),
-                                    var2,
-                                    (~(-22)),
-                                    if (false) loc0 else 80,
-                                    (--loc0)
-                                  ],
-                                  ...[15],
-                                  ((~((~(-5)))) ^ Int32x4.xxxz),
-                                  79,
-                                  for (int loc2 in [
-                                    (fld0_0 ? -0 : (loc0++)),
-                                    -49,
-                                    for (int loc3 in [
-                                      -16,
-                                      (var2--),
-                                      35,
-                                      ((14 * -68) ~/ Int32x4.wwyy)
-                                    ])
-                                      var5[(fld0_0 ? 28 : (-41 ?? 19))],
-                                    loc0,
-                                    (var3).round(),
-                                    if ((!((!((!(false))))))) loc1,
-                                    (loc0++),
-                                    Int32x4.wyww
-                                  ])
-                                    ((--var2) * var5[(6 & var5[(~(-53))])]),
-                                  (loc0++),
-                                  Float32x4.xwxx
-                                ],
-                                Int32x4.ywyw,
-                                (-(ZLibOption.strategyFixed)),
-                                (80 % (loc0--)),
-                                var5[Int32x4.zxww]
-                              ][var5[50]]),
-                          (false ? -71 : 39),
-                          (var5[-61]).toSigned(loc0),
-                          -50,
-                          4294967296
-                        }, [
-                          (16 *
-                              (~(((var1 ? ZLibOption.STRATEGY_FIXED : -66) *
-                                  4)))),
-                          Float32x4.wwwx
-                        ], {
-                          63: var0,
-                          52: (fld0_0 ? 'uG\u2665V@4' : '62'),
-                          98: var7[var5[-83]],
-                          70: (false
-                              ? 'bSg'
-                              : base64UrlEncode(([
-                                    (~(var2)),
-                                    -52,
-                                    68,
-                                    [
-                                      10,
-                                      loc1,
-                                      92,
-                                      53,
-                                      Int32x4.zzyw,
-                                      (true ? 12 : 19),
-                                      (~(var5[(++var2)]))
-                                    ][-64],
-                                    (++loc0),
-                                    (loc0 << -26)
-                                  ] +
-                                  [
-                                    var5[(--loc0)],
-                                    (((var1 ? var5[var5[(var2--)]] : loc1) +
-                                            (--var2)) <<
-                                        Int32x4.wyyx)
-                                  ]))),
-                          16: 'YsD\u2665\u2665K',
-                          0: var0,
-                          93: var7[(-(var5[-43]))]
-                        }) ??
-                        var5)) ??
-                [
-                  if (fld0_0) -90,
-                  (--var2),
-                  ...[
-                    for (int loc2 in [
-                      (false ? (~(-9)) : -4294901760),
-                      (-(-7)),
-                      -51,
-                      (var1 ? -75 : [Float32x4.wwxw, Int32x4.zxyx][-7]),
-                      Float32x4.xyww,
-                      Int32x4.wwzx,
-                      (loc0++),
-                      (NetworkInterface.listSupported
-                          ? [1000][Float32x4.zzyx]
-                          : -71)
-                    ])
-                      -27,
-                    Float32x4.wyzy,
-                    (++var2)
-                  ]
-                ]);
-          }
-        }
-      }
-      throw Map.unmodifiable(foo1(
-          (MapBase.mapToString(foo1((false ? [var2] : var5), false))).codeUnits,
-          true));
-    }
-  }
-
-  void run() {}
-}
-
-class X1 extends X0 {
-  double fld1_0 = 0.47694301047645304;
-  bool fld1_1 = true;
-
-  Map<int, String> foo1_0(
-      Map<int, String> par1, Map<int, String> par2, double par3) {
-    // Single-line comment.
-    for (int loc0 = 0; loc0 < 91; loc0++) {
-      par2.forEach((loc1, loc2) {
-        {
-          bool loc3 = (fld1_1 || ('U\u2665').isEmpty);
-          var3 /= 0.8504341352135224;
-        }
-      });
-      {
-        int loc1 = 66;
-        while (--loc1 > 0) {
-          if (((!((true || fld1_1))) == true)) {
-            var0 ??= par2[var5[(~((false ? ((!(var1)) ? -95 : var2) : -37)))]];
-            /**
-             ** Multi-line
-             ** documentation comment.
-             */
-            return Map.unmodifiable({
-              55: var4,
-              73: 'c#',
-              17: (fld1_1
-                  ? '7\u{1f600}e'
-                  : ((!(var1)) ? '8E7AK2e' : 'Fm\u{1f600} F')),
-              40: 'mb(\u{1f600}\u2665l',
-              36: Uri.decodeFull((true ? par2[-32769] : var7[Float32x4.zyxz])),
-              51: ((false &&
-                      (((var1 ? true : true) || false)
-                          ? (var7[(var2--)]).isEmpty
-                          : true))
-                  ? (fld1_1
-                      ? (fld1_1 ? (var1).toString() : 'r9M')
-                      : ((true ? (0.2863696758528199 != par3) : false)
-                          ? (fld1_1 ? par1[Int32x4.zwyz] : var4)
-                          : var4))
-                  : var4),
-              8: '6G',
-              62: '+z@Gp'
-            });
-          } else {
-            var5[Int32x4.zzyy] ??= (-(var5[((!(false)) ? loc1 : -34)]));
-            {
-              int loc2 = (-(7));
-              var3 /= (true
-                  ? (-(((-9223372032459145467).isEven
-                      ? fld1_0
-                      : (-((-(0.7008573255099826)))))))
-                  : par3);
-            }
-          }
-          for (int loc2 in foo2(var6, var5, {
-            if (false) 11: par1[((var4).isEmpty ? 55 : -61)],
-            12: 'f5j2v\u{1f600}',
-            52: (((foo1(
-                            (((var1
-                                        ? {var5[-66], var2, 88, 12, 6, -96}
-                                        : (var1
-                                            ? {-25, 84, (var2--), var5[83]}
-                                            : {-36, var5[51], var2})) !=
-                                    {var5[(++var2)]})
-                                ? [-2147483648, 46, loc0, var5[loc0], -21]
-                                : foo2(
-                                    {var5[var5[loc0]]},
-                                    (true
-                                        ? var5
-                                        : [
-                                            -30,
-                                            var5[(-(-42))],
-                                            var2,
-                                            Float32x4.zywx,
-                                            loc1,
-                                            63,
-                                            -25,
-                                            -28
-                                          ]),
-                                    {30: 'j\u2665U', 98: var4})),
-                            false))
-                        .isNotEmpty
-                    ? (false ? fld1_0 : 0.3202297128057393)
-                    : 0.1301025669674245))
-                .toStringAsFixed(((fld1_1 ? 79 : -88) + Int32x4.xyzw)),
-            88: (false ? var7[(var2++)] : (var4 ?? '')),
-            31: (var1
-                ? (var1 ? par2[-87] : (true ? par2[-14] : var4))
-                : ((fld1_1 != true) ? '3nd9t&' : var4)),
-            22: ('(Czi' + '-Y')
-          })) {
-            var7[(loc2--)] = 's';
-          }
-        }
-      }
-    }
-    return par1;
-  }
-
-  String foo1_1(int par1) => var0;
-  Set<int> foo1_2(String par1) {
-    for (int loc0 = 0; loc0 < 58; loc0++) {
-      switch ((~(13))) {
-        case 746492976:
-          {
-            switch (Duration.millisecondsPerDay) {
-              case 3635015902:
-                {
-                  var7[var5[(var5[var2] * (-(var5[Float32x4.yxxz])))]] ??=
-                      (var7[-79] + '(O@');
-                  var7[loc0] ??= String.fromCharCode(var5[(true
-                      ? (var5[((var1 ? true : (false ? fld1_1 : var1))
-                              ? var5[Float32x4.wyyz]
-                              : 73)] ~/
-                          (-(84)))
-                      : -15)]);
-                }
-                break;
-              case 3635015905:
-                {
-                  var1 = (var1
-                      ? (foo1_0(
-                              (((!(false)) || fld1_1) ? var7 : var7),
-                              foo1_0(
-                                  {74: '\u2665e', 10: 'tw8jc0R'},
-                                  foo1_0(
-                                      var7,
-                                      foo1_0(
-                                          ({
-                                                17: var7[Int32x4.zyxy],
-                                                82: var7[64],
-                                                27: 'VEtj',
-                                                90: Uri.encodeQueryComponent(
-                                                    foo1_1(var2)),
-                                                68: 'wew0\u{1f600}'
-                                              } ??
-                                              foo1_0(var7, var7, var3)),
-                                          ({
-                                                65: 'mBeBfUj',
-                                                81: var4,
-                                                35: (var7[-43] + 'l'),
-                                                68: var4
-                                              } ??
-                                              {
-                                                33: ('N\u{1f600}xaY+' ?? par1),
-                                                44: var7[var5[var2]],
-                                                83: var4,
-                                                86: 'k'
-                                              }),
-                                          asin(0.4245871535895427)),
-                                      (-(0.2913717674787144))),
-                                  0.9439800024935644),
-                              (-((true
-                                  ? ((var1 ? false : var1)
-                                      ? 0.09441225978923817
-                                      : 0.42622157485045953)
-                                  : (-(0.29370792038584836)))))))
-                          .isNotEmpty
-                      : (false && true));
-                  var3 += (-(fld1_0));
-                }
-                break;
-            }
-          }
-          break;
-        case 746492979:
-          {
-            var4 = var0;
-            for (int loc1 = 0; loc1 < 88; loc1++) {
-              var2 += 32;
-            }
-          }
-          break;
-      }
-    }
-    {
-      int loc0 = 0;
-      do {
-        return foo0();
-      } while (++loc0 < 57);
-    }
-    return foo0();
-  }
-
-  String foo1_3() {
-    if ((0.42144855521066793).isNegative) {
-      print((false ? (-(fld1_0)) : (-((-((-(0.26854952952179667))))))));
-      switch (30) {
-        case 3830102525:
-          {
-            try {
-              var7.forEach((loc0, loc1) {
-                var1 = (!(true));
-                var6 = (foo1_2(var7[99]) ?? var6);
-              });
-              var6 ??= var6;
-            } catch (exception, stackTrace) {
-              var4 ??= ListBase.listToString([
-                (Duration.microsecondsPerSecond + -82),
-                (true
-                    ? var5[(var2 ~/ (false ? (~((var1 ? 46 : var2))) : var2))]
-                    : (-9223372034707292161 >> var5[var5[-86]])),
-                Float32x4.wxyx
-              ]);
-            } finally {
-              /**
-             ** Multi-line
-             ** documentation comment.
-             */
-              fld1_1 = (var5[var5[var2]]).isOdd;
-            }
-            /*
-           * Multi-line
-           * comment.
-           */
-            if ((SetBase.setToString((fld1_1
-                    ? {12, (fld1_1 ? (-(-22)) : (-(4395630341)))}
-                    : var6)))
-                .isNotEmpty) {
-              try {
-                {
-                  int loc0 = 86;
-                  while (--loc0 > 0) {
-                    {
-                      int loc1 = 0;
-                      do {
-                        var0 = var7[(-(((--var2) &
-                            ((var1 ? (fld1_0).isNaN : true)
-                                ? (-16 | -20)
-                                : ((0.7513819161190503).isNaN ? 45 : loc1)))))];
-
-                        /// Single-line documentation comment.
-                        var5[(true ? loc0 : Float32x4.zxzx)] %= loc0;
-                      } while (++loc1 < 17);
-                    }
-                    for (int loc1 = 0; loc1 < 25; loc1++) {
-                      var5[Float32x4.zywy] <<= Int32x4.ywwx;
-                    }
-                  }
-                }
-              } catch (exception, stackTrace) {
-                var7 = Map.from(foo1_0({
-                  81: (foo1_1(((++var2) * (-(var5[21])))) +
-                      (var7[8] + (var7[var5[53]] ?? var0))),
-                  for (int loc0 in [
-                    (true ? 58 : Float32x4.wyww),
-                    var5[(fld1_1 ? 46 : var2)]
-                  ])
-                    63: var7[(false
-                        ? var5[((24 >> -9223372036854710272) & var2)]
-                        : var5[(80 << var5[-31])])],
-                  67: var0,
-                  1: '3mlOA',
-                  30: ('OQbG').substring((var2--), (--var2)),
-                  93: ((var7[74] ?? var7[(++var2)])).toLowerCase(),
-                  ...{
-                    85: foo1_1(-21),
-                    if ((!((!(false))))) 86: var0,
-                    49: '62+v',
-                    59: foo1_1((--var2)),
-                    for (int loc0 in [
-                      -10,
-                      -65,
-                      (var2++),
-                      (var2++),
-                      ((({
-                                    ((var7[60] == var7[-30])
-                                        ? var5[(-((var2++)))]
-                                        : (var2--))
-                                  } ==
-                                  {var5[var2], -40, -81, (var2++), 93, 26})
-                              ? 38
-                              : (var1 ? var5[97] : -82)) *
-                          (--var2)),
-                      (~((true ? 5 : Float32x4.yxyy))),
-                      (var2++),
-                      ((++var2) << ((var2 % Int32x4.yxxw) >> (++var2)))
-                    ])
-                      54: (var0 + 'ANyqN'),
-                    94: (var1 ? '0T\u2665#w' : (var0).toUpperCase()),
-                    68: '@n',
-                    67: base64UrlEncode(((0.07857744084458451).isInfinite
-                        ? ([
-                              var2,
-                              var5[70],
-                              -32,
-                              Float32x4.yxwz,
-                              31,
-                              (~(var2)),
-                              (var2 ?? (-70 + 57)),
-                              -91
-                            ] +
-                            [
-                              var2,
-                              var5[((!(var1))
-                                  ? var5[(var2 ~/ Float32x4.zwyw)]
-                                  : var5[var5[(var5[(~(var2))] % var2)]])],
-                              (var2 | (false ? (-(var2)) : var5[80])),
-                              (var2--),
-                              DateTime.daysPerWeek,
-                              (var2 ~/ var2)
-                            ])
-                        : (var1 ? var5 : [(var2++)])))
-                  },
-                  if (false)
-                    if (false)
-                      26: (Uri.encodeComponent(foo1_1(var2)) + var7[var5[var2]])
-                    else ...{
-                      4: (double.negativeInfinity).toStringAsFixed(var2),
-                      46: Uri.decodeQueryComponent('bst3jz'),
-                      5: ((true
-                              ? (true ? '(-f' : var7[(-(Int32x4.yzxz))])
-                              : var7[(var5[(fld1_1 ? (var2--) : var2)] >>
-                                  (-((false ? 8589934591 : 33))))]) ??
-                          '4ov'),
-                      37: var7[var5[100663045]],
-                      13: '2B'
-                    }
-                }, {
-                  71: 'Hxbq',
-                  22: ('\u{1f600}Jtj').substring(
-                      (-36 | var5[(~((var2++)))]), 9223372032559874048)
-                }, 0.3710694748818374));
-                fld1_0 ??= 0.010604823956237519;
-              } finally {
-                for (int loc0 = 0; loc0 < 84; loc0++) {
-                  var5[Float32x4.xwwz] <<=
-                      ((((fld1_1 ? false : ('e\u{1f600}O+Vc').isNotEmpty) &&
-                                  (!(fld1_1)))
-                              ? (-73 | var5[Int32x4.yzwx])
-                              : Uint16List.bytesPerElement) ~/
-                          var2);
-                }
-              }
-            }
-          }
-          break;
-        case 3830102528:
-          {
-            fld1_1 ??= true;
-            throw (-((-17).ceilToDouble()));
-          }
-          break;
-      }
-    }
-    return var0;
-  }
-
-  void run() {
-    super.run();
-    {
-      int loc0 = 61;
-      while (--loc0 > 0) {
-        {
-          int loc1 = 77;
-          while (--loc1 > 0) {
-            {
-              int loc2 = 0;
-              do {
-                break;
-              } while (++loc2 < 84);
-            }
-          }
-        }
-        if (((var1 || fld1_1) && (!((!((!((!((!(true)))))))))))) {
-          switch (Int32x4.yyzx) {
-            case 900727295:
-              {
-                /// Single-line documentation comment.
-                fld1_1 ??= (!(true));
-                for (int loc1 in ((var5 ??
-                        Uri.parseIPv6Address(
-                            foo1_3(), var5[(loc0 + var5[4096])], -34)) ??
-                    var5)) {
-                  var7[(38 << (false ? (~(-58)) : Float32x4.yyxy))] =
-                      Uri.decodeFull(foo1_3());
-                  var5 ??= var5;
-                }
-              }
-              break;
-            case 900727304:
-              {
-                fld1_1 =
-                    (SecurityContext.alpnSupported ? (var3).isFinite : var1);
-                fld1_0 += 0.3154406798513474;
-              }
-              break;
-          }
-          var2 ^= var2;
-        } else {
-          if (((-(var3)) <= (-(fld1_0)))) {
-            var6 = foo1_2('0vsDWF9');
-          } else {
-            var6 ??= ((fld1_0 <= 0.16230005903410238)
-                ? ((!((0.5144029832155854 > (0.8199455895430549 / var3))))
-                    ? foo1_2('ken')
-                    : var6)
-                : (fld1_1 ? {56, 6442450945, 2} : {34}));
-          }
-          var5[Float32x4.zwzw] += (true ? var2 : (~(Float32x4.wyyx)));
-        }
-      }
-    }
-  }
-}
-
-class X2 extends X0 with X1 {
-  Set<int> fld2_0 = {for (int loc0 = 0; loc0 < 60; loc0++) -56, 29};
-
-  bool foo2_0(int par1) => var1;
-  bool foo2_1(bool par1) {
-    for (int loc0 in var6) {
-      var2 ~/= ((((((fld2_0 ?? (true ? var6 : var6)) ?? fld2_0))
-                      .union({(~(-21)), 10}) !=
-                  {(var5[90] ~/ (-(-90)))})
-              ? par1
-              : (var7[(~(82))]).isNotEmpty)
-          ? ((~(loc0)) *
-              ((true ? (-4294966272 ?? -21) : var2) +
-                  Duration.millisecondsPerMinute))
-          : (-9223372032559807488 ~/ 4294968296));
-    }
-    if (('DeAm#f' ==
-        ((Uri.encodeQueryComponent((0.3687340601979223).toString()) ??
-                var7[-23]) ??
-            foo1_3()))) {
-      throw (([Float32x4.wyyz, -9223372036854743039])
-              .sublist((--var2), (--var2)) +
-          ((true ? var1 : (!(false)))
-              ? foo2(
-                  foo1_2('JLXt'),
-                  [
-                    var5[Int32x4.zxzx],
-                    Int32x4.xxwy,
-                    (var2++),
-                    Float32x4.yzxx,
-                    (var2++),
-                    -15
-                  ],
-                  foo1_0(var7, var7, 0.7904389283184639))
-              : (var1
-                  ? [Float32x4.yzyz, Int32x4.wxxy, var2, (~(var5[-47]))]
-                  : var5)));
-    } else {
-      var7[var2] ??= ((({
-            ...{
-              for (int loc0 = 0; loc0 < 19; loc0++)
-                36: (var7[var2] ?? (par1 ? ('ccb9z' + 'iM') : var0)),
-              3: ('1sG' + var0),
-              for (int loc0 in {
-                (-(var5[var2])),
-                if (var1) Int32x4.zxxx,
-                -4294967168,
-                -61,
-                (~((par1 ? (~(-70)) : (var2--)))),
-                (-(7)),
-                -96,
-                Uint32List.bytesPerElement
-              })
-                85: var4
-            },
-            if (foo2_0(-91)) 38: (var3).toString() else 30: 'uI\u2665\u{1f600}',
-            72: '@'
-          }[(par1 ? 14 : var2)])
-                  .trim())
-              .substring((36 ~/ var5[(++var2)]), var5[((-(25)) * -53)]) ??
-          foo1_3());
-      /*
-       * Multi-line
-       * comment.
-       */
-      {
-        int loc0 = 0;
-        do {
-          {
-            String loc1 = 'jG7t';
-            /**
-             ** Multi-line
-             ** documentation comment.
-             */
-            {
-              int loc2 = 57;
-              while (--loc2 > 0) {
-                print((var6 ??
-                    (foo1_2(var0)).union(foo1_2(('n' + var7[(++var2)])))));
-              }
-            }
-          }
-        } while (++loc0 < 69);
-      }
-    }
-    return (!(((!((par1 && false)))
-        ? (true && foo2_0(-9223372036854771712))
-        : (!(par1)))));
-  }
-
-  double foo2_2(Map<int, String> par1, int par2) {
-    switch (var2) {
-      case 3816231196:
-        {
-          throw (-(Int32x4.xxwx));
-        }
-        break;
-      case 3816231204:
-        {
-          var7.forEach((loc0, loc1) {
-            switch ((-43 ^ (-(Float32x4.wwxx)))) {
-              case 2839002105:
-                {
-                  var0 ??= (SetBase.setToString(((var1 ? var1 : (true || var1))
-                          ? fld2_0
-                          : {
-                              Int32x4.yyzw,
-                              Int32x4.yyxy,
-                              (2 >> Int32x4.ywzx),
-                              (var1
-                                  ? ((foo2_1(var1) ? 17 : loc0) ~/
-                                      (-(var5[var2])))
-                                  : par2),
-                              Float32x4.zwwx,
-                              par2,
-                              Int32x4.wzzz,
-                              Int32x4.zyzw
-                            })) ??
-                      (loc1 +
-                          var7[((true
-                                  ? (var1 &&
-                                      bool.fromEnvironment(var7[(var2--)]))
-                                  : foo2_1(false))
-                              ? 35
-                              : (-(66)))]));
-                  for (int loc2 = 0; loc2 < 23; loc2++) {
-                    switch ((-73 ^ (Int32x4.xyzz >> Float32x4.yzzz))) {
-                      case 1710454916:
-                        {
-                          var3 = 0.3372913861348876;
-                          print(((-(var3)) * var3));
-                        }
-                        break;
-                      case 1710454922:
-                        {
-                          var4 ??= ((false
-                                  ? (var1
-                                      ? var1
-                                      : (fld2_0 ==
-                                          {
-                                            (false ? -27 : (-(92))),
-                                            loc2,
-                                            var5[loc2],
-                                            (var1
-                                                ? Float32x4.yywy
-                                                : (false ? -74 : 2)),
-                                            ((-(-50)) ^ 32),
-                                            (var2++)
-                                          }))
-                                  : var1)
-                              ? base64UrlEncode([
-                                  for (int loc3 in {
-                                    (-(par2)),
-                                    loc0,
-                                    (-((par2++))),
-                                    Float32x4.yyyx
-                                  })
-                                    (par2--),
-                                  (-((-(var5[var5[var5[-41]]])))),
-                                  if (({
-                                        loc2,
-                                        Duration.microsecondsPerSecond,
-                                        (([
-                                                  (par2++),
-                                                  (-90 ^ -5),
-                                                  var5[(~(0))],
-                                                  loc2
-                                                ] !=
-                                                var5)
-                                            ? -9223372032559808512
-                                            : (par2++))
-                                      } ==
-                                      {
-                                        (var1 ? (-((loc2 % loc2))) : loc2),
-                                        -94,
-                                        -62
-                                      }))
-                                    (++var2),
-                                  loc2,
-                                  for (int loc3 in {
-                                    55,
-                                    (~(var5[var5[(++par2)]])),
-                                    ((var1
-                                            ? (-((++var2)))
-                                            : var5[(true ? var5[68] : 10)]) -
-                                        par2),
-                                    (-(Float32x4.wzxx))
-                                  })
-                                    (Int32x4.yxzy | var5[-1]),
-                                  (foo2_1(false) ? (-(32)) : loc0),
-                                  (--par2),
-                                  if ((!(false))) (var1 ? var5[loc0] : 30)
-                                ])
-                              : ('b1TKp3' ??
-                                  (var4 +
-                                      var7[(~(var5[
-                                          ((var1 ? var2 : loc2) - 72)]))])));
-                        }
-                        break;
-                    }
-                    fld2_0 = ((!((false
-                            ? false
-                            : (false ? (!((var7[-28] != ''))) : var1))))
-                        ? (((var1
-                                    ? (true ? Set.identity() : var6)
-                                    : {
-                                        -63,
-                                        Int32x4.xxyx,
-                                        var5[((var1
-                                                ? (var5[-9223372032559808496] >>
-                                                    59)
-                                                : Int32x4.wxxy) ~/
-                                            var5[var5[-48]])],
-                                        (par2 ?? par2),
-                                        44,
-                                        var5[(var1 ? -26 : (-(par2)))]
-                                      }) ??
-                                ({
-                                      loc2,
-                                      var2,
-                                      ZLibOption.defaultMemLevel,
-                                      (true ? Int32x4.wyzz : 40),
-                                      (false ? loc2 : var5[42]),
-                                      -16
-                                    } ??
-                                    var6)))
-                            .union({loc0, (var2++), (-1 * (~(var2)))})
-                        : (bool.fromEnvironment((var3)
-                                .toStringAsFixed(Uint64List.bytesPerElement))
-                            ? fld2_0
-                            : {
-                                (par2++),
-                                (var1 ? loc2 : (++var2)),
-                                ((false || false) ? Int32x4.xyyz : (++par2)),
-                                var5[-98],
-                                Float32x4.zwwy,
-                                var5[var5[62]],
-                                (~(Float32x4.ywww))
-                              }));
-                  }
-                }
-                break;
-              case 2839002106:
-                {
-                  for (int loc2 = 0; loc2 < 13; loc2++) {
-                    {
-                      int loc3 = 0;
-                      do {
-                        switch ((loc3 | -76)) {
-                          case 2164097105:
-                            {
-                              var4 ??= (var1).toString();
-                              var5 = ((!(((true || var1) !=
-                                      (false ? var1 : (!(foo2_1(var1)))))))
-                                  ? foo2(
-                                      ((var6).union(foo1_2(loc1))).toSet(),
-                                      [
-                                        -67,
-                                        if (((var1
-                                                ? 59
-                                                : (-((false ? -97 : par2)))) !=
-                                            (false
-                                                ? ((var1 || var1)
-                                                    ? (-((par2++)))
-                                                    : 4)
-                                                : (--var2)))) ...[
-                                          ((92 ~/ Int32x4.yzwx) << 70),
-                                          Float32x4.xxyz,
-                                          Int8List.bytesPerElement
-                                        ] else
-                                          69
-                                      ],
-                                      var7)
-                                  : foo2(foo0(), Uri.parseIPv4Address(var0),
-                                      var7));
-                            }
-                            break;
-                          case 2164097111:
-                            {
-                              var4 ??= var7[Float32x4.zxzw];
-                            }
-                            break;
-                        }
-                      } while (++loc3 < 96);
-                    }
-                    fld2_0 = var6;
-                  }
-                }
-                break;
-            }
-          });
-          for (int loc0 in (foo2_1((var5 !=
-                  (false
-                      ? [par2]
-                      : foo2(
-                          var6,
-                          [20],
-                          ({
-                                21: var0,
-                                68: foo1_3(),
-                                24: ('1MF' + '8s\u2665yx+ ')
-                              } ??
-                              {
-                                9: var7[var2],
-                                48: 'mB(wW\u{1f600}',
-                                74: 'ojEw\u{1f600}\u{1f600}',
-                                80: '\u26655E-hj\u{1f600}',
-                                10: (false ? 'W7i5\u2665YX' : '! Ed9&'),
-                                88: (false ? var0 : 'N0D9(H\u{1f600}'),
-                                5: 'QZ'
-                              })))))
-              ? foo1_2('XP')
-              : {
-                  if ((foo2_1(var1)
-                      ? (foo2_1((fld2_0).add(-9223372036854774784)) || var1)
-                      : var1))
-                    (~(Float32x4.zyww)),
-                  Float32x4.xwyw,
-                  ((((var1 ? true : var1) ? 0.3447071353935154 : var3) >=
-                          0.5995056331958718)
-                      ? ZLibOption.MAX_LEVEL
-                      : 16),
-                  9223372032559841279,
-                  Int32x4.zwyy
-                })) {
-            for (int loc1 = 0; loc1 < 19; loc1++) {
-              var1 = (!(bool.fromEnvironment(MapBase.mapToString({
-                1: '4',
-                56: var0,
-                85: var0,
-                51: var7[-4],
-                42: ((!((!(false)))) ? par1[72] : MapBase.mapToString(var7))
-              }))));
-            }
-          }
-        }
-        break;
-    }
-    print((((var1 ? 'kP' : (var1 ? 'irjF' : var7[var5[90]])) ??
-            ((!(false)) ? 'vWa\u{1f600}' : var0)) +
-        'xzpK'));
-    return var3;
-  }
-
-  void run() {
-    super.run();
-    {
-      int loc0 = (~(-24));
-      var0 ??= ((false
-              ? foo2_1((true
-                  ? (var1 && (var2).isOdd)
-                  : (('dTYR' ?? 'G\u{1f600}P14\u{1f600}a')).isEmpty))
-              : ((var1 && true) || (!(var1))))
-          ? (var4 ?? 'I')
-          : 'QO');
-    }
-  }
-}
-
-class X3 extends X1 {
-  Map<int, String> fld3_0 = {
-    if (true) if (false) 45: 'ynEn\u2665nG' else 70: 'c\u{1f600}mN4\u2665a',
-    if (true) 30: '6\u2665P!Pbi',
-    81: 't',
-    82: '17fx#!',
-    92: 'H',
-    if (true) 69: ')Ls'
-  };
-  Set<int> fld3_1 = {27};
-  int fld3_2 = 34;
-
-  String foo1_1(int par1) {
-    throw (ListBase.listToString(foo2({
-          -4294967169,
-          par1
-        }, [
-          -97,
-          (var5[(var1 ? var5[87] : Int32x4.yxxy)] * Int32x4.yyxx),
-          var2,
-          (false ? 10 : var5[var5[(par1++)]])
-        ], var7)) ??
-        'o');
-  }
-
-  bool foo3_0(double par1) {
-    {
-      Set<int> loc0 = (true ? fld3_1 : var6);
-      {
-        Set<int> loc1 = (false
-            ? foo0()
-            : {
-                for (int loc2 in [var2, (-(Float32x4.xzzw))])
-                  if (false) Float32x4.wxyz else (++fld3_2),
-                ((var1
-                        ? 5
-                        : var5[(((var5[(true ? fld3_2 : fld3_2)] ~/ 48) | 56) %
-                            var5[-4])]) ??
-                    (var2++))
-              });
-        for (int loc2 = 0; loc2 < 90; loc2++) {
-          {
-            int loc3 = 95;
-            while (--loc3 > 0) {
-              return (((0.7073184699576396).isNaN
-                      ? var7
-                      : (Map.of(Map.from(var7)) ??
-                          Map.unmodifiable(Map.identity()))))
-                  .isEmpty;
-            }
-          }
-          try {
-            var1 = (((12 >= Int32x4.ywxx) ? true : true)
-                ? false
-                : (((var1 ? fld3_0[Int32x4.wyxy] : '') ?? var7[Float32x4.xwwx]))
-                    .isEmpty);
-            var2 |= ((fld3_2++) ?? (fld3_2--));
-          } catch (exception, stackTrace) {
-            var5 ??= var5;
-          } finally {
-            var4 = 'A';
-            break;
-          }
-        }
-        {
-          double loc2 = (-(exp((acos(0.06129144867031855) ?? var3))));
-          fld3_0 = (((({Int32x4.ywxw, 6442450943}).union(foo0()))
-                      .add((++fld3_2))
-                  ? false
-                  : false)
-              ? foo1_0(
-                  (foo1([var5[var2], var5[75], 42], false) ?? var7), var7, loc2)
-              : (var1
-                  ? {
-                      for (int loc3 = 0; loc3 < 48; loc3++) 78: 'dWek8',
-                      40: fld3_0[(var5[-81] & Int32x4.xzyw)],
-                      73: (' )G\u2665-d(').substring(
-                          (NetworkInterface.listSupported
-                              ? (~(((++var2) ?? (fld3_2 * fld3_2))))
-                              : var5[-75]),
-                          fld3_2),
-                      74: ('k9O\u2665').trimLeft(),
-                      88: var7[(++var2)],
-                      for (int loc3 = 0; loc3 < 27; loc3++)
-                        60: ((false || var1) ? var7[46] : var0),
-                      99: ((var3).isNaN
-                          ? (Uri.decodeComponent(foo1_3()) + var4)
-                          : var7[-77]),
-                      92: (true
-                          ? ('').padLeft(82, '')
-                          : ('' ?? var7[(false ? 94 : 58)]))
-                    }
-                  : var7));
-
-          /// Single-line documentation comment.
-          fld3_1 ??= ((loc1 ?? foo1_2(fld3_0[(var2--)])) ?? foo1_2(foo1_3()));
-        }
-      }
-    }
-    return (var1 ? (!(var1)) : var1);
-  }
-
-  String foo3_1(int par1, String par2, String par3) {
-    switch (var2) {
-      case 3768780679:
-        {
-          {
-            int loc0 = (++par1);
-            var0 ??= ListBase.listToString(var5);
-            if (true) {
-              var5 = [
-                Float32x4.xyxz,
-                (var1
-                    ? ((!(false)) ? Float32x4.xyyw : (++fld3_2))
-                    : var5[fld3_2]),
-                par1,
-                (~(Float32x4.zxwy)),
-                if ((foo3_0(var3)
-                    ? ([
-                          (++fld3_2),
-                          ...[
-                            ...[
-                              var5[(true ? Float32x4.xxzx : (--fld3_2))],
-                              54,
-                              (-((((foo3_0(var3)
-                                          ? (!(false))
-                                          : ((var1 ? (~(-63)) : var5[-40]))
-                                              .isOdd)
-                                      ? ((0.8329420640871532 != var3) && var1)
-                                      : var1)
-                                  ? 43
-                                  : (Float32x4.zxxy - Float32x4.zxxw)))),
-                              Int32x4.zzwx
-                            ],
-                            ...[
-                              (var5[-48] * (fld3_2++)),
-                              Int32x4.wyyw,
-                              (~(-76)),
-                              ((par1).isEven ? (--par1) : -13),
-                              Float32x4.wxyx
-                            ],
-                            for (int loc1 in [
-                              (++fld3_2),
-                              -15,
-                              (SecurityContext.alpnSupported
-                                  ? Int32x4.yxyw
-                                  : Float32x4.yxxw),
-                              if (true) var5[(var1 ? -32768 : par1)],
-                              ((--var2) ^ (++fld3_2))
-                            ])
-                              (fld3_2--),
-                            93,
-                            (~((-(ZLibOption.minMemLevel)))),
-                            ((Float32x4.zyzx >> -14) & Float32x4.yxxw)
-                          ],
-                          (var1
-                              ? (++par1)
-                              : ((var3).isInfinite ? Float32x4.zwww : -84)),
-                          var2
-                        ] ==
-                        [
-                          9223372032559808639,
-                          -85,
-                          Float32x4.wzyy,
-                          loc0,
-                          [
-                            ((-(36)) <<
-                                ((var1
-                                        ? var1
-                                        : ({
-                                            45: 'ay',
-                                            7: par3,
-                                            69: Uri.decodeFull(
-                                                (foo1_3() + 'LX+'))
-                                          })
-                                            .isEmpty)
-                                    ? (~((13 | 64)))
-                                    : (-(var2)))),
-                            (par1--),
-                            ((~((true ? (var2--) : -31))) >> 9),
-                            (-((35 % (~(var5[var5[39]]))))),
-                            4395630341,
-                            Int32x4.zxxy,
-                            if ((var1
-                                ? foo3_0(var3)
-                                : (0.6201792653929837).isInfinite)) ...[
-                              Int32x4.wxxx,
-                              (fld3_2 * (--fld3_2)),
-                              var5[((~(var5[var5[var5[(-(-23))]]])) +
-                                  (~(-4294966296)))],
-                              loc0,
-                              for (int loc1 in [var5[Float32x4.yzww]]) 17,
-                              (~(var5[(++par1)])),
-                              -58,
-                              ((!(('').isEmpty))
-                                  ? ((-(Float32x4.ywwx)) * (++par1))
-                                  : Int32x4.yxyz)
-                            ]
-                          ][((var1 ? var1 : var1) ? var5[0] : par1)],
-                          ((~(70)) +
-                              (par1 + (-77 | ZLibOption.MAX_WINDOW_BITS))),
-                          (-(Int32x4.zywy)),
-                          (~(Float32x4.zywz))
-                        ])
-                    : (var1 ? true : true)))
-                  fld3_2
-              ];
-            }
-          }
-          var3 *= ((var3 + 0.6761038672016147) ?? (-(double.minPositive)));
-        }
-        break;
-      case 3768780685:
-        {
-          {
-            int loc0 = 67;
-            while (--loc0 > 0) {
-              {
-                Map<int, String> loc1 = foo1(
-                    Uri.parseIPv4Address(('E Hu\u{1f600}' + '\u2665l&#!')),
-                    (!(false)));
-                var3 ??= var3;
-              }
-              var5 = (var5 +
-                  ((({
-                    79: (foo1_3() ?? 'eD'),
-                    73: (var1 ? par2 : ' xdXgW'),
-                    4: 'pUc(q',
-                    15: 'K\u{1f600}hmdZ\u2665',
-                    95: (var1 ? var4 : (var1 ? fld3_0[-45] : foo1_3()))
-                  })
-                              .isNotEmpty
-                          ? ((var1 ? var1 : (var1 ? var1 : foo3_0(var3))) ||
-                              foo3_0(var3))
-                          : (!(((false || true) ? var1 : false))))
-                      ? [
-                          (~((-61 ??
-                              (~((-(var5[(var1 ? fld3_2 : var5[34])]))))))),
-                          (var5[13] ^ (var1 ? 35 : -76)),
-                          (-(((~(-47)) ~/ (--par1))))
-                        ]
-                      : foo2({
-                          -36,
-                          ((0.3910802543332075).isNegative
-                              ? (~((var2++)))
-                              : (var2 &
-                                  (var1
-                                      ? [
-                                          -67,
-                                          (fld3_2++),
-                                          if ((!((!((var1
-                                              ? true
-                                              : (!(false))))))))
-                                            (false
-                                                ? (~(Float32x4.wyyy))
-                                                : (var1
-                                                    ? (1 ^ (-(16)))
-                                                    : var5[94])),
-                                          fld3_2,
-                                          var2,
-                                          67
-                                        ][-12]
-                                      : Float32x4.wwxw))),
-                          26,
-                          [
-                            (var1
-                                ? (--fld3_2)
-                                : (((!(var1))
-                                        ? (~((foo3_0(0.9959805940480148)
-                                            ? (33 ~/ loc0)
-                                            : Float32x4.xywx)))
-                                        : (15 % var5[var5[-47]])) <<
-                                    -86)),
-                            (-((~(RawSocketOption.levelIPv6))))
-                          ][var5[var5[(ZLibOption.maxMemLevel ^ -3)]]],
-                          -29
-                        }, [
-                          (var1 ? Float32x4.wxxw : (--par1)),
-                          ...[
-                            52,
-                            (-((true ? -12 : 44))),
-                            var5[((var5[34] * 30) >> 4294967360)],
-                            ((--var2) <<
-                                (true
-                                    ? var5[(-4 ~/ Int32x4.yyww)]
-                                    : (bool.fromEnvironment(var7[fld3_2])
-                                        ? (~((false ? loc0 : var5[(++par1)])))
-                                        : ((!(false))
-                                            ? (var5[var5[loc0]] ^ Int32x4.wxzz)
-                                            : par1)))),
-                            (((false ? var0 : '') !=
-                                    (true
-                                        ? MapBase.mapToString(({
-                                              7: 'WTT7\u{1f600}e3',
-                                              22: '',
-                                              36: (var1
-                                                  ? 'F'
-                                                  : (var1 ? fld3_0[var2] : '')),
-                                              37: 'l@a',
-                                              85: (var1 ? '' : par3),
-                                              82: 'eb',
-                                              37: '11',
-                                              41: var7[94]
-                                            } ??
-                                            var7))
-                                        : (var1 ? var4 : par2)))
-                                ? (~(var5[-71]))
-                                : 9),
-                            32,
-                            if (bool.fromEnvironment(
-                                fld3_0[var5[ZLibOption.MIN_MEM_LEVEL]]))
-                              var5[(--par1)],
-                            (par1--)
-                          ],
-                          for (int loc1 in {
-                            for (int loc2 in [
-                              ((!((Map.unmodifiable({
-                                        86: var4,
-                                        31: var0,
-                                        85: (par3 + ''),
-                                        91: (var1
-                                            ? fld3_0[4]
-                                            : '!M\u{1f600}!vOw'),
-                                        45: '7T',
-                                        19: 'fha+',
-                                        38: (false ? '' : fld3_0[70])
-                                      }) !=
-                                      {
-                                        92: '@4',
-                                        41: var7[loc0],
-                                        24: (foo3_0(0.06591134699771606)
-                                            ? '\u2665)\u2665NnO+'
-                                            : 'JM3Hn\u{1f600}'),
-                                        26: 'aQ51Yz',
-                                        64: var7[
-                                            (-((var5[18] & (36).bitLength)))]
-                                      })))
-                                  ? (89 ^
-                                      (((44 - par1) * -9223372034707292160) &
-                                          var5[128]))
-                                  : -46),
-                              (fld3_2++),
-                              ((([
-                                            -89,
-                                            var2,
-                                            (fld3_2++),
-                                            var5[-4294967264],
-                                            -25,
-                                            var2,
-                                            var5[((!(var1))
-                                                ? (var1 ? -3 : -81)
-                                                : var5[loc0])],
-                                            (var1
-                                                ? par1
-                                                : ((~((fld3_2++))) >>
-                                                    (-((-(-64))))))
-                                          ] ??
-                                          foo2(var6, [
-                                            4295032831
-                                          ], {
-                                            53: foo1_3(),
-                                            94: var7[13],
-                                            82: var7[-60],
-                                            30: fld3_0[-9223372032559742976],
-                                            98: foo1_3()
-                                          })) !=
-                                      var5)
-                                  ? (--par1)
-                                  : loc0),
-                              56,
-                              if (((var5[21]).isOdd ? true : false))
-                                ((++par1) -
-                                    (var1 ? var5[DateTime.january] : (par1--)))
-                              else
-                                fld3_2,
-                              if ((!(var1))) 74,
-                              (par1 ^ var5[26])
-                            ])
-                              (~(var2)),
-                            for (int loc2 in {
-                              6442450944,
-                              Float32x4.ywyw,
-                              -9223372032559804416,
-                              (~(var5[var5[26]])),
-                              Float32x4.xyxy,
-                              (--fld3_2),
-                              var5[98]
-                            })
-                              if (false) -26,
-                            (~((-((-((-48 - -9223372036854775680))))))),
-                            ...{
-                              (-((var2--))),
-                              if (true) -100663046 else var5[(~(par1))]
-                            },
-                            (~((~((fld3_2++))))),
-                            ...{
-                              ((List.filled(0, 26) ==
-                                      [
-                                        (-(-52)),
-                                        -29,
-                                        (--fld3_2),
-                                        (0.22302566014161784).floor(),
-                                        (par1 % -56)
-                                      ])
-                                  ? (var1
-                                      ? (var2++)
-                                      : ((!((!(true))))
-                                          ? ((var1 || foo3_0(var3)) ? 76 : par1)
-                                          : (-(-13))))
-                                  : ((foo1_0((var1 ? fld3_0 : var7), var7,
-                                              var3))
-                                          .isEmpty
-                                      ? 97
-                                      : (var1 ? var2 : -9223372036854774784))),
-                              (-(Float32x4.zyzw)),
-                              (--var2)
-                            }
-                          })
-                            ((var3 < (-(var3))) ? -9223372032559808000 : -71),
-                          -100663046,
-                          if ((var1
-                              ? bool.fromEnvironment('vV0')
-                              : (Map.from({
-                                  78: '',
-                                  49: '\u{1f600}\u{1f600}4Mz',
-                                  70: fld3_0[par1],
-                                  95: '\u{1f600}2tIYqE',
-                                  43: (true ? 'baf-\u2665' : var4),
-                                  30: var7[(-((-68 % ZLibOption.defaultLevel)))]
-                                }))
-                                  .isNotEmpty))
-                            -13
-                          else
-                            (var1 ? (-((-(var5[56])))) : (var2--)),
-                          (~((~((-((var2++)))))))
-                        ], {
-                          88: ('bV\u{1f600}iqO').toLowerCase(),
-                          42: '(hZ4S',
-                          37: var7[-79],
-                          36: var0
-                        })));
-            }
-          }
-          {
-            int loc0 = 0;
-            do {
-              try {
-                print(foo2(
-                    fld3_1,
-                    (fld3_0[var5[-12]]).codeUnits,
-                    (({
-                              36: var4,
-                              30: '0\u{1f600}EYWqr',
-                              66: 'S',
-                              3: '+J3Gj',
-                              71: '\u{1f600}-q',
-                              13: 'V3QN',
-                              34: ''
-                            } ??
-                            {
-                              54: fld3_0[(var2--)],
-                              74: (foo3_0(
-                                      ((-(var3)) * (0.8613045491468889 + var3)))
-                                  ? var7[78]
-                                  : (((var1 ? (47).isEven : var1) ? true : true)
-                                      ? (var4 ?? 'UzK')
-                                      : 'fH1smd')),
-                              12: '\u2665',
-                              18: 'V'
-                            }) ??
-                        var7)));
-              } catch (exception, stackTrace) {
-                fld3_1 = foo0();
-                for (int loc1 = 0; loc1 < 29; loc1++) {
-                  if (var1) {
-                    {
-                      int loc2 = 0;
-                      do {
-                        var5 = (foo3_0(var3)
-                            ? [
-                                ((--par1) ^ (~(93))),
-                                if ((var3).isFinite)
-                                  for (int loc3 in [
-                                    -5,
-                                    Int32x4.zxyy,
-                                    (true
-                                        ? var5[var5[(var1 ? -23 : var5[68])]]
-                                        : -99),
-                                    ((!(var1))
-                                        ? ((false
-                                                ? var1
-                                                : foo3_0(0.3133865362301862))
-                                            ? Float64List.bytesPerElement
-                                            : [
-                                                Float32x4.yxzx,
-                                                if (var1)
-                                                  (false ? 40 : 85)
-                                                else
-                                                  ((String.fromCharCode((foo3_0(
-                                                                  0.414460580942719)
-                                                              ? var5[-14]
-                                                              : var2)) ==
-                                                          'mII\u{1f600}zkM')
-                                                      ? var5[(~(-51))]
-                                                      : ((var1
-                                                              ? (!(var1))
-                                                              : var1)
-                                                          ? var5[0]
-                                                          : (-(var2))))
-                                              ][5])
-                                        : fld3_2),
-                                    (par1++),
-                                    -72,
-                                    Int32x4.zzxy
-                                  ])
-                                    Int32x4.zyww
-                                else
-                                  Int32x4.wxyz
-                              ]
-                            : [
-                                ...[
-                                  if ((false ? false : var1)) (-(52)),
-                                  (++par1),
-                                  (par1--),
-                                  (-((-([
-                                    (((var0 + fld3_0[(++var2)])).isNotEmpty
-                                        ? Float32x4.yzxw
-                                        : var5[35])
-                                  ][loc0])))),
-                                  (~(-17))
-                                ],
-                                38,
-                                ...[
-                                  (var1 ? (par1++) : -10),
-                                  if (true) -62 else var2,
-                                  if ((!((var3).isFinite)))
-                                    Int32x4.xxzz
-                                  else
-                                    -45
-                                ],
-                                if ((true || false)) (-(-93)),
-                                (--fld3_2),
-                                ([
-                                      (fld3_2--),
-                                      if ((base64UrlEncode(var5) == 'RY'))
-                                        (++fld3_2)
-                                      else
-                                        -9223372032559808383,
-                                      Float32x4.zyxy,
-                                      loc0,
-                                      -55,
-                                      if (('O \u{1f600}e\u2665').isNotEmpty)
-                                        if (var1)
-                                          (--var2)
-                                        else
-                                          for (int loc3 in {
-                                            loc0,
-                                            (~((--var2))),
-                                            (-(-35)),
-                                            Float32x4.xxyw,
-                                            65,
-                                            -4,
-                                            -4194304251,
-                                            -54
-                                          })
-                                            (((0.671280258888436 ==
-                                                        (0.16535430333243706 *
-                                                            0.18316039550464436)) ||
-                                                    var1)
-                                                ? var5[12]
-                                                : (~((--var2))))
-                                      else if (false)
-                                        if (var1) (-(Int32x4.zzwx)) else loc2
-                                      else
-                                        Int32x4.yzyw
-                                    ][loc1] *
-                                    (--par1)),
-                                (-71 * 38)
-                              ]);
-                      } while (++loc2 < 89);
-                    }
-                  } else {
-                    {
-                      int loc2 = 0;
-                      do {
-                        fld3_0 ??= ((((Map.unmodifiable(var7)).isEmpty ||
-                                    (!(({
-                                      11: 'v+MHeiB',
-                                      48: var7[(true
-                                          ? ((var2--) ?? fld3_2)
-                                          : var5[(fld3_2--)])],
-                                      52: '(('
-                                    })
-                                        .isEmpty)))
-                                ? fld3_0
-                                : {
-                                    39: foo1_3(),
-                                    21: 'IXzJ+',
-                                    76: 'K2C#',
-                                    16: ('\u{1f600}Gh' + '#i'),
-                                    62: foo1_3(),
-                                    19: foo1_3(),
-                                    32: par3,
-                                    for (int loc3 in [
-                                      (par1--),
-                                      -66,
-                                      -96,
-                                      -35,
-                                      Float32x4.zzyz
-                                    ])
-                                      72: 'y vxi'
-                                  }) ??
-                            {13: par2});
-                        switch (4096) {
-                          case 3159134388:
-                            {
-                              /// Single-line documentation comment.
-                              {
-                                int loc3 = 0;
-                                do {
-                                  fld3_0 ??= foo1(
-                                      var5,
-                                      ((((true ? par2 : var7[var5[loc1]]))
-                                                  .isNotEmpty
-                                              ? 9
-                                              : -55) !=
-                                          var5[-36]));
-                                  fld3_1 = foo0();
-                                } while (++loc3 < 79);
-                              }
-                            }
-                            break;
-                          case 3159134393:
-                            {
-                              throw Int32x4.zxxw;
-                            }
-                            break;
-                        }
-                      } while (++loc2 < 77);
-                    }
-                  }
-                }
-              }
-            } while (++loc0 < 98);
-          }
-        }
-        break;
-    }
-    /*
-     * Multi-line
-     * comment.
-     */
-    return ((0.7728524536008519).isNaN ? 'BjzeSsJ' : foo1_3());
-  }
-
-  void run() {
-    super.run();
-    var5 ??= var5;
-    print({4294968296});
-  }
-}
-
-main() {
-  int count = 0;
-  try {
-    foo0();
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    foo1(('  MQz').codeUnits, var1);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    foo2(
-        (var6).toSet(),
-        (var1
-            ? [-9223372036854775681, -66, 9223372032559874047, -3, 74]
-            : var5),
-        Map.identity());
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X0().foo0_0(var7);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_0(
-        (false
-            ? {
-                7: 'QMNg',
-                12: 'wzc5-Iq',
-                63: '29an-z',
-                86: 'sF5',
-                59: '\u2665L',
-                43: 'k',
-                62: 'NvF\u{1f600}k',
-                84: 'ZW 1-o'
-              }
-            : var7),
-        {
-          28: '@smXqKl',
-          66: 'oL',
-          if (false) 74: 'B' else 81: 'X',
-          if (false) 18: 'j' else 25: 'N',
-          44: '\u{1f600}lrx8m',
-          20: 'hC',
-          73: 'q',
-          63: '\u{1f600}nE'
-        },
-        0.18875619647922648);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_1((-((++var2))));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_2((var1
-        ? (false
-            ? (true ? var7[((!(var1)) ? var5[Int32x4.xxyx] : 3)] : var4)
-            : Uri.encodeComponent(('yd' ?? (var0).padLeft(1, 'Q'))))
-        : var7[-2147483649]));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_3();
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_0(Int32x4.xyyw);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_1((!(((!(var1)) && (!((var1 ? false : var1)))))));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_2(var7, ((-(var5[(--var2)])) << 98));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo3_0(0.37767598562234317);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo3_1(
-        -6, var0, (Uri.decodeComponent('yQg') + ((var4 ?? var4) + var0)));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo1_0(
-        Map.unmodifiable({77: 'hG'}),
-        ((false
-                ? {
-                    88: 'Sv-EbnG',
-                    73: 'G',
-                    46: 'O#',
-                    16: 'm1nf(',
-                    91: 'F',
-                    11: 'Q+O@K',
-                    70: '3q\u2665BJ'
-                  }
-                : Map.identity()) ??
-            {
-              68: 'r',
-              56: 'IH&',
-              31: '9cqu',
-              49: '8ug',
-              84: 'mR2VyC',
-              41: 'gk&(asy'
-            }),
-        (var3 * sin(var3)));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().run();
-  } catch (e, st) {
-    count++;
-  } finally {}
-  Expect.equals(-47639, var2);
-  Expect.equals(9, count);
-}
diff --git a/tests/language/vm/regression_38741.dart b/tests/language/vm/regression_38741.dart
deleted file mode 100644
index 2dd1223..0000000
--- a/tests/language/vm/regression_38741.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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 file.
-
-// VMOptions=--deterministic
-
-// Found by DartFuzzing: would fail during deopt:
-// https://github.com/dart-lang/sdk/issues/38741
-
-import 'package:expect/expect.dart';
-
-@pragma('vm:prefer-inline')
-bool foo(int x) => x < 10;
-
-@pragma('vm:never-inline')
-bool bar(bool f) => f && foo(1);
-
-void main() {
-  try {
-    foo(null); // seed feedback for x < 10 with null receiver cid
-  } catch (e) {}
-  // Now when foo will be inlined into bar we will know that x is Smi,
-  // this hower disagrees with type feedback (which currently is monomorphic and
-  // expects null receiver for x < 10).
-  for (var i = 0; i < 10000; i++) Expect.isFalse(bar(false));
-  Expect.isTrue(bar(true));
-}
diff --git a/tests/language_2/identifier/built_in_illegal_test.dart b/tests/language_2/identifier/built_in_illegal_test.dart
index 822bfc9..652199e 100644
--- a/tests/language_2/identifier/built_in_illegal_test.dart
+++ b/tests/language_2/identifier/built_in_illegal_test.dart
@@ -20,19 +20,8 @@
 // [cfe] Can't use 'dynamic' as a name here.
 class export { }
 //    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'export'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'export' as a name here.
 class external { }
 //    ^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -43,111 +32,47 @@
 // [cfe] Can't use 'factory' as a name here.
 class get { }
 //    ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] A function declaration needs an explicit list of parameters.
-// [cfe] Expected an identifier, but got 'get'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'get' as a name here.
 class interface { }
 //    ^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'interface' as a name here.
 class implements { }
 //    ^^^^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'implements'.
-// [error line 56, column 18, length 0]
-// [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-//               ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TYPE_NAME
-// [cfe] Expected a type, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'implements' as a name here.
 class import { }
 //    ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'import'.
-//           ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'import' as a name here.
 class mixin { }
 //    ^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'mixin'.
-//          ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'mixin' as a name here.
 class library { }
 //    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.LIBRARY_DIRECTIVE_NOT_FIRST
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'library'.
-// [cfe] The library directive must appear before all other directives.
-//            ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'library' as a name here.
 class operator { }
 //    ^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'operator' as a name here.
 class part { }
 //    ^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'part'.
-//         ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'part' as a name here.
 class set { }
 //    ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] A function declaration needs an explicit list of parameters.
-// [cfe] Expected an identifier, but got 'set'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'set' as a name here.
 class static { }
 //    ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
 // [cfe] Can't use 'static' as a name here.
 class typedef { }
 //    ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'typedef'.
-//            ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-//              ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [analyzer] SYNTACTIC_ERROR.MISSING_TYPEDEF_PARAMETERS
-// [cfe] A typedef needs an explicit list of parameters.
-// [cfe] Expected ';' after this.
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'typedef' as a name here.
 
 main() {}
diff --git a/tests/language_2/vm/regression_38412.dart b/tests/language_2/vm/regression_38412_test.dart
similarity index 100%
rename from tests/language_2/vm/regression_38412.dart
rename to tests/language_2/vm/regression_38412_test.dart
diff --git a/tests/language_2/vm/regression_38436.dart b/tests/language_2/vm/regression_38436.dart
deleted file mode 100644
index f350f6c..0000000
--- a/tests/language_2/vm/regression_38436.dart
+++ /dev/null
@@ -1,2364 +0,0 @@
-// 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 file.
-
-// @dart = 2.9
-
-// VMOptions=--optimization_counter_threshold=1
-
-import "package:expect/expect.dart";
-
-// Found by DartFuzzing: would sometimes crash on OSR
-// https://github.com/dart-lang/sdk/issues/38436
-
-import 'dart:async';
-import 'dart:cli';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:core';
-import 'dart:io';
-import 'dart:isolate';
-import 'dart:math';
-import 'dart:typed_data';
-
-String var0 = '';
-bool var1 = true;
-int var2 = -30;
-double var3 = 0.895077679110543;
-String var4 = '';
-List<int> var5 = [55, -70];
-Set<int> var6 = {
-  1024,
-  for (int loc0 in [
-    79,
-    ...[23],
-    ...[90, -89, -24],
-    -90,
-    11,
-    -19,
-    -91
-  ])
-    -55,
-  67,
-  -80,
-  for (int loc0 = 0; loc0 < 29; loc0++) 20,
-  for (int loc0 = 0; loc0 < 24; loc0++) ...{23, -41},
-  ...{
-    -75,
-    128,
-    9223372034707292159,
-    -56,
-    -59,
-    for (int loc0 in {
-      -67,
-      for (int loc1 in [-27, -59, 31, 32, -66, -87]) -9223372036854775680,
-      85,
-      -45,
-      if (false) 70,
-      13,
-      43,
-      48
-    })
-      if (true) 63,
-    ...{-90, -24, -9223372036854743041, -9223372032559808383, 86},
-    -25
-  }
-};
-Map<int, String> var7 = {
-  6: '',
-  ...{56: 'B\u2665pwO', 73: 'ZJDi\u{1f600}m'},
-  ...{73: ')', 14: '93Q'},
-  98: 'xA0jQL',
-  21: ')\u2665TOy',
-  for (int loc0 = 0; loc0 < 82; loc0++) 34: 'Q3\u2665#61',
-  ...{70: 'XXRXl3O', 56: '\u2665lda2Zy', 38: 'Dr#mtz', 6: 'nx'},
-  27: '('
-};
-
-Set<int> foo0() {
-  var3 += ((((var0 + var7[var5[88]])).isEmpty ? true : var1)
-      ? (var1 ? (var3 ?? var3) : var3)
-      : (var1 ? 0.24414824314186978 : var3));
-  var1 ??= true;
-  return {(var2--), Duration.secondsPerHour, var5[var2]};
-}
-
-Map<int, String> foo1(List<int> par1, bool par2) {
-  throw ((-(var3)) * (-(0.943305664017911)));
-}
-
-List<int> foo2(Set<int> par1, List<int> par2, Map<int, String> par3) {
-  switch (-49) {
-    case 4149672951:
-      {
-        for (int loc0 in foo0()) {
-          var6 = var6;
-          try {
-            for (int loc1 = 0; loc1 < 70; loc1++) {
-              switch (((var1
-                      ? ((var1 ? var1 : true) ? Float32x4.xzzw : (--var2))
-                      : (4295032831 % (loc1 + 93))))
-                  .floor()) {
-                case 3294548737:
-                  {
-                    var5[Int32x4.xxwy] ^=
-                        (loc0 * ('!').compareTo(((!(true)) ? var4 : 'S')));
-                  }
-                  break;
-                case 3294548738:
-                  {
-                    var0 = var4;
-                    loc0 <<= Int32x4.zwxz;
-                  }
-                  break;
-              }
-              {
-                int loc2 = 0;
-                do {
-                  var1 = ('Ncb\u2665P9K').isEmpty;
-                  var1 ??= (!(true));
-                } while (++loc2 < 91);
-              }
-            }
-            par3 ??= {
-              44: ((false
-                      ? false
-                      : ((true
-                              ? var7
-                              : {
-                                  17: par3[(var5[-73] - -20)],
-                                  80: var7[
-                                      ((++loc0) ~/ ((!(false)) ? 47 : var2))],
-                                  30: '8Qvz3',
-                                  36: '',
-                                  10: (('@B!0bW6' + var4)).toLowerCase(),
-                                  89: var7[-9223372036854775296],
-                                  4: ') '
-                                }) !=
-                          var7))
-                  ? ((var1 || (!(var1))) ? var7[Float32x4.wxzw] : var7[-7])
-                  : '8h'),
-              for (int loc1 in [
-                (false
-                    ? ((([
-                                  var2,
-                                  -39,
-                                  -74,
-                                  Float32x4.zzxy,
-                                  (~(var5[(67 + -86)])),
-                                  -53
-                                ] +
-                                [(var2++), var5[par2[(--loc0)]]]) !=
-                            [
-                              var5[var5[var5[(loc0++)]]],
-                              loc0,
-                              loc0,
-                              -55,
-                              -69,
-                              loc0
-                            ])
-                        ? (loc0--)
-                        : loc0)
-                    : var2),
-                (75 ^ 93),
-                (false ? var5[Float32x4.xzyw] : (loc0++)),
-                ...[
-                  for (int loc2 in {
-                    -22,
-                    (loc0 ^ 2),
-                    var5[(-((par2[-79] * 86)))],
-                    (++loc0),
-                    ((par2[var5[-45]] ?? 55) >> (true ? Int32x4.wyww : -45)),
-                    (~((++var2))),
-                    par2[var2]
-                  })
-                    (loc0--),
-                  if ((var7[(false ? (-(loc0)) : 19)]).endsWith(var4))
-                    (++var2)
-                  else
-                    (var1 ? loc0 : 39),
-                  (((var2++) & var2) & -26),
-                  if (false) (var1 ? Float32x4.wzzw : var5[129]),
-                  for (int loc2 in {
-                    (loc0--),
-                    (true ? loc0 : loc0),
-                    var2,
-                    var5[(0.4452451921266031).floor()],
-                    (~(-4294967196)),
-                    (loc0--),
-                    (--var2)
-                  })
-                    (var1 ? -30 : (loc0++)),
-                  (~((var1 ? 51 : var2))),
-                  (((var3 ?? pi) < 0.9098824013356337)
-                      ? ((true ? 57 : -48) << (--var2))
-                      : par2[-59])
-                ]
-              ])
-                84: var4,
-              57: var4
-            };
-          } catch (exception, stackTrace) {
-            /**
-           ** Multi-line
-           ** documentation comment.
-           */
-            for (int loc1 = 0; loc1 < 89; loc1++) {
-              switch ((var2--)) {
-                case 3807258589:
-                  {
-                    print(({
-                          (-34 ^
-                              ((false || var1)
-                                  ? 24
-                                  : (-(((-((var1
-                                          ? par2[(-(71))]
-                                          : 9223372032559808768))) +
-                                      (~(loc1))))))),
-                          (~((true ? loc0 : (false ? -75 : 33)))),
-                          Float32x4.zxwz,
-                          (false ? (15 * -83) : (var2--)),
-                          ((var7 !=
-                                  ((true ? var1 : false)
-                                      ? var7
-                                      : {
-                                          99: (true ? 'TobD' : var0),
-                                          59: (var4 ?? var4),
-                                          13: var4,
-                                          58: Uri.encodeFull(var4),
-                                          99: var7[loc1]
-                                        }))
-                              ? loc1
-                              : (var1
-                                  ? ((72 >> -15) ~/ (loc0--))
-                                  : -9223372030412324864)),
-                          32
-                        } ??
-                        par1));
-                  }
-                  break;
-                case 3807258592:
-                  {
-                    var1 ??= true;
-                    try {
-                      var7 = {9: (var1 ? 'ON' : 'f\u{1f600}b')};
-                      par2 = (true
-                          ? var5
-                          : [
-                              DateTime.january,
-                              (40 - (~(var2))),
-                              (var1 ? (--loc0) : 23),
-                              var5[(--var2)]
-                            ]);
-                    } catch (exception, stackTrace) {
-                      var3 /= 0.9998663372091022;
-                    } finally {
-                      par2 ??= ((var1
-                              ? false
-                              : (((par1 ??
-                                          {
-                                            -68,
-                                            86,
-                                            -33,
-                                            var5[(-9223372034707292159 - 90)],
-                                            (24 - (++var2)),
-                                            (-(var2)),
-                                            (loc1 * Int32x4.wyxx)
-                                          }))
-                                      .difference({
-                                    (var1 ? Float32x4.yzyw : (loc1 % loc0)),
-                                    6,
-                                    22,
-                                    91,
-                                    loc0,
-                                    (true ? loc1 : loc1)
-                                  }) ==
-                                  foo0()))
-                          ? par2
-                          : [
-                              (var2--),
-                              (-((++loc0))),
-                              ((-(var5[-52])) ~/
-                                  (true ? Int32x4.wyyy : (loc0--))),
-                              (var3).toInt()
-                            ]);
-                      var5[99] += (~(Float32x4.ywxw));
-                    }
-                  }
-                  break;
-              }
-              var5 = (par2 ??
-                  [
-                    ...[72],
-                    for (int loc2 in {Float32x4.xxwz, loc1})
-                      ((loc0--) ~/ (var2++)),
-                    par2[(++var2)],
-                    (-((--var2))),
-                    (var2++),
-                    -56,
-                    (~((~(loc0)))),
-                    for (int loc2 in {
-                      (-((~(17)))),
-                      Float32x4.zzzw,
-                      Float32x4.zyyz,
-                      (var2--),
-                      (Int32x4.wzwz % 78),
-                      loc0
-                    })
-                      Int32x4.xzzy
-                  ]);
-            }
-            {
-              int loc1 = 0;
-              do {
-                loc0 &= (-(4295000065));
-              } while (++loc1 < 94);
-            }
-          } finally {
-            var3 -= 0.020483900923215503;
-            try {
-              return [
-                ...[
-                  (loc0--),
-                  for (int loc1 in {Float32x4.yxyz})
-                    if (var1) (~(-35)) else loc0,
-                  (++loc0),
-                  for (int loc1 = 0; loc1 < 43; loc1++)
-                    (var5[var5[par2[var5[-9223372032559808384]]]] &
-                        Int32x4.yzxy),
-                  for (int loc1 = 0; loc1 < 98; loc1++) (-((~(Int32x4.xwwy)))),
-                  Float32x4.yzzz
-                ],
-                (-(Int32x4.xzxz))
-              ];
-            } catch (exception, stackTrace) {
-              for (int loc1
-                  in (((((!((((0.13101852551635873 == 0.4825498460563603)
-                                          ? var7
-                                          : var7) !=
-                                      var7)))
-                                  ? 1
-                                  : par2[var2]))
-                              .isEven
-                          ? {
-                              (var2++),
-                              (-48 | -54),
-                              (~(par2[loc0])),
-                              par2[var5[Int32x4.zyzz]],
-                              -2,
-                              (true ? (~((-(((!(false)) ? -11 : var2))))) : 73),
-                              if ((0.15992181539430828).isInfinite) (++var2)
-                            }
-                          : (false ? {-6} : {((++loc0) % 27), 92})) ??
-                      Set.identity())) {
-                var6 ??= foo0();
-              }
-              var5[(~(((true ? -10 : Float32x4.zzwy) -
-                  Duration.millisecondsPerSecond)))] = (~((var2--)));
-            }
-          }
-        }
-        par3.forEach((loc0, loc1) {
-          // Single-line comment.
-          var6 = (var6 ?? foo0());
-          par1 = {
-            if (('X2yPgV').endsWith('b'))
-              Float32x4.yxxy
-            else if (true)
-              Int32x4.xzyw
-            else
-              for (int loc2 = 0; loc2 < 9; loc2++) (++loc0),
-            (4294967551 ?? (-((loc0--)))),
-            (-69 ~/
-                ((!(false))
-                    ? ((((par2[Int32x4.zwzw]).isEven
-                                ? (var3).truncateToDouble()
-                                : 0.14035347150303745))
-                            .isInfinite
-                        ? Int32x4.yzxx
-                        : par2[loc0])
-                    : (var2++))),
-            ((loc0++) - ((++var2) >> (~(par2[(var2--)]))))
-          };
-        });
-      }
-      break;
-    case 4149672955:
-      {
-        par2[((var2 ^ (~((--var2)))) | -98)] *= -62;
-        {
-          int loc0 = 0;
-          do {
-            var0 = par3[(var5[4294967808] >> Float32x4.wwyx)];
-          } while (++loc0 < 46);
-        }
-      }
-      break;
-  }
-  var1 ??= (!((var3).isNaN));
-  return (var1
-      ? par2
-      : Uri.parseIPv6Address(
-          (var1 ? '' : '26DgiI'), (ZLibOption.maxMemLevel % 65), 68));
-}
-
-class X0 {
-  bool fld0_0 = true;
-  Set<int> fld0_1 = {
-    31,
-    if (true) ...{
-      -93,
-      -4294967041,
-      -4294934527,
-      if (false) 92,
-      if (true) 69
-    } else
-      85,
-    ...{
-      ...{73, 27},
-      for (int loc0 in {
-        for (int loc1 = 0; loc1 < 56; loc1++) -36,
-        -23,
-        -99,
-        20,
-        16,
-        11,
-        if (false) -24,
-        if (true) 14
-      })
-        if (false) 69,
-      -9223372032559808513,
-      -9223372036854775553,
-      -9223372036854774784,
-      -22
-    },
-    81,
-    ...{16, if (false) 67 else -30, if (true) 21 else -61, -84},
-    -69
-  };
-
-  List<int> foo0_0(Map<int, String> par1) {
-    if ((var1 ? ((!(fld0_0)) ? true : false) : true)) {
-      return ((var4).trim()).codeUnits;
-    } else {
-      for (int loc0 in var6) {
-        fld0_0 ??= var1;
-        for (int loc1 = 0; loc1 < 57; loc1++) {
-          {
-            Map<int, String> loc2 = Map.identity();
-            par1 ??= Map.unmodifiable(Map.unmodifiable(Map.unmodifiable((true
-                ? loc2
-                : ((true
-                        ? loc2
-                        : foo1(
-                            [var5[-60], loc0, var5[-48], -80, var5[var5[37]]],
-                            var1)) ??
-                    {
-                      60: var0,
-                      93: ((false ? var0 : '') + 'r\u{1f600}2B#p')
-                    })))));
-            var4 = ' ';
-          }
-          try {
-            var5 = foo2(
-                ({loc0, 37, Float32x4.wwyw} ?? var6),
-                ((fld0_0
-                        ? [
-                            for (int loc2 = 0; loc2 < 1; loc2++)
-                              (~(Float32x4.zyzz)),
-                            (~((true
-                                ? (Float32x4.yyzw >> (48 - (-((var2--)))))
-                                : (~(loc0))))),
-                            ((var4 ==
-                                    String.fromEnvironment(
-                                        (var1 ? 'l9FM' : par1[var5[loc0]])))
-                                ? (++loc0)
-                                : 4),
-                            ...[
-                              (~((var5[-9223372032559808448] - (++var2)))),
-                              ...[
-                                for (int loc2 in [
-                                  ((-12 <= 55) ? 9223372032559841280 : loc0),
-                                  var5[var5[(~(var5[var5[loc1]]))]],
-                                  (var1 ? 67 : -74)
-                                ])
-                                  (var5[var2]).sign,
-                                var5[-65],
-                                if (fld0_0)
-                                  var5[(var5[var5[-90]] ~/ 22)]
-                                else
-                                  (-9223372036854775679 + var5[16]),
-                                76,
-                                7
-                              ],
-                              (++var2),
-                              -9223372034707292160,
-                              (var2--),
-                              var5[(var2--)]
-                            ],
-                            loc1,
-                            Float32x4.ywxz,
-                            ((++loc0) + (--loc0)),
-                            for (int loc2 in [
-                              for (int loc3 = 0; loc3 < 4; loc3++) loc1,
-                              ...[
-                                Float32x4.zxwy,
-                                Float32x4.xzwx,
-                                var2,
-                                (++var2),
-                                Int32x4.xzyy,
-                                (var5[loc1] | (true ? -97 : -93)),
-                                Float32x4.xwyz,
-                                ((true || var1)
-                                    ? (~((--loc0)))
-                                    : (~((var5[18] % (-55 + loc0)))))
-                              ],
-                              (~((++loc0))),
-                              -85,
-                              (~((var2++))),
-                              (true
-                                  ? ZLibOption.maxMemLevel
-                                  : var5[var5[var5[var5[var2]]]]),
-                              ((true
-                                      ? ((!((false
-                                              ? (true ? fld0_0 : (!(false)))
-                                              : fld0_0)))
-                                          ? fld0_0
-                                          : (({
-                                                96: var4,
-                                                60: '(0yBGn\u{1f600}',
-                                                57: var4,
-                                                73: var7[-43],
-                                                38: var0
-                                              })
-                                                  .isNotEmpty ||
-                                              ({
-                                                67: var4,
-                                                14: 'M\u{1f600}1HNbP',
-                                                6: 's',
-                                                85: 'uyq',
-                                                95: var7[(-(Int32x4.wwxw))],
-                                                33: ''
-                                              })
-                                                  .isNotEmpty))
-                                      : false)
-                                  ? var2
-                                  : (++var2))
-                            ]) ...[-27]
-                          ]
-                        : [
-                            for (int loc2 = 0; loc2 < 87; loc2++)
-                              (-47 * (~((((--var2) ^ loc0) ?? 78)))),
-                            (-(((({
-                                  14: (var3).toStringAsExponential(
-                                      (false ? var5[-62] : 33)),
-                                  16: '',
-                                  71: var4,
-                                  78: (([var5[(-(91))]] == var5) ? var4 : var0),
-                                  9: par1[loc1],
-                                  51: '-8ht',
-                                  26: ('(2l3\u2665h' ?? var0),
-                                  79: var4
-                                })
-                                        .isNotEmpty
-                                    ? var5[(var2 % loc0)]
-                                    : var2) %
-                                ((!(NetworkInterface.listSupported))
-                                    ? -22
-                                    : ((var1
-                                            ? ([
-                                                  ZLibOption.STRATEGY_DEFAULT,
-                                                  21,
-                                                  loc1,
-                                                  loc1,
-                                                  loc0,
-                                                  5,
-                                                  loc0,
-                                                  98
-                                                ] ==
-                                                Uri.parseIPv4Address(
-                                                    var7[loc1]))
-                                            : var1)
-                                        ? (~((-20 %
-                                            (var5).removeAt(Float32x4.wyxw))))
-                                        : var5[var5[82]]))))),
-                            (-(Float32x4.wwwz)),
-                            Int32x4.wxxz,
-                            ...[
-                              (loc0++),
-                              ...[
-                                (--loc0),
-                                -2,
-                                ZLibOption.DEFAULT_WINDOW_BITS,
-                                -42,
-                                for (int loc2 = 0; loc2 < 2; loc2++) (-(-22)),
-                                (~(-81))
-                              ],
-                              (--var2)
-                            ],
-                            (++var2),
-                            ((!(false)) ? (--var2) : (((~(34)) >> 48) << 79)),
-                            loc1
-                          ]) +
-                    foo2(
-                        foo0(),
-                        ([
-                              (((~(var5[(-(var5[(87 % var5[(++var2)])]))])) ??
-                                      -11) ~/
-                                  (var2++)),
-                              ((((!(var1)) && true) ? loc1 : 98) <<
-                                  ((!((true != (var4 == par1[var5[(~(-83))]]))))
-                                      ? -44
-                                      : var5[88])),
-                              Float32x4.yyyz,
-                              -44,
-                              Int32x4.xzyx,
-                              (++loc0)
-                            ] ??
-                            [
-                              ((foo1([((!(var1)) ? 24 : 81), -93], true))
-                                      .isEmpty
-                                  ? 52
-                                  : (~(Int32x4.zyww))),
-                              Int32x4.xxwz,
-                              (-(-11)),
-                              (loc0--),
-                              ((!(bool.fromEnvironment('U\u2665')))
-                                  ? (loc0++)
-                                  : (++var2))
-                            ]),
-                        {
-                          70: var7[7],
-                          18: '\u2665(#&c\u{1f600}-',
-                          58: 'KuNr',
-                          96: '\u{1f600}2\u2665YY',
-                          94: var0,
-                          28: 'l-'
-                        })),
-                par1);
-            {
-              double loc2 = double.infinity;
-              /*
-               * Multi-line
-               * comment.
-               */
-              return ('a!wNh!').codeUnits;
-            }
-          } catch (exception, stackTrace) {
-            continue;
-          } finally {
-            fld0_0 = (!(fld0_0));
-            var5 ??= ((Uri.parseIPv4Address('H') ??
-                    (foo2({
-                          loc1,
-                          ([
-                                if (((true ? loc0 : (loc0++)) <
-                                    ((!(var1)) ? -90 : Int32x4.yyzx)))
-                                  (~(var2))
-                                else
-                                  for (int loc2 in {
-                                    if (SecurityContext.alpnSupported)
-                                      var2
-                                    else
-                                      Int32x4.wzzy,
-                                    -9223372036754112763,
-                                    (-((var1
-                                        ? var5[62]
-                                        : (-(Float32x4.wzwz))))),
-                                    (~(Float32x4.yxzy))
-                                  })
-                                    ((((true && (false ? fld0_0 : var1))
-                                                ? fld0_0
-                                                : false)
-                                            ? true
-                                            : (fld0_0 && var1))
-                                        ? (true ? (~(loc1)) : var5[-16])
-                                        : loc0),
-                                for (int loc2 = 0; loc2 < 1; loc2++)
-                                  ((false && var1) ? Float32x4.yzyy : 50)
-                              ][var2] *
-                              [
-                                ...[
-                                  (((-10 >> Int32x4.wxzw) *
-                                          ((0.42979687169554437 >=
-                                                  0.17848133910264385)
-                                              ? -4
-                                              : var5[-15])) |
-                                      var5[(loc0++)]),
-                                  ...[
-                                    (('@jcNl\u2665P')
-                                            .compareTo(var7[(loc0--)]) &
-                                        (~((~(loc0))))),
-                                    if ((!(((!(true)) && true)))) 2,
-                                    loc1,
-                                    ((var5[(loc0--)] | -38) & (loc0++)),
-                                    var2,
-                                    (~(-22)),
-                                    if (false) loc0 else 80,
-                                    (--loc0)
-                                  ],
-                                  ...[15],
-                                  ((~((~(-5)))) ^ Int32x4.xxxz),
-                                  79,
-                                  for (int loc2 in [
-                                    (fld0_0 ? -0 : (loc0++)),
-                                    -49,
-                                    for (int loc3 in [
-                                      -16,
-                                      (var2--),
-                                      35,
-                                      ((14 * -68) ~/ Int32x4.wwyy)
-                                    ])
-                                      var5[(fld0_0 ? 28 : (-41 ?? 19))],
-                                    loc0,
-                                    (var3).round(),
-                                    if ((!((!((!(false))))))) loc1,
-                                    (loc0++),
-                                    Int32x4.wyww
-                                  ])
-                                    ((--var2) * var5[(6 & var5[(~(-53))])]),
-                                  (loc0++),
-                                  Float32x4.xwxx
-                                ],
-                                Int32x4.ywyw,
-                                (-(ZLibOption.strategyFixed)),
-                                (80 % (loc0--)),
-                                var5[Int32x4.zxww]
-                              ][var5[50]]),
-                          (false ? -71 : 39),
-                          (var5[-61]).toSigned(loc0),
-                          -50,
-                          4294967296
-                        }, [
-                          (16 *
-                              (~(((var1 ? ZLibOption.STRATEGY_FIXED : -66) *
-                                  4)))),
-                          Float32x4.wwwx
-                        ], {
-                          63: var0,
-                          52: (fld0_0 ? 'uG\u2665V@4' : '62'),
-                          98: var7[var5[-83]],
-                          70: (false
-                              ? 'bSg'
-                              : base64UrlEncode(([
-                                    (~(var2)),
-                                    -52,
-                                    68,
-                                    [
-                                      10,
-                                      loc1,
-                                      92,
-                                      53,
-                                      Int32x4.zzyw,
-                                      (true ? 12 : 19),
-                                      (~(var5[(++var2)]))
-                                    ][-64],
-                                    (++loc0),
-                                    (loc0 << -26)
-                                  ] +
-                                  [
-                                    var5[(--loc0)],
-                                    (((var1 ? var5[var5[(var2--)]] : loc1) +
-                                            (--var2)) <<
-                                        Int32x4.wyyx)
-                                  ]))),
-                          16: 'YsD\u2665\u2665K',
-                          0: var0,
-                          93: var7[(-(var5[-43]))]
-                        }) ??
-                        var5)) ??
-                [
-                  if (fld0_0) -90,
-                  (--var2),
-                  ...[
-                    for (int loc2 in [
-                      (false ? (~(-9)) : -4294901760),
-                      (-(-7)),
-                      -51,
-                      (var1 ? -75 : [Float32x4.wwxw, Int32x4.zxyx][-7]),
-                      Float32x4.xyww,
-                      Int32x4.wwzx,
-                      (loc0++),
-                      (NetworkInterface.listSupported
-                          ? [1000][Float32x4.zzyx]
-                          : -71)
-                    ])
-                      -27,
-                    Float32x4.wyzy,
-                    (++var2)
-                  ]
-                ]);
-          }
-        }
-      }
-      throw Map.unmodifiable(foo1(
-          (MapBase.mapToString(foo1((false ? [var2] : var5), false))).codeUnits,
-          true));
-    }
-  }
-
-  void run() {}
-}
-
-class X1 extends X0 {
-  double fld1_0 = 0.47694301047645304;
-  bool fld1_1 = true;
-
-  Map<int, String> foo1_0(
-      Map<int, String> par1, Map<int, String> par2, double par3) {
-    // Single-line comment.
-    for (int loc0 = 0; loc0 < 91; loc0++) {
-      par2.forEach((loc1, loc2) {
-        {
-          bool loc3 = (fld1_1 || ('U\u2665').isEmpty);
-          var3 /= 0.8504341352135224;
-        }
-      });
-      {
-        int loc1 = 66;
-        while (--loc1 > 0) {
-          if (((!((true || fld1_1))) == true)) {
-            var0 ??= par2[var5[(~((false ? ((!(var1)) ? -95 : var2) : -37)))]];
-            /**
-             ** Multi-line
-             ** documentation comment.
-             */
-            return Map.unmodifiable({
-              55: var4,
-              73: 'c#',
-              17: (fld1_1
-                  ? '7\u{1f600}e'
-                  : ((!(var1)) ? '8E7AK2e' : 'Fm\u{1f600} F')),
-              40: 'mb(\u{1f600}\u2665l',
-              36: Uri.decodeFull((true ? par2[-32769] : var7[Float32x4.zyxz])),
-              51: ((false &&
-                      (((var1 ? true : true) || false)
-                          ? (var7[(var2--)]).isEmpty
-                          : true))
-                  ? (fld1_1
-                      ? (fld1_1 ? (var1).toString() : 'r9M')
-                      : ((true ? (0.2863696758528199 != par3) : false)
-                          ? (fld1_1 ? par1[Int32x4.zwyz] : var4)
-                          : var4))
-                  : var4),
-              8: '6G',
-              62: '+z@Gp'
-            });
-          } else {
-            var5[Int32x4.zzyy] ??= (-(var5[((!(false)) ? loc1 : -34)]));
-            {
-              int loc2 = (-(7));
-              var3 /= (true
-                  ? (-(((-9223372032459145467).isEven
-                      ? fld1_0
-                      : (-((-(0.7008573255099826)))))))
-                  : par3);
-            }
-          }
-          for (int loc2 in foo2(var6, var5, {
-            if (false) 11: par1[((var4).isEmpty ? 55 : -61)],
-            12: 'f5j2v\u{1f600}',
-            52: (((foo1(
-                            (((var1
-                                        ? {var5[-66], var2, 88, 12, 6, -96}
-                                        : (var1
-                                            ? {-25, 84, (var2--), var5[83]}
-                                            : {-36, var5[51], var2})) !=
-                                    {var5[(++var2)]})
-                                ? [-2147483648, 46, loc0, var5[loc0], -21]
-                                : foo2(
-                                    {var5[var5[loc0]]},
-                                    (true
-                                        ? var5
-                                        : [
-                                            -30,
-                                            var5[(-(-42))],
-                                            var2,
-                                            Float32x4.zywx,
-                                            loc1,
-                                            63,
-                                            -25,
-                                            -28
-                                          ]),
-                                    {30: 'j\u2665U', 98: var4})),
-                            false))
-                        .isNotEmpty
-                    ? (false ? fld1_0 : 0.3202297128057393)
-                    : 0.1301025669674245))
-                .toStringAsFixed(((fld1_1 ? 79 : -88) + Int32x4.xyzw)),
-            88: (false ? var7[(var2++)] : (var4 ?? '')),
-            31: (var1
-                ? (var1 ? par2[-87] : (true ? par2[-14] : var4))
-                : ((fld1_1 != true) ? '3nd9t&' : var4)),
-            22: ('(Czi' + '-Y')
-          })) {
-            var7[(loc2--)] = 's';
-          }
-        }
-      }
-    }
-    return par1;
-  }
-
-  String foo1_1(int par1) => var0;
-  Set<int> foo1_2(String par1) {
-    for (int loc0 = 0; loc0 < 58; loc0++) {
-      switch ((~(13))) {
-        case 746492976:
-          {
-            switch (Duration.millisecondsPerDay) {
-              case 3635015902:
-                {
-                  var7[var5[(var5[var2] * (-(var5[Float32x4.yxxz])))]] ??=
-                      (var7[-79] + '(O@');
-                  var7[loc0] ??= String.fromCharCode(var5[(true
-                      ? (var5[((var1 ? true : (false ? fld1_1 : var1))
-                              ? var5[Float32x4.wyyz]
-                              : 73)] ~/
-                          (-(84)))
-                      : -15)]);
-                }
-                break;
-              case 3635015905:
-                {
-                  var1 = (var1
-                      ? (foo1_0(
-                              (((!(false)) || fld1_1) ? var7 : var7),
-                              foo1_0(
-                                  {74: '\u2665e', 10: 'tw8jc0R'},
-                                  foo1_0(
-                                      var7,
-                                      foo1_0(
-                                          ({
-                                                17: var7[Int32x4.zyxy],
-                                                82: var7[64],
-                                                27: 'VEtj',
-                                                90: Uri.encodeQueryComponent(
-                                                    foo1_1(var2)),
-                                                68: 'wew0\u{1f600}'
-                                              } ??
-                                              foo1_0(var7, var7, var3)),
-                                          ({
-                                                65: 'mBeBfUj',
-                                                81: var4,
-                                                35: (var7[-43] + 'l'),
-                                                68: var4
-                                              } ??
-                                              {
-                                                33: ('N\u{1f600}xaY+' ?? par1),
-                                                44: var7[var5[var2]],
-                                                83: var4,
-                                                86: 'k'
-                                              }),
-                                          asin(0.4245871535895427)),
-                                      (-(0.2913717674787144))),
-                                  0.9439800024935644),
-                              (-((true
-                                  ? ((var1 ? false : var1)
-                                      ? 0.09441225978923817
-                                      : 0.42622157485045953)
-                                  : (-(0.29370792038584836)))))))
-                          .isNotEmpty
-                      : (false && true));
-                  var3 += (-(fld1_0));
-                }
-                break;
-            }
-          }
-          break;
-        case 746492979:
-          {
-            var4 = var0;
-            for (int loc1 = 0; loc1 < 88; loc1++) {
-              var2 += 32;
-            }
-          }
-          break;
-      }
-    }
-    {
-      int loc0 = 0;
-      do {
-        return foo0();
-      } while (++loc0 < 57);
-    }
-    return foo0();
-  }
-
-  String foo1_3() {
-    if ((0.42144855521066793).isNegative) {
-      print((false ? (-(fld1_0)) : (-((-((-(0.26854952952179667))))))));
-      switch (30) {
-        case 3830102525:
-          {
-            try {
-              var7.forEach((loc0, loc1) {
-                var1 = (!(true));
-                var6 = (foo1_2(var7[99]) ?? var6);
-              });
-              var6 ??= var6;
-            } catch (exception, stackTrace) {
-              var4 ??= ListBase.listToString([
-                (Duration.microsecondsPerSecond + -82),
-                (true
-                    ? var5[(var2 ~/ (false ? (~((var1 ? 46 : var2))) : var2))]
-                    : (-9223372034707292161 >> var5[var5[-86]])),
-                Float32x4.wxyx
-              ]);
-            } finally {
-              /**
-             ** Multi-line
-             ** documentation comment.
-             */
-              fld1_1 = (var5[var5[var2]]).isOdd;
-            }
-            /*
-           * Multi-line
-           * comment.
-           */
-            if ((SetBase.setToString((fld1_1
-                    ? {12, (fld1_1 ? (-(-22)) : (-(4395630341)))}
-                    : var6)))
-                .isNotEmpty) {
-              try {
-                {
-                  int loc0 = 86;
-                  while (--loc0 > 0) {
-                    {
-                      int loc1 = 0;
-                      do {
-                        var0 = var7[(-(((--var2) &
-                            ((var1 ? (fld1_0).isNaN : true)
-                                ? (-16 | -20)
-                                : ((0.7513819161190503).isNaN ? 45 : loc1)))))];
-
-                        /// Single-line documentation comment.
-                        var5[(true ? loc0 : Float32x4.zxzx)] %= loc0;
-                      } while (++loc1 < 17);
-                    }
-                    for (int loc1 = 0; loc1 < 25; loc1++) {
-                      var5[Float32x4.zywy] <<= Int32x4.ywwx;
-                    }
-                  }
-                }
-              } catch (exception, stackTrace) {
-                var7 = Map.from(foo1_0({
-                  81: (foo1_1(((++var2) * (-(var5[21])))) +
-                      (var7[8] + (var7[var5[53]] ?? var0))),
-                  for (int loc0 in [
-                    (true ? 58 : Float32x4.wyww),
-                    var5[(fld1_1 ? 46 : var2)]
-                  ])
-                    63: var7[(false
-                        ? var5[((24 >> -9223372036854710272) & var2)]
-                        : var5[(80 << var5[-31])])],
-                  67: var0,
-                  1: '3mlOA',
-                  30: ('OQbG').substring((var2--), (--var2)),
-                  93: ((var7[74] ?? var7[(++var2)])).toLowerCase(),
-                  ...{
-                    85: foo1_1(-21),
-                    if ((!((!(false))))) 86: var0,
-                    49: '62+v',
-                    59: foo1_1((--var2)),
-                    for (int loc0 in [
-                      -10,
-                      -65,
-                      (var2++),
-                      (var2++),
-                      ((({
-                                    ((var7[60] == var7[-30])
-                                        ? var5[(-((var2++)))]
-                                        : (var2--))
-                                  } ==
-                                  {var5[var2], -40, -81, (var2++), 93, 26})
-                              ? 38
-                              : (var1 ? var5[97] : -82)) *
-                          (--var2)),
-                      (~((true ? 5 : Float32x4.yxyy))),
-                      (var2++),
-                      ((++var2) << ((var2 % Int32x4.yxxw) >> (++var2)))
-                    ])
-                      54: (var0 + 'ANyqN'),
-                    94: (var1 ? '0T\u2665#w' : (var0).toUpperCase()),
-                    68: '@n',
-                    67: base64UrlEncode(((0.07857744084458451).isInfinite
-                        ? ([
-                              var2,
-                              var5[70],
-                              -32,
-                              Float32x4.yxwz,
-                              31,
-                              (~(var2)),
-                              (var2 ?? (-70 + 57)),
-                              -91
-                            ] +
-                            [
-                              var2,
-                              var5[((!(var1))
-                                  ? var5[(var2 ~/ Float32x4.zwyw)]
-                                  : var5[var5[(var5[(~(var2))] % var2)]])],
-                              (var2 | (false ? (-(var2)) : var5[80])),
-                              (var2--),
-                              DateTime.daysPerWeek,
-                              (var2 ~/ var2)
-                            ])
-                        : (var1 ? var5 : [(var2++)])))
-                  },
-                  if (false)
-                    if (false)
-                      26: (Uri.encodeComponent(foo1_1(var2)) + var7[var5[var2]])
-                    else ...{
-                      4: (double.negativeInfinity).toStringAsFixed(var2),
-                      46: Uri.decodeQueryComponent('bst3jz'),
-                      5: ((true
-                              ? (true ? '(-f' : var7[(-(Int32x4.yzxz))])
-                              : var7[(var5[(fld1_1 ? (var2--) : var2)] >>
-                                  (-((false ? 8589934591 : 33))))]) ??
-                          '4ov'),
-                      37: var7[var5[100663045]],
-                      13: '2B'
-                    }
-                }, {
-                  71: 'Hxbq',
-                  22: ('\u{1f600}Jtj').substring(
-                      (-36 | var5[(~((var2++)))]), 9223372032559874048)
-                }, 0.3710694748818374));
-                fld1_0 ??= 0.010604823956237519;
-              } finally {
-                for (int loc0 = 0; loc0 < 84; loc0++) {
-                  var5[Float32x4.xwwz] <<=
-                      ((((fld1_1 ? false : ('e\u{1f600}O+Vc').isNotEmpty) &&
-                                  (!(fld1_1)))
-                              ? (-73 | var5[Int32x4.yzwx])
-                              : Uint16List.bytesPerElement) ~/
-                          var2);
-                }
-              }
-            }
-          }
-          break;
-        case 3830102528:
-          {
-            fld1_1 ??= true;
-            throw (-((-17).ceilToDouble()));
-          }
-          break;
-      }
-    }
-    return var0;
-  }
-
-  void run() {
-    super.run();
-    {
-      int loc0 = 61;
-      while (--loc0 > 0) {
-        {
-          int loc1 = 77;
-          while (--loc1 > 0) {
-            {
-              int loc2 = 0;
-              do {
-                break;
-              } while (++loc2 < 84);
-            }
-          }
-        }
-        if (((var1 || fld1_1) && (!((!((!((!((!(true)))))))))))) {
-          switch (Int32x4.yyzx) {
-            case 900727295:
-              {
-                /// Single-line documentation comment.
-                fld1_1 ??= (!(true));
-                for (int loc1 in ((var5 ??
-                        Uri.parseIPv6Address(
-                            foo1_3(), var5[(loc0 + var5[4096])], -34)) ??
-                    var5)) {
-                  var7[(38 << (false ? (~(-58)) : Float32x4.yyxy))] =
-                      Uri.decodeFull(foo1_3());
-                  var5 ??= var5;
-                }
-              }
-              break;
-            case 900727304:
-              {
-                fld1_1 =
-                    (SecurityContext.alpnSupported ? (var3).isFinite : var1);
-                fld1_0 += 0.3154406798513474;
-              }
-              break;
-          }
-          var2 ^= var2;
-        } else {
-          if (((-(var3)) <= (-(fld1_0)))) {
-            var6 = foo1_2('0vsDWF9');
-          } else {
-            var6 ??= ((fld1_0 <= 0.16230005903410238)
-                ? ((!((0.5144029832155854 > (0.8199455895430549 / var3))))
-                    ? foo1_2('ken')
-                    : var6)
-                : (fld1_1 ? {56, 6442450945, 2} : {34}));
-          }
-          var5[Float32x4.zwzw] += (true ? var2 : (~(Float32x4.wyyx)));
-        }
-      }
-    }
-  }
-}
-
-class X2 extends X0 with X1 {
-  Set<int> fld2_0 = {for (int loc0 = 0; loc0 < 60; loc0++) -56, 29};
-
-  bool foo2_0(int par1) => var1;
-  bool foo2_1(bool par1) {
-    for (int loc0 in var6) {
-      var2 ~/= ((((((fld2_0 ?? (true ? var6 : var6)) ?? fld2_0))
-                      .union({(~(-21)), 10}) !=
-                  {(var5[90] ~/ (-(-90)))})
-              ? par1
-              : (var7[(~(82))]).isNotEmpty)
-          ? ((~(loc0)) *
-              ((true ? (-4294966272 ?? -21) : var2) +
-                  Duration.millisecondsPerMinute))
-          : (-9223372032559807488 ~/ 4294968296));
-    }
-    if (('DeAm#f' ==
-        ((Uri.encodeQueryComponent((0.3687340601979223).toString()) ??
-                var7[-23]) ??
-            foo1_3()))) {
-      throw (([Float32x4.wyyz, -9223372036854743039])
-              .sublist((--var2), (--var2)) +
-          ((true ? var1 : (!(false)))
-              ? foo2(
-                  foo1_2('JLXt'),
-                  [
-                    var5[Int32x4.zxzx],
-                    Int32x4.xxwy,
-                    (var2++),
-                    Float32x4.yzxx,
-                    (var2++),
-                    -15
-                  ],
-                  foo1_0(var7, var7, 0.7904389283184639))
-              : (var1
-                  ? [Float32x4.yzyz, Int32x4.wxxy, var2, (~(var5[-47]))]
-                  : var5)));
-    } else {
-      var7[var2] ??= ((({
-            ...{
-              for (int loc0 = 0; loc0 < 19; loc0++)
-                36: (var7[var2] ?? (par1 ? ('ccb9z' + 'iM') : var0)),
-              3: ('1sG' + var0),
-              for (int loc0 in {
-                (-(var5[var2])),
-                if (var1) Int32x4.zxxx,
-                -4294967168,
-                -61,
-                (~((par1 ? (~(-70)) : (var2--)))),
-                (-(7)),
-                -96,
-                Uint32List.bytesPerElement
-              })
-                85: var4
-            },
-            if (foo2_0(-91)) 38: (var3).toString() else 30: 'uI\u2665\u{1f600}',
-            72: '@'
-          }[(par1 ? 14 : var2)])
-                  .trim())
-              .substring((36 ~/ var5[(++var2)]), var5[((-(25)) * -53)]) ??
-          foo1_3());
-      /*
-       * Multi-line
-       * comment.
-       */
-      {
-        int loc0 = 0;
-        do {
-          {
-            String loc1 = 'jG7t';
-            /**
-             ** Multi-line
-             ** documentation comment.
-             */
-            {
-              int loc2 = 57;
-              while (--loc2 > 0) {
-                print((var6 ??
-                    (foo1_2(var0)).union(foo1_2(('n' + var7[(++var2)])))));
-              }
-            }
-          }
-        } while (++loc0 < 69);
-      }
-    }
-    return (!(((!((par1 && false)))
-        ? (true && foo2_0(-9223372036854771712))
-        : (!(par1)))));
-  }
-
-  double foo2_2(Map<int, String> par1, int par2) {
-    switch (var2) {
-      case 3816231196:
-        {
-          throw (-(Int32x4.xxwx));
-        }
-        break;
-      case 3816231204:
-        {
-          var7.forEach((loc0, loc1) {
-            switch ((-43 ^ (-(Float32x4.wwxx)))) {
-              case 2839002105:
-                {
-                  var0 ??= (SetBase.setToString(((var1 ? var1 : (true || var1))
-                          ? fld2_0
-                          : {
-                              Int32x4.yyzw,
-                              Int32x4.yyxy,
-                              (2 >> Int32x4.ywzx),
-                              (var1
-                                  ? ((foo2_1(var1) ? 17 : loc0) ~/
-                                      (-(var5[var2])))
-                                  : par2),
-                              Float32x4.zwwx,
-                              par2,
-                              Int32x4.wzzz,
-                              Int32x4.zyzw
-                            })) ??
-                      (loc1 +
-                          var7[((true
-                                  ? (var1 &&
-                                      bool.fromEnvironment(var7[(var2--)]))
-                                  : foo2_1(false))
-                              ? 35
-                              : (-(66)))]));
-                  for (int loc2 = 0; loc2 < 23; loc2++) {
-                    switch ((-73 ^ (Int32x4.xyzz >> Float32x4.yzzz))) {
-                      case 1710454916:
-                        {
-                          var3 = 0.3372913861348876;
-                          print(((-(var3)) * var3));
-                        }
-                        break;
-                      case 1710454922:
-                        {
-                          var4 ??= ((false
-                                  ? (var1
-                                      ? var1
-                                      : (fld2_0 ==
-                                          {
-                                            (false ? -27 : (-(92))),
-                                            loc2,
-                                            var5[loc2],
-                                            (var1
-                                                ? Float32x4.yywy
-                                                : (false ? -74 : 2)),
-                                            ((-(-50)) ^ 32),
-                                            (var2++)
-                                          }))
-                                  : var1)
-                              ? base64UrlEncode([
-                                  for (int loc3 in {
-                                    (-(par2)),
-                                    loc0,
-                                    (-((par2++))),
-                                    Float32x4.yyyx
-                                  })
-                                    (par2--),
-                                  (-((-(var5[var5[var5[-41]]])))),
-                                  if (({
-                                        loc2,
-                                        Duration.microsecondsPerSecond,
-                                        (([
-                                                  (par2++),
-                                                  (-90 ^ -5),
-                                                  var5[(~(0))],
-                                                  loc2
-                                                ] !=
-                                                var5)
-                                            ? -9223372032559808512
-                                            : (par2++))
-                                      } ==
-                                      {
-                                        (var1 ? (-((loc2 % loc2))) : loc2),
-                                        -94,
-                                        -62
-                                      }))
-                                    (++var2),
-                                  loc2,
-                                  for (int loc3 in {
-                                    55,
-                                    (~(var5[var5[(++par2)]])),
-                                    ((var1
-                                            ? (-((++var2)))
-                                            : var5[(true ? var5[68] : 10)]) -
-                                        par2),
-                                    (-(Float32x4.wzxx))
-                                  })
-                                    (Int32x4.yxzy | var5[-1]),
-                                  (foo2_1(false) ? (-(32)) : loc0),
-                                  (--par2),
-                                  if ((!(false))) (var1 ? var5[loc0] : 30)
-                                ])
-                              : ('b1TKp3' ??
-                                  (var4 +
-                                      var7[(~(var5[
-                                          ((var1 ? var2 : loc2) - 72)]))])));
-                        }
-                        break;
-                    }
-                    fld2_0 = ((!((false
-                            ? false
-                            : (false ? (!((var7[-28] != ''))) : var1))))
-                        ? (((var1
-                                    ? (true ? Set.identity() : var6)
-                                    : {
-                                        -63,
-                                        Int32x4.xxyx,
-                                        var5[((var1
-                                                ? (var5[-9223372032559808496] >>
-                                                    59)
-                                                : Int32x4.wxxy) ~/
-                                            var5[var5[-48]])],
-                                        (par2 ?? par2),
-                                        44,
-                                        var5[(var1 ? -26 : (-(par2)))]
-                                      }) ??
-                                ({
-                                      loc2,
-                                      var2,
-                                      ZLibOption.defaultMemLevel,
-                                      (true ? Int32x4.wyzz : 40),
-                                      (false ? loc2 : var5[42]),
-                                      -16
-                                    } ??
-                                    var6)))
-                            .union({loc0, (var2++), (-1 * (~(var2)))})
-                        : (bool.fromEnvironment((var3)
-                                .toStringAsFixed(Uint64List.bytesPerElement))
-                            ? fld2_0
-                            : {
-                                (par2++),
-                                (var1 ? loc2 : (++var2)),
-                                ((false || false) ? Int32x4.xyyz : (++par2)),
-                                var5[-98],
-                                Float32x4.zwwy,
-                                var5[var5[62]],
-                                (~(Float32x4.ywww))
-                              }));
-                  }
-                }
-                break;
-              case 2839002106:
-                {
-                  for (int loc2 = 0; loc2 < 13; loc2++) {
-                    {
-                      int loc3 = 0;
-                      do {
-                        switch ((loc3 | -76)) {
-                          case 2164097105:
-                            {
-                              var4 ??= (var1).toString();
-                              var5 = ((!(((true || var1) !=
-                                      (false ? var1 : (!(foo2_1(var1)))))))
-                                  ? foo2(
-                                      ((var6).union(foo1_2(loc1))).toSet(),
-                                      [
-                                        -67,
-                                        if (((var1
-                                                ? 59
-                                                : (-((false ? -97 : par2)))) !=
-                                            (false
-                                                ? ((var1 || var1)
-                                                    ? (-((par2++)))
-                                                    : 4)
-                                                : (--var2)))) ...[
-                                          ((92 ~/ Int32x4.yzwx) << 70),
-                                          Float32x4.xxyz,
-                                          Int8List.bytesPerElement
-                                        ] else
-                                          69
-                                      ],
-                                      var7)
-                                  : foo2(foo0(), Uri.parseIPv4Address(var0),
-                                      var7));
-                            }
-                            break;
-                          case 2164097111:
-                            {
-                              var4 ??= var7[Float32x4.zxzw];
-                            }
-                            break;
-                        }
-                      } while (++loc3 < 96);
-                    }
-                    fld2_0 = var6;
-                  }
-                }
-                break;
-            }
-          });
-          for (int loc0 in (foo2_1((var5 !=
-                  (false
-                      ? [par2]
-                      : foo2(
-                          var6,
-                          [20],
-                          ({
-                                21: var0,
-                                68: foo1_3(),
-                                24: ('1MF' + '8s\u2665yx+ ')
-                              } ??
-                              {
-                                9: var7[var2],
-                                48: 'mB(wW\u{1f600}',
-                                74: 'ojEw\u{1f600}\u{1f600}',
-                                80: '\u26655E-hj\u{1f600}',
-                                10: (false ? 'W7i5\u2665YX' : '! Ed9&'),
-                                88: (false ? var0 : 'N0D9(H\u{1f600}'),
-                                5: 'QZ'
-                              })))))
-              ? foo1_2('XP')
-              : {
-                  if ((foo2_1(var1)
-                      ? (foo2_1((fld2_0).add(-9223372036854774784)) || var1)
-                      : var1))
-                    (~(Float32x4.zyww)),
-                  Float32x4.xwyw,
-                  ((((var1 ? true : var1) ? 0.3447071353935154 : var3) >=
-                          0.5995056331958718)
-                      ? ZLibOption.MAX_LEVEL
-                      : 16),
-                  9223372032559841279,
-                  Int32x4.zwyy
-                })) {
-            for (int loc1 = 0; loc1 < 19; loc1++) {
-              var1 = (!(bool.fromEnvironment(MapBase.mapToString({
-                1: '4',
-                56: var0,
-                85: var0,
-                51: var7[-4],
-                42: ((!((!(false)))) ? par1[72] : MapBase.mapToString(var7))
-              }))));
-            }
-          }
-        }
-        break;
-    }
-    print((((var1 ? 'kP' : (var1 ? 'irjF' : var7[var5[90]])) ??
-            ((!(false)) ? 'vWa\u{1f600}' : var0)) +
-        'xzpK'));
-    return var3;
-  }
-
-  void run() {
-    super.run();
-    {
-      int loc0 = (~(-24));
-      var0 ??= ((false
-              ? foo2_1((true
-                  ? (var1 && (var2).isOdd)
-                  : (('dTYR' ?? 'G\u{1f600}P14\u{1f600}a')).isEmpty))
-              : ((var1 && true) || (!(var1))))
-          ? (var4 ?? 'I')
-          : 'QO');
-    }
-  }
-}
-
-class X3 extends X1 {
-  Map<int, String> fld3_0 = {
-    if (true) if (false) 45: 'ynEn\u2665nG' else 70: 'c\u{1f600}mN4\u2665a',
-    if (true) 30: '6\u2665P!Pbi',
-    81: 't',
-    82: '17fx#!',
-    92: 'H',
-    if (true) 69: ')Ls'
-  };
-  Set<int> fld3_1 = {27};
-  int fld3_2 = 34;
-
-  String foo1_1(int par1) {
-    throw (ListBase.listToString(foo2({
-          -4294967169,
-          par1
-        }, [
-          -97,
-          (var5[(var1 ? var5[87] : Int32x4.yxxy)] * Int32x4.yyxx),
-          var2,
-          (false ? 10 : var5[var5[(par1++)]])
-        ], var7)) ??
-        'o');
-  }
-
-  bool foo3_0(double par1) {
-    {
-      Set<int> loc0 = (true ? fld3_1 : var6);
-      {
-        Set<int> loc1 = (false
-            ? foo0()
-            : {
-                for (int loc2 in [var2, (-(Float32x4.xzzw))])
-                  if (false) Float32x4.wxyz else (++fld3_2),
-                ((var1
-                        ? 5
-                        : var5[(((var5[(true ? fld3_2 : fld3_2)] ~/ 48) | 56) %
-                            var5[-4])]) ??
-                    (var2++))
-              });
-        for (int loc2 = 0; loc2 < 90; loc2++) {
-          {
-            int loc3 = 95;
-            while (--loc3 > 0) {
-              return (((0.7073184699576396).isNaN
-                      ? var7
-                      : (Map.of(Map.from(var7)) ??
-                          Map.unmodifiable(Map.identity()))))
-                  .isEmpty;
-            }
-          }
-          try {
-            var1 = (((12 >= Int32x4.ywxx) ? true : true)
-                ? false
-                : (((var1 ? fld3_0[Int32x4.wyxy] : '') ?? var7[Float32x4.xwwx]))
-                    .isEmpty);
-            var2 |= ((fld3_2++) ?? (fld3_2--));
-          } catch (exception, stackTrace) {
-            var5 ??= var5;
-          } finally {
-            var4 = 'A';
-            break;
-          }
-        }
-        {
-          double loc2 = (-(exp((acos(0.06129144867031855) ?? var3))));
-          fld3_0 = (((({Int32x4.ywxw, 6442450943}).union(foo0()))
-                      .add((++fld3_2))
-                  ? false
-                  : false)
-              ? foo1_0(
-                  (foo1([var5[var2], var5[75], 42], false) ?? var7), var7, loc2)
-              : (var1
-                  ? {
-                      for (int loc3 = 0; loc3 < 48; loc3++) 78: 'dWek8',
-                      40: fld3_0[(var5[-81] & Int32x4.xzyw)],
-                      73: (' )G\u2665-d(').substring(
-                          (NetworkInterface.listSupported
-                              ? (~(((++var2) ?? (fld3_2 * fld3_2))))
-                              : var5[-75]),
-                          fld3_2),
-                      74: ('k9O\u2665').trimLeft(),
-                      88: var7[(++var2)],
-                      for (int loc3 = 0; loc3 < 27; loc3++)
-                        60: ((false || var1) ? var7[46] : var0),
-                      99: ((var3).isNaN
-                          ? (Uri.decodeComponent(foo1_3()) + var4)
-                          : var7[-77]),
-                      92: (true
-                          ? ('').padLeft(82, '')
-                          : ('' ?? var7[(false ? 94 : 58)]))
-                    }
-                  : var7));
-
-          /// Single-line documentation comment.
-          fld3_1 ??= ((loc1 ?? foo1_2(fld3_0[(var2--)])) ?? foo1_2(foo1_3()));
-        }
-      }
-    }
-    return (var1 ? (!(var1)) : var1);
-  }
-
-  String foo3_1(int par1, String par2, String par3) {
-    switch (var2) {
-      case 3768780679:
-        {
-          {
-            int loc0 = (++par1);
-            var0 ??= ListBase.listToString(var5);
-            if (true) {
-              var5 = [
-                Float32x4.xyxz,
-                (var1
-                    ? ((!(false)) ? Float32x4.xyyw : (++fld3_2))
-                    : var5[fld3_2]),
-                par1,
-                (~(Float32x4.zxwy)),
-                if ((foo3_0(var3)
-                    ? ([
-                          (++fld3_2),
-                          ...[
-                            ...[
-                              var5[(true ? Float32x4.xxzx : (--fld3_2))],
-                              54,
-                              (-((((foo3_0(var3)
-                                          ? (!(false))
-                                          : ((var1 ? (~(-63)) : var5[-40]))
-                                              .isOdd)
-                                      ? ((0.8329420640871532 != var3) && var1)
-                                      : var1)
-                                  ? 43
-                                  : (Float32x4.zxxy - Float32x4.zxxw)))),
-                              Int32x4.zzwx
-                            ],
-                            ...[
-                              (var5[-48] * (fld3_2++)),
-                              Int32x4.wyyw,
-                              (~(-76)),
-                              ((par1).isEven ? (--par1) : -13),
-                              Float32x4.wxyx
-                            ],
-                            for (int loc1 in [
-                              (++fld3_2),
-                              -15,
-                              (SecurityContext.alpnSupported
-                                  ? Int32x4.yxyw
-                                  : Float32x4.yxxw),
-                              if (true) var5[(var1 ? -32768 : par1)],
-                              ((--var2) ^ (++fld3_2))
-                            ])
-                              (fld3_2--),
-                            93,
-                            (~((-(ZLibOption.minMemLevel)))),
-                            ((Float32x4.zyzx >> -14) & Float32x4.yxxw)
-                          ],
-                          (var1
-                              ? (++par1)
-                              : ((var3).isInfinite ? Float32x4.zwww : -84)),
-                          var2
-                        ] ==
-                        [
-                          9223372032559808639,
-                          -85,
-                          Float32x4.wzyy,
-                          loc0,
-                          [
-                            ((-(36)) <<
-                                ((var1
-                                        ? var1
-                                        : ({
-                                            45: 'ay',
-                                            7: par3,
-                                            69: Uri.decodeFull(
-                                                (foo1_3() + 'LX+'))
-                                          })
-                                            .isEmpty)
-                                    ? (~((13 | 64)))
-                                    : (-(var2)))),
-                            (par1--),
-                            ((~((true ? (var2--) : -31))) >> 9),
-                            (-((35 % (~(var5[var5[39]]))))),
-                            4395630341,
-                            Int32x4.zxxy,
-                            if ((var1
-                                ? foo3_0(var3)
-                                : (0.6201792653929837).isInfinite)) ...[
-                              Int32x4.wxxx,
-                              (fld3_2 * (--fld3_2)),
-                              var5[((~(var5[var5[var5[(-(-23))]]])) +
-                                  (~(-4294966296)))],
-                              loc0,
-                              for (int loc1 in [var5[Float32x4.yzww]]) 17,
-                              (~(var5[(++par1)])),
-                              -58,
-                              ((!(('').isEmpty))
-                                  ? ((-(Float32x4.ywwx)) * (++par1))
-                                  : Int32x4.yxyz)
-                            ]
-                          ][((var1 ? var1 : var1) ? var5[0] : par1)],
-                          ((~(70)) +
-                              (par1 + (-77 | ZLibOption.MAX_WINDOW_BITS))),
-                          (-(Int32x4.zywy)),
-                          (~(Float32x4.zywz))
-                        ])
-                    : (var1 ? true : true)))
-                  fld3_2
-              ];
-            }
-          }
-          var3 *= ((var3 + 0.6761038672016147) ?? (-(double.minPositive)));
-        }
-        break;
-      case 3768780685:
-        {
-          {
-            int loc0 = 67;
-            while (--loc0 > 0) {
-              {
-                Map<int, String> loc1 = foo1(
-                    Uri.parseIPv4Address(('E Hu\u{1f600}' + '\u2665l&#!')),
-                    (!(false)));
-                var3 ??= var3;
-              }
-              var5 = (var5 +
-                  ((({
-                    79: (foo1_3() ?? 'eD'),
-                    73: (var1 ? par2 : ' xdXgW'),
-                    4: 'pUc(q',
-                    15: 'K\u{1f600}hmdZ\u2665',
-                    95: (var1 ? var4 : (var1 ? fld3_0[-45] : foo1_3()))
-                  })
-                              .isNotEmpty
-                          ? ((var1 ? var1 : (var1 ? var1 : foo3_0(var3))) ||
-                              foo3_0(var3))
-                          : (!(((false || true) ? var1 : false))))
-                      ? [
-                          (~((-61 ??
-                              (~((-(var5[(var1 ? fld3_2 : var5[34])]))))))),
-                          (var5[13] ^ (var1 ? 35 : -76)),
-                          (-(((~(-47)) ~/ (--par1))))
-                        ]
-                      : foo2({
-                          -36,
-                          ((0.3910802543332075).isNegative
-                              ? (~((var2++)))
-                              : (var2 &
-                                  (var1
-                                      ? [
-                                          -67,
-                                          (fld3_2++),
-                                          if ((!((!((var1
-                                              ? true
-                                              : (!(false))))))))
-                                            (false
-                                                ? (~(Float32x4.wyyy))
-                                                : (var1
-                                                    ? (1 ^ (-(16)))
-                                                    : var5[94])),
-                                          fld3_2,
-                                          var2,
-                                          67
-                                        ][-12]
-                                      : Float32x4.wwxw))),
-                          26,
-                          [
-                            (var1
-                                ? (--fld3_2)
-                                : (((!(var1))
-                                        ? (~((foo3_0(0.9959805940480148)
-                                            ? (33 ~/ loc0)
-                                            : Float32x4.xywx)))
-                                        : (15 % var5[var5[-47]])) <<
-                                    -86)),
-                            (-((~(RawSocketOption.levelIPv6))))
-                          ][var5[var5[(ZLibOption.maxMemLevel ^ -3)]]],
-                          -29
-                        }, [
-                          (var1 ? Float32x4.wxxw : (--par1)),
-                          ...[
-                            52,
-                            (-((true ? -12 : 44))),
-                            var5[((var5[34] * 30) >> 4294967360)],
-                            ((--var2) <<
-                                (true
-                                    ? var5[(-4 ~/ Int32x4.yyww)]
-                                    : (bool.fromEnvironment(var7[fld3_2])
-                                        ? (~((false ? loc0 : var5[(++par1)])))
-                                        : ((!(false))
-                                            ? (var5[var5[loc0]] ^ Int32x4.wxzz)
-                                            : par1)))),
-                            (((false ? var0 : '') !=
-                                    (true
-                                        ? MapBase.mapToString(({
-                                              7: 'WTT7\u{1f600}e3',
-                                              22: '',
-                                              36: (var1
-                                                  ? 'F'
-                                                  : (var1 ? fld3_0[var2] : '')),
-                                              37: 'l@a',
-                                              85: (var1 ? '' : par3),
-                                              82: 'eb',
-                                              37: '11',
-                                              41: var7[94]
-                                            } ??
-                                            var7))
-                                        : (var1 ? var4 : par2)))
-                                ? (~(var5[-71]))
-                                : 9),
-                            32,
-                            if (bool.fromEnvironment(
-                                fld3_0[var5[ZLibOption.MIN_MEM_LEVEL]]))
-                              var5[(--par1)],
-                            (par1--)
-                          ],
-                          for (int loc1 in {
-                            for (int loc2 in [
-                              ((!((Map.unmodifiable({
-                                        86: var4,
-                                        31: var0,
-                                        85: (par3 + ''),
-                                        91: (var1
-                                            ? fld3_0[4]
-                                            : '!M\u{1f600}!vOw'),
-                                        45: '7T',
-                                        19: 'fha+',
-                                        38: (false ? '' : fld3_0[70])
-                                      }) !=
-                                      {
-                                        92: '@4',
-                                        41: var7[loc0],
-                                        24: (foo3_0(0.06591134699771606)
-                                            ? '\u2665)\u2665NnO+'
-                                            : 'JM3Hn\u{1f600}'),
-                                        26: 'aQ51Yz',
-                                        64: var7[
-                                            (-((var5[18] & (36).bitLength)))]
-                                      })))
-                                  ? (89 ^
-                                      (((44 - par1) * -9223372034707292160) &
-                                          var5[128]))
-                                  : -46),
-                              (fld3_2++),
-                              ((([
-                                            -89,
-                                            var2,
-                                            (fld3_2++),
-                                            var5[-4294967264],
-                                            -25,
-                                            var2,
-                                            var5[((!(var1))
-                                                ? (var1 ? -3 : -81)
-                                                : var5[loc0])],
-                                            (var1
-                                                ? par1
-                                                : ((~((fld3_2++))) >>
-                                                    (-((-(-64))))))
-                                          ] ??
-                                          foo2(var6, [
-                                            4295032831
-                                          ], {
-                                            53: foo1_3(),
-                                            94: var7[13],
-                                            82: var7[-60],
-                                            30: fld3_0[-9223372032559742976],
-                                            98: foo1_3()
-                                          })) !=
-                                      var5)
-                                  ? (--par1)
-                                  : loc0),
-                              56,
-                              if (((var5[21]).isOdd ? true : false))
-                                ((++par1) -
-                                    (var1 ? var5[DateTime.january] : (par1--)))
-                              else
-                                fld3_2,
-                              if ((!(var1))) 74,
-                              (par1 ^ var5[26])
-                            ])
-                              (~(var2)),
-                            for (int loc2 in {
-                              6442450944,
-                              Float32x4.ywyw,
-                              -9223372032559804416,
-                              (~(var5[var5[26]])),
-                              Float32x4.xyxy,
-                              (--fld3_2),
-                              var5[98]
-                            })
-                              if (false) -26,
-                            (~((-((-((-48 - -9223372036854775680))))))),
-                            ...{
-                              (-((var2--))),
-                              if (true) -100663046 else var5[(~(par1))]
-                            },
-                            (~((~((fld3_2++))))),
-                            ...{
-                              ((List.filled(0, 26) ==
-                                      [
-                                        (-(-52)),
-                                        -29,
-                                        (--fld3_2),
-                                        (0.22302566014161784).floor(),
-                                        (par1 % -56)
-                                      ])
-                                  ? (var1
-                                      ? (var2++)
-                                      : ((!((!(true))))
-                                          ? ((var1 || foo3_0(var3)) ? 76 : par1)
-                                          : (-(-13))))
-                                  : ((foo1_0((var1 ? fld3_0 : var7), var7,
-                                              var3))
-                                          .isEmpty
-                                      ? 97
-                                      : (var1 ? var2 : -9223372036854774784))),
-                              (-(Float32x4.zyzw)),
-                              (--var2)
-                            }
-                          })
-                            ((var3 < (-(var3))) ? -9223372032559808000 : -71),
-                          -100663046,
-                          if ((var1
-                              ? bool.fromEnvironment('vV0')
-                              : (Map.from({
-                                  78: '',
-                                  49: '\u{1f600}\u{1f600}4Mz',
-                                  70: fld3_0[par1],
-                                  95: '\u{1f600}2tIYqE',
-                                  43: (true ? 'baf-\u2665' : var4),
-                                  30: var7[(-((-68 % ZLibOption.defaultLevel)))]
-                                }))
-                                  .isNotEmpty))
-                            -13
-                          else
-                            (var1 ? (-((-(var5[56])))) : (var2--)),
-                          (~((~((-((var2++)))))))
-                        ], {
-                          88: ('bV\u{1f600}iqO').toLowerCase(),
-                          42: '(hZ4S',
-                          37: var7[-79],
-                          36: var0
-                        })));
-            }
-          }
-          {
-            int loc0 = 0;
-            do {
-              try {
-                print(foo2(
-                    fld3_1,
-                    (fld3_0[var5[-12]]).codeUnits,
-                    (({
-                              36: var4,
-                              30: '0\u{1f600}EYWqr',
-                              66: 'S',
-                              3: '+J3Gj',
-                              71: '\u{1f600}-q',
-                              13: 'V3QN',
-                              34: ''
-                            } ??
-                            {
-                              54: fld3_0[(var2--)],
-                              74: (foo3_0(
-                                      ((-(var3)) * (0.8613045491468889 + var3)))
-                                  ? var7[78]
-                                  : (((var1 ? (47).isEven : var1) ? true : true)
-                                      ? (var4 ?? 'UzK')
-                                      : 'fH1smd')),
-                              12: '\u2665',
-                              18: 'V'
-                            }) ??
-                        var7)));
-              } catch (exception, stackTrace) {
-                fld3_1 = foo0();
-                for (int loc1 = 0; loc1 < 29; loc1++) {
-                  if (var1) {
-                    {
-                      int loc2 = 0;
-                      do {
-                        var5 = (foo3_0(var3)
-                            ? [
-                                ((--par1) ^ (~(93))),
-                                if ((var3).isFinite)
-                                  for (int loc3 in [
-                                    -5,
-                                    Int32x4.zxyy,
-                                    (true
-                                        ? var5[var5[(var1 ? -23 : var5[68])]]
-                                        : -99),
-                                    ((!(var1))
-                                        ? ((false
-                                                ? var1
-                                                : foo3_0(0.3133865362301862))
-                                            ? Float64List.bytesPerElement
-                                            : [
-                                                Float32x4.yxzx,
-                                                if (var1)
-                                                  (false ? 40 : 85)
-                                                else
-                                                  ((String.fromCharCode((foo3_0(
-                                                                  0.414460580942719)
-                                                              ? var5[-14]
-                                                              : var2)) ==
-                                                          'mII\u{1f600}zkM')
-                                                      ? var5[(~(-51))]
-                                                      : ((var1
-                                                              ? (!(var1))
-                                                              : var1)
-                                                          ? var5[0]
-                                                          : (-(var2))))
-                                              ][5])
-                                        : fld3_2),
-                                    (par1++),
-                                    -72,
-                                    Int32x4.zzxy
-                                  ])
-                                    Int32x4.zyww
-                                else
-                                  Int32x4.wxyz
-                              ]
-                            : [
-                                ...[
-                                  if ((false ? false : var1)) (-(52)),
-                                  (++par1),
-                                  (par1--),
-                                  (-((-([
-                                    (((var0 + fld3_0[(++var2)])).isNotEmpty
-                                        ? Float32x4.yzxw
-                                        : var5[35])
-                                  ][loc0])))),
-                                  (~(-17))
-                                ],
-                                38,
-                                ...[
-                                  (var1 ? (par1++) : -10),
-                                  if (true) -62 else var2,
-                                  if ((!((var3).isFinite)))
-                                    Int32x4.xxzz
-                                  else
-                                    -45
-                                ],
-                                if ((true || false)) (-(-93)),
-                                (--fld3_2),
-                                ([
-                                      (fld3_2--),
-                                      if ((base64UrlEncode(var5) == 'RY'))
-                                        (++fld3_2)
-                                      else
-                                        -9223372032559808383,
-                                      Float32x4.zyxy,
-                                      loc0,
-                                      -55,
-                                      if (('O \u{1f600}e\u2665').isNotEmpty)
-                                        if (var1)
-                                          (--var2)
-                                        else
-                                          for (int loc3 in {
-                                            loc0,
-                                            (~((--var2))),
-                                            (-(-35)),
-                                            Float32x4.xxyw,
-                                            65,
-                                            -4,
-                                            -4194304251,
-                                            -54
-                                          })
-                                            (((0.671280258888436 ==
-                                                        (0.16535430333243706 *
-                                                            0.18316039550464436)) ||
-                                                    var1)
-                                                ? var5[12]
-                                                : (~((--var2))))
-                                      else if (false)
-                                        if (var1) (-(Int32x4.zzwx)) else loc2
-                                      else
-                                        Int32x4.yzyw
-                                    ][loc1] *
-                                    (--par1)),
-                                (-71 * 38)
-                              ]);
-                      } while (++loc2 < 89);
-                    }
-                  } else {
-                    {
-                      int loc2 = 0;
-                      do {
-                        fld3_0 ??= ((((Map.unmodifiable(var7)).isEmpty ||
-                                    (!(({
-                                      11: 'v+MHeiB',
-                                      48: var7[(true
-                                          ? ((var2--) ?? fld3_2)
-                                          : var5[(fld3_2--)])],
-                                      52: '(('
-                                    })
-                                        .isEmpty)))
-                                ? fld3_0
-                                : {
-                                    39: foo1_3(),
-                                    21: 'IXzJ+',
-                                    76: 'K2C#',
-                                    16: ('\u{1f600}Gh' + '#i'),
-                                    62: foo1_3(),
-                                    19: foo1_3(),
-                                    32: par3,
-                                    for (int loc3 in [
-                                      (par1--),
-                                      -66,
-                                      -96,
-                                      -35,
-                                      Float32x4.zzyz
-                                    ])
-                                      72: 'y vxi'
-                                  }) ??
-                            {13: par2});
-                        switch (4096) {
-                          case 3159134388:
-                            {
-                              /// Single-line documentation comment.
-                              {
-                                int loc3 = 0;
-                                do {
-                                  fld3_0 ??= foo1(
-                                      var5,
-                                      ((((true ? par2 : var7[var5[loc1]]))
-                                                  .isNotEmpty
-                                              ? 9
-                                              : -55) !=
-                                          var5[-36]));
-                                  fld3_1 = foo0();
-                                } while (++loc3 < 79);
-                              }
-                            }
-                            break;
-                          case 3159134393:
-                            {
-                              throw Int32x4.zxxw;
-                            }
-                            break;
-                        }
-                      } while (++loc2 < 77);
-                    }
-                  }
-                }
-              }
-            } while (++loc0 < 98);
-          }
-        }
-        break;
-    }
-    /*
-     * Multi-line
-     * comment.
-     */
-    return ((0.7728524536008519).isNaN ? 'BjzeSsJ' : foo1_3());
-  }
-
-  void run() {
-    super.run();
-    var5 ??= var5;
-    print({4294968296});
-  }
-}
-
-main() {
-  int count = 0;
-  try {
-    foo0();
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    foo1(('  MQz').codeUnits, var1);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    foo2(
-        (var6).toSet(),
-        (var1
-            ? [-9223372036854775681, -66, 9223372032559874047, -3, 74]
-            : var5),
-        Map.identity());
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X0().foo0_0(var7);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_0(
-        (false
-            ? {
-                7: 'QMNg',
-                12: 'wzc5-Iq',
-                63: '29an-z',
-                86: 'sF5',
-                59: '\u2665L',
-                43: 'k',
-                62: 'NvF\u{1f600}k',
-                84: 'ZW 1-o'
-              }
-            : var7),
-        {
-          28: '@smXqKl',
-          66: 'oL',
-          if (false) 74: 'B' else 81: 'X',
-          if (false) 18: 'j' else 25: 'N',
-          44: '\u{1f600}lrx8m',
-          20: 'hC',
-          73: 'q',
-          63: '\u{1f600}nE'
-        },
-        0.18875619647922648);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_1((-((++var2))));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_2((var1
-        ? (false
-            ? (true ? var7[((!(var1)) ? var5[Int32x4.xxyx] : 3)] : var4)
-            : Uri.encodeComponent(('yd' ?? (var0).padLeft(1, 'Q'))))
-        : var7[-2147483649]));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X1().foo1_3();
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_0(Int32x4.xyyw);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_1((!(((!(var1)) && (!((var1 ? false : var1)))))));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X2().foo2_2(var7, ((-(var5[(--var2)])) << 98));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo3_0(0.37767598562234317);
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo3_1(
-        -6, var0, (Uri.decodeComponent('yQg') + ((var4 ?? var4) + var0)));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().foo1_0(
-        Map.unmodifiable({77: 'hG'}),
-        ((false
-                ? {
-                    88: 'Sv-EbnG',
-                    73: 'G',
-                    46: 'O#',
-                    16: 'm1nf(',
-                    91: 'F',
-                    11: 'Q+O@K',
-                    70: '3q\u2665BJ'
-                  }
-                : Map.identity()) ??
-            {
-              68: 'r',
-              56: 'IH&',
-              31: '9cqu',
-              49: '8ug',
-              84: 'mR2VyC',
-              41: 'gk&(asy'
-            }),
-        (var3 * sin(var3)));
-  } catch (e, st) {
-    count++;
-  }
-  try {
-    X3().run();
-  } catch (e, st) {
-    count++;
-  } finally {}
-  Expect.equals(-47639, var2);
-  Expect.equals(9, count);
-}
diff --git a/tests/language_2/vm/regression_38741.dart b/tests/language_2/vm/regression_38741_test.dart
similarity index 100%
rename from tests/language_2/vm/regression_38741.dart
rename to tests/language_2/vm/regression_38741_test.dart
diff --git a/tests/web/regress/190814734a_test.dart b/tests/web/regress/190814734a_test.dart
new file mode 100644
index 0000000..435d2f1
--- /dev/null
+++ b/tests/web/regress/190814734a_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// dart2jsOptions=--null-assertions
+
+@pragma('dart2js:noInline')
+confuse(x) => x;
+
+class MyObject {
+  // Operator == _not_ overridden.
+}
+
+class MyObject2 {
+  @override
+  bool operator ==(other) => other is MyObject2;
+}
+
+void main() {
+  confuse(MyObject2());
+  print(confuse(MyObject()) == confuse(null));
+}
diff --git a/tests/web/regress/190814734b_test.dart b/tests/web/regress/190814734b_test.dart
new file mode 100644
index 0000000..25fcc5d
--- /dev/null
+++ b/tests/web/regress/190814734b_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// dart2jsOptions=--null-assertions --enable-asserts
+
+@pragma('dart2js:noInline')
+confuse(x) => x;
+
+class MyObject {
+  // Operator == _not_ overridden.
+}
+
+class MyObject2 {
+  @override
+  bool operator ==(other) => other is MyObject2;
+}
+
+void main() {
+  confuse(MyObject2());
+  print(confuse(MyObject()) == confuse(null));
+}
diff --git a/tools/VERSION b/tools/VERSION
index a1c0feb..ba5c6a0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 223
+PRERELEASE 224
 PRERELEASE_PATCH 0
\ No newline at end of file
