diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 755066d4..5e18cbd 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -5015,7 +5015,7 @@
           if (optional(':', token.next!.next!)) {
             return parseLabeledStatement(token);
           }
-          if (looksLikeYieldStatement(token)) {
+          if (looksLikeYieldStatement(token, AwaitOrYieldContext.Statement)) {
             // Recovery: looks like an expression preceded by `yield` but not
             // inside an Async or AsyncStar context. parseYieldStatement will
             // report the error.
@@ -5035,7 +5035,7 @@
       return parseExpressionStatementOrConstDeclaration(token);
     } else if (identical(value, 'await')) {
       if (inPlainSync) {
-        if (!looksLikeAwaitExpression(token)) {
+        if (!looksLikeAwaitExpression(token, AwaitOrYieldContext.Statement)) {
           return parseExpressionStatementOrDeclaration(token);
         }
         // Recovery: looks like an expression preceded by `await`
@@ -5648,7 +5648,8 @@
     // Prefix:
     if (identical(value, 'await')) {
       if (inPlainSync) {
-        if (!looksLikeAwaitExpression(token)) {
+        if (!looksLikeAwaitExpression(
+            token, AwaitOrYieldContext.UnaryExpression)) {
           return parsePrimary(token, IdentifierContext.expression);
         }
         // Recovery: Looks like an expression preceded by `await`.
@@ -7562,7 +7563,8 @@
 
   /// Determine if the following tokens look like an expression and not a local
   /// variable or local function declaration.
-  bool looksLikeExpression(Token token) {
+  bool looksLikeExpressionAfterAwaitOrYield(
+      Token token, AwaitOrYieldContext context) {
     // TODO(srawlins): Consider parsing the potential expression once doing so
     //  does not modify the token stream. For now, use simple look ahead and
     //  ensure no false positives.
@@ -7572,14 +7574,36 @@
       token = token.next!;
       if (optional('(', token)) {
         token = token.endGroup!.next!;
-        if (isOneOf(token, [';', '.', '..', '?', '?.'])) {
+        if (isOneOf(token, const [';', '.', ',', '..', '?', '?.', ')'])) {
+          // E.g. (in a non-async function): `await f();`.
+          return true;
+        } else if (token.type.isBinaryOperator) {
+          // E.g. (in a non-async function):
+          // `await returnsFuture() + await returnsFuture()`.
           return true;
         }
-      } else if (isOneOf(token, ['.', ')', ']'])) {
+      } else if (isOneOf(token, const ['.', ')', ']'])) {
         // TODO(srawlins): Also consider when `token` is `;`. There is still not
         // good error recovery on `yield x;`. This would also require
         // modification to analyzer's
         // test_parseCompilationUnit_pseudo_asTypeName.
+
+        // E.g. (in a non-async function): `if (await f) {}`.
+        return true;
+      } else if (optional(',', token) &&
+          context == AwaitOrYieldContext.UnaryExpression) {
+        // E.g. (in a non-async function): `xor(await f, await f, await f);`,
+        // but not `await y, z` (`await` is a class here so it's declaring two
+        // variables).
+        return true;
+      } else if (token.type.isBinaryOperator) {
+        // E.g. (in a non-async function): (first part of) `await f + await f;`,
+        return true;
+      } else if (optional(';', token) &&
+          context == AwaitOrYieldContext.UnaryExpression) {
+        // E.g. (in a non-async function): (second part of) `await f + await f;`
+        // but not `await f;` (`await` is a class here so it's a variable
+        // declaration).
         return true;
       }
     } else if (token == Keyword.NULL) {
@@ -7596,20 +7620,20 @@
 
   /// Determine if the following tokens look like an 'await' expression
   /// and not a local variable or local function declaration.
-  bool looksLikeAwaitExpression(Token token) {
+  bool looksLikeAwaitExpression(Token token, AwaitOrYieldContext context) {
     token = token.next!;
     assert(optional('await', token));
 
-    return looksLikeExpression(token);
+    return looksLikeExpressionAfterAwaitOrYield(token, context);
   }
 
   /// Determine if the following tokens look like a 'yield' expression and not a
   /// local variable or local function declaration.
-  bool looksLikeYieldStatement(Token token) {
+  bool looksLikeYieldStatement(Token token, AwaitOrYieldContext context) {
     token = token.next!;
     assert(optional('yield', token));
 
-    return looksLikeExpression(token);
+    return looksLikeExpressionAfterAwaitOrYield(token, context);
   }
 
   /// ```
@@ -8724,3 +8748,5 @@
 
 // TODO(ahe): Remove when analyzer supports generalized function syntax.
 typedef _MessageWithArgument<T> = codes.Message Function(T);
+
+enum AwaitOrYieldContext { Statement, UnaryExpression }
diff --git a/pkg/analyzer/test/generated/class_member_parser_test.dart b/pkg/analyzer/test/generated/class_member_parser_test.dart
index 53ff979..7b39f70 100644
--- a/pkg/analyzer/test/generated/class_member_parser_test.dart
+++ b/pkg/analyzer/test/generated/class_member_parser_test.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -143,8 +144,8 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 13, 5),
-      expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 23, 5)
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 13, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 23, 5)
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -152,6 +153,134 @@
     expect(statement, isReturnStatement);
     Expression expression = (statement as ReturnStatement).expression!;
     expect(expression, isBinaryExpression);
+    expect((expression as BinaryExpression).leftOperand, isAwaitExpression);
+    expect(expression.rightOperand, isAwaitExpression);
+  }
+
+  void test_parseAwaitExpression_inSync_v1_49116() {
+    createParser('m() { await returnsFuture(); }');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 6, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isExpressionStatement);
+    Expression expression = (statement as ExpressionStatement).expression;
+    expect(expression, isAwaitExpression);
+  }
+
+  void test_parseAwaitExpression_inSync_v2_49116() {
+    createParser('''m() {
+      if (await returnsFuture()) {}
+      else if (!await returnsFuture()) {}
+    }''');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 16, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 58, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isIfStatement);
+    Expression expression = (statement as IfStatement).condition;
+    expect(expression, isAwaitExpression);
+    expect(statement.elseStatement, isNotNull);
+    Statement elseStatement = statement.elseStatement!;
+    expect(elseStatement, isIfStatement);
+    expression = (elseStatement as IfStatement).condition;
+    expect(expression, isPrefixExpression);
+    expect((expression as PrefixExpression).operator.lexeme, '!');
+    expression = expression.operand;
+    expect(expression, isAwaitExpression);
+  }
+
+  void test_parseAwaitExpression_inSync_v3_49116() {
+    createParser('m() { print(await returnsFuture()); }');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 12, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isExpressionStatement);
+    Expression expression = (statement as ExpressionStatement).expression;
+    expect(expression, isMethodInvocation);
+    expression = (expression as MethodInvocation).argumentList.arguments.single;
+    expect(expression, isAwaitExpression);
+  }
+
+  void test_parseAwaitExpression_inSync_v4_49116() {
+    createParser('''m() {
+      xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+    }''');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 16, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 39, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 62, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isExpressionStatement);
+    Expression expression = (statement as ExpressionStatement).expression;
+    expect(expression, isMethodInvocation);
+    expect((expression as MethodInvocation).argumentList.arguments.length, 3);
+    expect(expression.argumentList.arguments[0], isAwaitExpression);
+    expect(expression.argumentList.arguments[1], isAwaitExpression);
+    expect(expression.argumentList.arguments[2], isAwaitExpression);
+  }
+
+  void test_parseAwaitExpression_inSync_v5_49116() {
+    createParser('''m() {
+      await returnsFuture() ^ await returnsFuture();
+    }''');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 12, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 36, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isExpressionStatement);
+    Expression expression = (statement as ExpressionStatement).expression;
+    expect(expression, isBinaryExpression);
+    expect((expression as BinaryExpression).leftOperand, isAwaitExpression);
+    expect(expression.rightOperand, isAwaitExpression);
+    expect(expression.operator.lexeme, '^');
+  }
+
+  void test_parseAwaitExpression_inSync_v6_49116() {
+    createParser('''m() {
+      print(await returnsFuture() ^ await returnsFuture());
+    }''');
+    var method = parser.parseClassMember('C') as MethodDeclaration;
+    expect(method, isNotNull);
+    listener.assertErrors([
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 18, 5),
+      expectedError(CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT, 42, 5),
+    ]);
+    FunctionBody body = method.body;
+    expect(body, isBlockFunctionBody);
+    Statement statement = (body as BlockFunctionBody).block.statements[0];
+    expect(statement, isExpressionStatement);
+    Expression expression = (statement as ExpressionStatement).expression;
+    expect(expression, isMethodInvocation);
+    expression = (expression as MethodInvocation).argumentList.arguments.single;
+    expect(expression, isBinaryExpression);
+    expect((expression as BinaryExpression).leftOperand, isAwaitExpression);
+    expect(expression.rightOperand, isAwaitExpression);
+    expect(expression.operator.lexeme, '^');
   }
 
   void test_parseClassMember_constructor_initializers_conditional() {
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index a9606e7..c5ebdac 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -1002,7 +1002,8 @@
   @override
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
-    end('InvalidAwaitExpression');
+    // endInvalidAwaitExpression is started by beginAwaitExpression
+    end('AwaitExpression');
     super.endInvalidAwaitExpression(beginToken, endToken, errorCode);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart b/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart
index e99bf8e..b47706d 100644
--- a/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart
@@ -15,11 +15,7 @@
 
 @reflectiveTest
 class AwaitInWrongContextTest extends PubPackageResolutionTest {
-  @failingTest
   test_sync() async {
-    // This test requires better error recovery than we currently have. In
-    // particular, we need to be able to distinguish between an await expression
-    // in the wrong context, and the use of 'await' as an identifier.
     await assertErrorsInCode(r'''
 f(x) {
   return await x;
@@ -30,9 +26,6 @@
   }
 
   test_syncStar() async {
-    // This test requires better error recovery than we currently have. In
-    // particular, we need to be able to distinguish between an await expression
-    // in the wrong context, and the use of 'await' as an identifier.
     await assertErrorsInCode(r'''
 f(x) sync* {
   yield await x;
diff --git a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
index 79c6a54..4aa4e44 100644
--- a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
@@ -90,15 +90,15 @@
           parseStatement({)
             parseStatementX({)
               inPlainSync()
-              looksLikeAwaitExpression({)
-                looksLikeExpression(await)
+              looksLikeAwaitExpression({, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement({)
                 parseExpression({)
                   parsePrecedenceExpression({, 1, true)
                     parseUnaryExpression({, true)
                       inPlainSync()
-                      looksLikeAwaitExpression({)
-                        looksLikeExpression(await)
+                      looksLikeAwaitExpression({, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
                       parseAwaitExpression({, true)
                         listener: beginAwaitExpression(await)
                         parsePrecedenceExpression(await, 16, true)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart
new file mode 100644
index 0000000..8465f8a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart
@@ -0,0 +1,51 @@
+Future<bool> returnsFuture() => new Future.value(true);
+
+// Notice the missing async marker.
+void foo() {
+  await returnsFuture();
+  if (await returnsFuture()) {}
+  else if (!await returnsFuture()) {}
+  print(await returnsFuture());
+  xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+  await returnsFuture() ^ await returnsFuture();
+  print(await returnsFuture() ^ await returnsFuture());
+  await returnsFuture() + await returnsFuture();
+  print(await returnsFuture() + await returnsFuture());
+  await returnsFuture() - await returnsFuture();
+  print(await returnsFuture() - await returnsFuture());
+  !await returnsFuture() ^ !await returnsFuture();
+  print(!await returnsFuture() ^ !await returnsFuture());
+
+  var f = returnsFuture();
+  await f; // valid variable declaration.
+  if (await f) {}
+  else if (!await f) {}
+  print(await f);
+  xor(await f, await f, await f);
+  await f ^ await f;
+  print(await f ^ await f);
+  await f + await f;
+  print(await f + await f);
+  await f - await f;
+  print(await f - await f);
+  !await f ^ !await f;
+  print(!await f ^ !await f);
+
+  // Valid:
+  await x; // Valid.
+  await y, z; // Valid.
+  await x2 = await; // Valid.
+  await y2 = await, z2 = await; // Valid.
+  await foo(int bar) { // Valid.
+    return new await(); // Valid.
+  } // Valid.
+  await bar(await baz, await baz2, await baz3) { // Valid.
+    return baz; // Valid.
+  } // Valid.
+}
+
+bool xor(bool a, bool b, bool c) {
+  return b ^ b ^ c;
+}
+
+class await {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.expect
new file mode 100644
index 0000000..931a453
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.expect
@@ -0,0 +1,978 @@
+Problems reported:
+
+parser/error_recovery/issue_49116:5:3: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture();
+  ^^^^^
+
+parser/error_recovery/issue_49116:6:7: 'await' can only be used in 'async' or 'async*' methods.
+  if (await returnsFuture()) {}
+      ^^^^^
+
+parser/error_recovery/issue_49116:7:13: 'await' can only be used in 'async' or 'async*' methods.
+  else if (!await returnsFuture()) {}
+            ^^^^^
+
+parser/error_recovery/issue_49116:8:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture());
+        ^^^^^
+
+parser/error_recovery/issue_49116:9:7: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+      ^^^^^
+
+parser/error_recovery/issue_49116:9:30: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+                             ^^^^^
+
+parser/error_recovery/issue_49116:9:53: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+                                                    ^^^^^
+
+parser/error_recovery/issue_49116:10:3: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() ^ await returnsFuture();
+  ^^^^^
+
+parser/error_recovery/issue_49116:10:27: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() ^ await returnsFuture();
+                          ^^^^^
+
+parser/error_recovery/issue_49116:11:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() ^ await returnsFuture());
+        ^^^^^
+
+parser/error_recovery/issue_49116:11:33: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() ^ await returnsFuture());
+                                ^^^^^
+
+parser/error_recovery/issue_49116:12:3: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() + await returnsFuture();
+  ^^^^^
+
+parser/error_recovery/issue_49116:12:27: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() + await returnsFuture();
+                          ^^^^^
+
+parser/error_recovery/issue_49116:13:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() + await returnsFuture());
+        ^^^^^
+
+parser/error_recovery/issue_49116:13:33: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() + await returnsFuture());
+                                ^^^^^
+
+parser/error_recovery/issue_49116:14:3: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() - await returnsFuture();
+  ^^^^^
+
+parser/error_recovery/issue_49116:14:27: 'await' can only be used in 'async' or 'async*' methods.
+  await returnsFuture() - await returnsFuture();
+                          ^^^^^
+
+parser/error_recovery/issue_49116:15:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() - await returnsFuture());
+        ^^^^^
+
+parser/error_recovery/issue_49116:15:33: 'await' can only be used in 'async' or 'async*' methods.
+  print(await returnsFuture() - await returnsFuture());
+                                ^^^^^
+
+parser/error_recovery/issue_49116:16:4: 'await' can only be used in 'async' or 'async*' methods.
+  !await returnsFuture() ^ !await returnsFuture();
+   ^^^^^
+
+parser/error_recovery/issue_49116:16:29: 'await' can only be used in 'async' or 'async*' methods.
+  !await returnsFuture() ^ !await returnsFuture();
+                            ^^^^^
+
+parser/error_recovery/issue_49116:17:10: 'await' can only be used in 'async' or 'async*' methods.
+  print(!await returnsFuture() ^ !await returnsFuture());
+         ^^^^^
+
+parser/error_recovery/issue_49116:17:35: 'await' can only be used in 'async' or 'async*' methods.
+  print(!await returnsFuture() ^ !await returnsFuture());
+                                  ^^^^^
+
+parser/error_recovery/issue_49116:21:7: 'await' can only be used in 'async' or 'async*' methods.
+  if (await f) {}
+      ^^^^^
+
+parser/error_recovery/issue_49116:22:13: 'await' can only be used in 'async' or 'async*' methods.
+  else if (!await f) {}
+            ^^^^^
+
+parser/error_recovery/issue_49116:23:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f);
+        ^^^^^
+
+parser/error_recovery/issue_49116:24:7: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await f, await f, await f);
+      ^^^^^
+
+parser/error_recovery/issue_49116:24:16: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await f, await f, await f);
+               ^^^^^
+
+parser/error_recovery/issue_49116:24:25: 'await' can only be used in 'async' or 'async*' methods.
+  xor(await f, await f, await f);
+                        ^^^^^
+
+parser/error_recovery/issue_49116:25:3: 'await' can only be used in 'async' or 'async*' methods.
+  await f ^ await f;
+  ^^^^^
+
+parser/error_recovery/issue_49116:25:13: 'await' can only be used in 'async' or 'async*' methods.
+  await f ^ await f;
+            ^^^^^
+
+parser/error_recovery/issue_49116:26:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f ^ await f);
+        ^^^^^
+
+parser/error_recovery/issue_49116:26:19: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f ^ await f);
+                  ^^^^^
+
+parser/error_recovery/issue_49116:27:3: 'await' can only be used in 'async' or 'async*' methods.
+  await f + await f;
+  ^^^^^
+
+parser/error_recovery/issue_49116:27:13: 'await' can only be used in 'async' or 'async*' methods.
+  await f + await f;
+            ^^^^^
+
+parser/error_recovery/issue_49116:28:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f + await f);
+        ^^^^^
+
+parser/error_recovery/issue_49116:28:19: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f + await f);
+                  ^^^^^
+
+parser/error_recovery/issue_49116:29:3: 'await' can only be used in 'async' or 'async*' methods.
+  await f - await f;
+  ^^^^^
+
+parser/error_recovery/issue_49116:29:13: 'await' can only be used in 'async' or 'async*' methods.
+  await f - await f;
+            ^^^^^
+
+parser/error_recovery/issue_49116:30:9: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f - await f);
+        ^^^^^
+
+parser/error_recovery/issue_49116:30:19: 'await' can only be used in 'async' or 'async*' methods.
+  print(await f - await f);
+                  ^^^^^
+
+parser/error_recovery/issue_49116:31:4: 'await' can only be used in 'async' or 'async*' methods.
+  !await f ^ !await f;
+   ^^^^^
+
+parser/error_recovery/issue_49116:31:15: 'await' can only be used in 'async' or 'async*' methods.
+  !await f ^ !await f;
+              ^^^^^
+
+parser/error_recovery/issue_49116:32:10: 'await' can only be used in 'async' or 'async*' methods.
+  print(!await f ^ !await f);
+         ^^^^^
+
+parser/error_recovery/issue_49116:32:21: 'await' can only be used in 'async' or 'async*' methods.
+  print(!await f ^ !await f);
+                    ^^^^^
+
+beginCompilationUnit(Future)
+  beginMetadataStar(Future)
+  endMetadataStar(0)
+  beginTopLevelMember(Future)
+    beginTopLevelMethod(, null, null)
+      handleIdentifier(Future, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(bool, typeReference)
+        handleNoTypeArguments(>)
+        handleType(bool, null)
+      endTypeArguments(1, <, >)
+      handleType(Future, null)
+      handleIdentifier(returnsFuture, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginNewExpression(new)
+        handleIdentifier(Future, constructorReference)
+        beginConstructorReference(Future)
+          handleIdentifier(value, constructorReferenceContinuation)
+          handleQualified(.)
+          handleNoTypeArguments(()
+          handleNoConstructorReferenceContinuationAfterTypeArguments(()
+        endConstructorReference(Future, null, (, ConstructorReferenceContext.New)
+        beginArguments(()
+          handleLiteralBool(true)
+        endArguments(1, (, ))
+      endNewExpression(new)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(Future, null, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(foo, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginAwaitExpression(await)
+          handleIdentifier(returnsFuture, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(returnsFuture, ;)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        handleExpressionStatement(;)
+        beginIfStatement(if)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          handleParenthesizedCondition(()
+          beginThenStatement({)
+            beginBlock({, BlockKind(statement))
+            endBlock(0, {, }, BlockKind(statement))
+          endThenStatement(})
+          beginElseStatement(else)
+            beginIfStatement(if)
+              beginAwaitExpression(await)
+                handleIdentifier(returnsFuture, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                endArguments(0, (, ))
+                handleSend(returnsFuture, ))
+                handleRecoverableError(AwaitNotAsync, await, await)
+              endInvalidAwaitExpression(await, ), AwaitNotAsync)
+              handleUnaryPrefixExpression(!)
+              handleParenthesizedCondition(()
+              beginThenStatement({)
+                beginBlock({, BlockKind(statement))
+                endBlock(0, {, }, BlockKind(statement))
+              endThenStatement(})
+            endIfStatement(if, null)
+          endElseStatement(else)
+        endIfStatement(if, else)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(xor, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ,)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ,)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+        endArguments(3, (, ))
+        handleSend(xor, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(returnsFuture, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(returnsFuture, ^)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+        beginBinaryExpression(^)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(^)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ^)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+          beginBinaryExpression(^)
+            beginAwaitExpression(await)
+              handleIdentifier(returnsFuture, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(returnsFuture, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(^)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(returnsFuture, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(returnsFuture, +)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, +, AwaitNotAsync)
+        beginBinaryExpression(+)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, +)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, +, AwaitNotAsync)
+          beginBinaryExpression(+)
+            beginAwaitExpression(await)
+              handleIdentifier(returnsFuture, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(returnsFuture, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(+)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(returnsFuture, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(returnsFuture, -)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, -, AwaitNotAsync)
+        beginBinaryExpression(-)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(-)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, -)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, -, AwaitNotAsync)
+          beginBinaryExpression(-)
+            beginAwaitExpression(await)
+              handleIdentifier(returnsFuture, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(returnsFuture, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(-)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(returnsFuture, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend(returnsFuture, ^)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+        handleUnaryPrefixExpression(!)
+        beginBinaryExpression(^)
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+          handleUnaryPrefixExpression(!)
+        endBinaryExpression(^)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(returnsFuture, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(returnsFuture, ^)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+          handleUnaryPrefixExpression(!)
+          beginBinaryExpression(^)
+            beginAwaitExpression(await)
+              handleIdentifier(returnsFuture, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(returnsFuture, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+            handleUnaryPrefixExpression(!)
+          endBinaryExpression(^)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration(f, null, var)
+          handleIdentifier(f, localVariableDeclaration)
+          beginInitializedIdentifier(f)
+            beginVariableInitializer(=)
+              handleIdentifier(returnsFuture, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(returnsFuture, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(f)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleIdentifier(await, typeReference)
+        handleNoTypeArguments(f)
+        handleType(await, null)
+        beginVariablesDeclaration(f, null, null)
+          handleIdentifier(f, localVariableDeclaration)
+          beginInitializedIdentifier(f)
+            handleNoVariableInitializer(f)
+          endInitializedIdentifier(f)
+        endVariablesDeclaration(1, ;)
+        beginIfStatement(if)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(f, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          handleParenthesizedCondition(()
+          beginThenStatement({)
+            beginBlock({, BlockKind(statement))
+            endBlock(0, {, }, BlockKind(statement))
+          endThenStatement(})
+          beginElseStatement(else)
+            beginIfStatement(if)
+              beginAwaitExpression(await)
+                handleIdentifier(f, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(f, ))
+                handleRecoverableError(AwaitNotAsync, await, await)
+              endInvalidAwaitExpression(await, ), AwaitNotAsync)
+              handleUnaryPrefixExpression(!)
+              handleParenthesizedCondition(()
+              beginThenStatement({)
+                beginBlock({, BlockKind(statement))
+                endBlock(0, {, }, BlockKind(statement))
+              endThenStatement(})
+            endIfStatement(if, null)
+          endElseStatement(else)
+        endIfStatement(if, else)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(f, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(xor, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(f, ,)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(f, ,)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(f, ))
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ), AwaitNotAsync)
+        endArguments(3, (, ))
+        handleSend(xor, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(^)
+          handleNoArguments(^)
+          handleSend(f, ^)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+        beginBinaryExpression(^)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(;)
+            handleNoArguments(;)
+            handleSend(f, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(^)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(^)
+            handleNoArguments(^)
+            handleSend(f, ^)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+          beginBinaryExpression(^)
+            beginAwaitExpression(await)
+              handleIdentifier(f, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(f, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(^)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(+)
+          handleNoArguments(+)
+          handleSend(f, +)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, +, AwaitNotAsync)
+        beginBinaryExpression(+)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(;)
+            handleNoArguments(;)
+            handleSend(f, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(+)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(f, +)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, +, AwaitNotAsync)
+          beginBinaryExpression(+)
+            beginAwaitExpression(await)
+              handleIdentifier(f, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(f, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(+)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(f, -)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, -, AwaitNotAsync)
+        beginBinaryExpression(-)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(;)
+            handleNoArguments(;)
+            handleSend(f, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+        endBinaryExpression(-)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(f, -)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, -, AwaitNotAsync)
+          beginBinaryExpression(-)
+            beginAwaitExpression(await)
+              handleIdentifier(f, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(f, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+          endBinaryExpression(-)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginAwaitExpression(await)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(^)
+          handleNoArguments(^)
+          handleSend(f, ^)
+          handleRecoverableError(AwaitNotAsync, await, await)
+        endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+        handleUnaryPrefixExpression(!)
+        beginBinaryExpression(^)
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(;)
+            handleNoArguments(;)
+            handleSend(f, ;)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+          handleUnaryPrefixExpression(!)
+        endBinaryExpression(^)
+        handleExpressionStatement(;)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginAwaitExpression(await)
+            handleIdentifier(f, expression)
+            handleNoTypeArguments(^)
+            handleNoArguments(^)
+            handleSend(f, ^)
+            handleRecoverableError(AwaitNotAsync, await, await)
+          endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+          handleUnaryPrefixExpression(!)
+          beginBinaryExpression(^)
+            beginAwaitExpression(await)
+              handleIdentifier(f, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(f, ))
+              handleRecoverableError(AwaitNotAsync, await, await)
+            endInvalidAwaitExpression(await, ), AwaitNotAsync)
+            handleUnaryPrefixExpression(!)
+          endBinaryExpression(^)
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleIdentifier(await, typeReference)
+        handleNoTypeArguments(x)
+        handleType(await, null)
+        beginVariablesDeclaration(x, null, null)
+          handleIdentifier(x, localVariableDeclaration)
+          beginInitializedIdentifier(x)
+            handleNoVariableInitializer(x)
+          endInitializedIdentifier(x)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleIdentifier(await, typeReference)
+        handleNoTypeArguments(y)
+        handleType(await, null)
+        beginVariablesDeclaration(y, null, null)
+          handleIdentifier(y, localVariableDeclaration)
+          beginInitializedIdentifier(y)
+            handleNoVariableInitializer(y)
+          endInitializedIdentifier(y)
+          handleIdentifier(z, localVariableDeclaration)
+          beginInitializedIdentifier(z)
+            handleNoVariableInitializer(z)
+          endInitializedIdentifier(z)
+        endVariablesDeclaration(2, ;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleIdentifier(await, typeReference)
+        handleNoTypeArguments(x2)
+        handleType(await, null)
+        beginVariablesDeclaration(x2, null, null)
+          handleIdentifier(x2, localVariableDeclaration)
+          beginInitializedIdentifier(x2)
+            beginVariableInitializer(=)
+              handleIdentifier(await, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(await, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(x2)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleIdentifier(await, typeReference)
+        handleNoTypeArguments(y2)
+        handleType(await, null)
+        beginVariablesDeclaration(y2, null, null)
+          handleIdentifier(y2, localVariableDeclaration)
+          beginInitializedIdentifier(y2)
+            beginVariableInitializer(=)
+              handleIdentifier(await, expression)
+              handleNoTypeArguments(,)
+              handleNoArguments(,)
+              handleSend(await, ,)
+            endVariableInitializer(=)
+          endInitializedIdentifier(y2)
+          handleIdentifier(z2, localVariableDeclaration)
+          beginInitializedIdentifier(z2)
+            beginVariableInitializer(=)
+              handleIdentifier(await, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(await, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(z2)
+        endVariablesDeclaration(2, ;)
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleNoTypeVariables(()
+        beginLocalFunctionDeclaration(await)
+          handleIdentifier(await, typeReference)
+          handleNoTypeArguments(foo)
+          handleType(await, null)
+          beginFunctionName(foo)
+            handleIdentifier(foo, localFunctionDeclaration)
+          endFunctionName(await, ()
+          beginFormalParameters((, MemberKind.Local)
+            beginMetadataStar(int)
+            endMetadataStar(0)
+            beginFormalParameter(int, MemberKind.Local, null, null, null)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments(bar)
+              handleType(int, null)
+              handleIdentifier(bar, formalParameterDeclaration)
+              handleFormalParameterWithoutValue())
+            endFormalParameter(null, null, null, bar, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+          endFormalParameters(1, (, ), MemberKind.Local)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          beginBlockFunctionBody({)
+            beginReturnStatement(return)
+              beginNewExpression(new)
+                handleIdentifier(await, constructorReference)
+                beginConstructorReference(await)
+                  handleNoTypeArguments(()
+                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                endConstructorReference(await, null, (, ConstructorReferenceContext.New)
+                beginArguments(()
+                endArguments(0, (, ))
+              endNewExpression(new)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(1, {, })
+        endLocalFunctionDeclaration(})
+        beginMetadataStar(await)
+        endMetadataStar(0)
+        handleNoTypeVariables(()
+        beginLocalFunctionDeclaration(await)
+          handleIdentifier(await, typeReference)
+          handleNoTypeArguments(bar)
+          handleType(await, null)
+          beginFunctionName(bar)
+            handleIdentifier(bar, localFunctionDeclaration)
+          endFunctionName(await, ()
+          beginFormalParameters((, MemberKind.Local)
+            beginMetadataStar(await)
+            endMetadataStar(0)
+            beginFormalParameter(await, MemberKind.Local, null, null, null)
+              handleIdentifier(await, typeReference)
+              handleNoTypeArguments(baz)
+              handleType(await, null)
+              handleIdentifier(baz, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(,)
+            endFormalParameter(null, null, null, baz, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+            beginMetadataStar(await)
+            endMetadataStar(0)
+            beginFormalParameter(await, MemberKind.Local, null, null, null)
+              handleIdentifier(await, typeReference)
+              handleNoTypeArguments(baz2)
+              handleType(await, null)
+              handleIdentifier(baz2, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(,)
+            endFormalParameter(null, null, null, baz2, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+            beginMetadataStar(await)
+            endMetadataStar(0)
+            beginFormalParameter(await, MemberKind.Local, null, null, null)
+              handleIdentifier(await, typeReference)
+              handleNoTypeArguments(baz3)
+              handleType(await, null)
+              handleIdentifier(baz3, formalParameterDeclaration)
+              handleFormalParameterWithoutValue())
+            endFormalParameter(null, null, null, baz3, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+          endFormalParameters(3, (, ), MemberKind.Local)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          beginBlockFunctionBody({)
+            beginReturnStatement(return)
+              handleIdentifier(baz, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(baz, ;)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(1, {, })
+        endLocalFunctionDeclaration(})
+      endBlockFunctionBody(31, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(bool)
+  beginMetadataStar(bool)
+  endMetadataStar(0)
+  beginTopLevelMember(bool)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(bool, typeReference)
+      handleNoTypeArguments(xor)
+      handleType(bool, null)
+      handleIdentifier(xor, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(a)
+          handleType(bool, null)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b)
+          handleType(bool, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(c)
+          handleType(bool, null)
+          handleIdentifier(c, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(^)
+          handleNoArguments(^)
+          handleSend(b, ^)
+          beginBinaryExpression(^)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(^)
+            handleNoArguments(^)
+            handleSend(b, ^)
+          endBinaryExpression(^)
+          beginBinaryExpression(^)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(;)
+            handleNoArguments(;)
+            handleSend(c, ;)
+          endBinaryExpression(^)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(bool, null, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(await, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, await)
+      handleNoType(await)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect
new file mode 100644
index 0000000..bb92ce2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect
@@ -0,0 +1,2318 @@
+parseUnit(Future)
+  skipErrorTokens(Future)
+  listener: beginCompilationUnit(Future)
+  syntheticPreviousToken(Future)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(Future)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(Future)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleTypeWith1Argument', null, returnsFuture, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleIdentifier(Future, typeReference)
+        listener: beginTypeArguments(<)
+        listener: handleIdentifier(bool, typeReference)
+        listener: handleNoTypeArguments(>)
+        listener: handleType(bool, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(Future, null)
+        ensureIdentifierPotentiallyRecovered(>, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(returnsFuture, topLevelFunctionDeclaration)
+        parseMethodTypeVar(returnsFuture)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(returnsFuture, returnsFuture, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(returnsFuture, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true)
+                parseUnaryExpression(=>, true)
+                  parsePrimary(=>, expression)
+                    parseNewExpression(=>)
+                      isNextIdentifier(new)
+                      listener: beginNewExpression(new)
+                      parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                        ensureIdentifier(new, constructorReference)
+                          listener: handleIdentifier(Future, constructorReference)
+                        listener: beginConstructorReference(Future)
+                        parseQualifiedRestOpt(Future, constructorReferenceContinuation)
+                          parseQualifiedRest(Future, constructorReferenceContinuation)
+                            ensureIdentifier(., constructorReferenceContinuation)
+                              listener: handleIdentifier(value, constructorReferenceContinuation)
+                            listener: handleQualified(.)
+                        listener: handleNoTypeArguments(()
+                        listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                        listener: endConstructorReference(Future, null, (, ConstructorReferenceContext.New)
+                      parseConstructorInvocationArguments(value)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrimary((, expression)
+                                  parseLiteralBool(()
+                                    listener: handleLiteralBool(true)
+                          listener: endArguments(1, (, ))
+                      listener: endNewExpression(new)
+            ensureSemicolon())
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(Future, null, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(foo, topLevelFunctionDeclaration)
+        parseMethodTypeVar(foo)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(foo, foo, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(foo, 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(}, await)
+          parseStatement({)
+            parseStatementX({)
+              inPlainSync()
+              looksLikeAwaitExpression({, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement({)
+                parseExpression({)
+                  parsePrecedenceExpression({, 1, true)
+                    parseUnaryExpression({, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression({, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression({, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                looksLikeFunctionBody(;)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(returnsFuture, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(returnsFuture)
+                                    parseArguments(returnsFuture)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                  listener: handleSend(returnsFuture, ;)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                ensureSemicolon())
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          inPlainSync()
+                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                          parseAwaitExpression((, true)
+                            listener: beginAwaitExpression(await)
+                            parsePrecedenceExpression(await, 16, true)
+                              parseUnaryExpression(await, true)
+                                parsePrimary(await, expression)
+                                  parseSendOrFunctionLiteral(await, expression)
+                                    looksLikeFunctionBody())
+                                    parseSend(await, expression)
+                                      isNextIdentifier(await)
+                                      ensureIdentifier(await, expression)
+                                        listener: handleIdentifier(returnsFuture, expression)
+                                      listener: handleNoTypeArguments(()
+                                      parseArgumentsOpt(returnsFuture)
+                                        parseArguments(returnsFuture)
+                                          parseArgumentsRest(()
+                                            listener: beginArguments(()
+                                            listener: endArguments(0, (, ))
+                                      listener: handleSend(returnsFuture, ))
+                            inAsync()
+                            reportRecoverableError(await, AwaitNotAsync)
+                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                    ensureCloseParen(), ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement({)
+                parseStatement())
+                  parseStatementX())
+                    parseBlock(), BlockKind(statement))
+                      ensureBlock(), null, null)
+                      listener: beginBlock({, BlockKind(statement))
+                      notEofOrValue(}, })
+                      listener: endBlock(0, {, }, BlockKind(statement))
+                listener: endThenStatement(})
+                listener: beginElseStatement(else)
+                parseStatement(else)
+                  parseStatementX(else)
+                    parseIfStatement(else)
+                      listener: beginIfStatement(if)
+                      ensureParenthesizedCondition(if)
+                        parseExpressionInParenthesisRest(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrecedenceExpression(!, 16, true)
+                                  parseUnaryExpression(!, true)
+                                    inPlainSync()
+                                    looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                      looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                    parseAwaitExpression(!, true)
+                                      listener: beginAwaitExpression(await)
+                                      parsePrecedenceExpression(await, 16, true)
+                                        parseUnaryExpression(await, true)
+                                          parsePrimary(await, expression)
+                                            parseSendOrFunctionLiteral(await, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend(await, expression)
+                                                isNextIdentifier(await)
+                                                ensureIdentifier(await, expression)
+                                                  listener: handleIdentifier(returnsFuture, expression)
+                                                listener: handleNoTypeArguments(()
+                                                parseArgumentsOpt(returnsFuture)
+                                                  parseArguments(returnsFuture)
+                                                    parseArgumentsRest(()
+                                                      listener: beginArguments(()
+                                                      listener: endArguments(0, (, ))
+                                                listener: handleSend(returnsFuture, ))
+                                      inAsync()
+                                      reportRecoverableError(await, AwaitNotAsync)
+                                        listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                      listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                listener: handleUnaryPrefixExpression(!)
+                          ensureCloseParen(), ()
+                        listener: handleParenthesizedCondition(()
+                      listener: beginThenStatement({)
+                      parseStatement())
+                        parseStatementX())
+                          parseBlock(), BlockKind(statement))
+                            ensureBlock(), null, null)
+                            listener: beginBlock({, BlockKind(statement))
+                            notEofOrValue(}, })
+                            listener: endBlock(0, {, }, BlockKind(statement))
+                      listener: endThenStatement(})
+                      listener: endIfStatement(if, null)
+                listener: endElseStatement(else)
+                listener: endIfStatement(if, else)
+          notEofOrValue(}, print)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody())
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, ))
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, xor)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(xor)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(xor, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(xor)
+                                parseArguments(xor)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody(,)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, ,)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression(,, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression(,, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody(,)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, ,)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression(,, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression(,, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody())
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, ))
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(xor, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                looksLikeFunctionBody(^)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(returnsFuture, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(returnsFuture)
+                                    parseArguments(returnsFuture)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                  listener: handleSend(returnsFuture, ^)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                    listener: beginBinaryExpression(^)
+                    parsePrecedenceExpression(^, 11, true)
+                      parseUnaryExpression(^, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(^, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(^, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  looksLikeFunctionBody(;)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(returnsFuture, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(returnsFuture)
+                                      parseArguments(returnsFuture)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          listener: endArguments(0, (, ))
+                                    listener: handleSend(returnsFuture, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(^)
+                ensureSemicolon())
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody(^)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, ^)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                                        listener: beginBinaryExpression(^)
+                                        parsePrecedenceExpression(^, 11, true)
+                                          parseUnaryExpression(^, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(^, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(^, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      looksLikeFunctionBody())
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(returnsFuture, expression)
+                                                        listener: handleNoTypeArguments(()
+                                                        parseArgumentsOpt(returnsFuture)
+                                                          parseArguments(returnsFuture)
+                                                            parseArgumentsRest(()
+                                                              listener: beginArguments(()
+                                                              listener: endArguments(0, (, ))
+                                                        listener: handleSend(returnsFuture, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(^)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                looksLikeFunctionBody(+)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(returnsFuture, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(returnsFuture)
+                                    parseArguments(returnsFuture)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                  listener: handleSend(returnsFuture, +)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, +, AwaitNotAsync)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(+, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(+, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  looksLikeFunctionBody(;)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(returnsFuture, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(returnsFuture)
+                                      parseArguments(returnsFuture)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          listener: endArguments(0, (, ))
+                                    listener: handleSend(returnsFuture, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon())
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody(+)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, +)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, +, AwaitNotAsync)
+                                        listener: beginBinaryExpression(+)
+                                        parsePrecedenceExpression(+, 14, true)
+                                          parseUnaryExpression(+, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(+, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(+, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      looksLikeFunctionBody())
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(returnsFuture, expression)
+                                                        listener: handleNoTypeArguments(()
+                                                        parseArgumentsOpt(returnsFuture)
+                                                          parseArguments(returnsFuture)
+                                                            parseArgumentsRest(()
+                                                              listener: beginArguments(()
+                                                              listener: endArguments(0, (, ))
+                                                        listener: handleSend(returnsFuture, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(+)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                looksLikeFunctionBody(-)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(returnsFuture, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(returnsFuture)
+                                    parseArguments(returnsFuture)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                  listener: handleSend(returnsFuture, -)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, -, AwaitNotAsync)
+                    listener: beginBinaryExpression(-)
+                    parsePrecedenceExpression(-, 14, true)
+                      parseUnaryExpression(-, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(-, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(-, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  looksLikeFunctionBody(;)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(returnsFuture, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(returnsFuture)
+                                      parseArguments(returnsFuture)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          listener: endArguments(0, (, ))
+                                    listener: handleSend(returnsFuture, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(-)
+                ensureSemicolon())
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    looksLikeFunctionBody(-)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(returnsFuture, expression)
+                                                      listener: handleNoTypeArguments(()
+                                                      parseArgumentsOpt(returnsFuture)
+                                                        parseArguments(returnsFuture)
+                                                          parseArgumentsRest(()
+                                                            listener: beginArguments(()
+                                                            listener: endArguments(0, (, ))
+                                                      listener: handleSend(returnsFuture, -)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, -, AwaitNotAsync)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(-, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(-, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      looksLikeFunctionBody())
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(returnsFuture, expression)
+                                                        listener: handleNoTypeArguments(()
+                                                        parseArgumentsOpt(returnsFuture)
+                                                          parseArguments(returnsFuture)
+                                                            parseArgumentsRest(()
+                                                              listener: beginArguments(()
+                                                              listener: endArguments(0, (, ))
+                                                        listener: handleSend(returnsFuture, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(-)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, !)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(!)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrecedenceExpression(!, 16, true)
+                            parseUnaryExpression(!, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parseAwaitExpression(!, true)
+                                listener: beginAwaitExpression(await)
+                                parsePrecedenceExpression(await, 16, true)
+                                  parseUnaryExpression(await, true)
+                                    parsePrimary(await, expression)
+                                      parseSendOrFunctionLiteral(await, expression)
+                                        looksLikeFunctionBody(^)
+                                        parseSend(await, expression)
+                                          isNextIdentifier(await)
+                                          ensureIdentifier(await, expression)
+                                            listener: handleIdentifier(returnsFuture, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(returnsFuture)
+                                            parseArguments(returnsFuture)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                listener: endArguments(0, (, ))
+                                          listener: handleSend(returnsFuture, ^)
+                                inAsync()
+                                reportRecoverableError(await, AwaitNotAsync)
+                                  listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                          listener: handleUnaryPrefixExpression(!)
+                        listener: beginBinaryExpression(^)
+                        parsePrecedenceExpression(^, 11, true)
+                          parseUnaryExpression(^, true)
+                            parsePrecedenceExpression(!, 16, true)
+                              parseUnaryExpression(!, true)
+                                inPlainSync()
+                                looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                  looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                parseAwaitExpression(!, true)
+                                  listener: beginAwaitExpression(await)
+                                  parsePrecedenceExpression(await, 16, true)
+                                    parseUnaryExpression(await, true)
+                                      parsePrimary(await, expression)
+                                        parseSendOrFunctionLiteral(await, expression)
+                                          looksLikeFunctionBody(;)
+                                          parseSend(await, expression)
+                                            isNextIdentifier(await)
+                                            ensureIdentifier(await, expression)
+                                              listener: handleIdentifier(returnsFuture, expression)
+                                            listener: handleNoTypeArguments(()
+                                            parseArgumentsOpt(returnsFuture)
+                                              parseArguments(returnsFuture)
+                                                parseArgumentsRest(()
+                                                  listener: beginArguments(()
+                                                  listener: endArguments(0, (, ))
+                                            listener: handleSend(returnsFuture, ;)
+                                  inAsync()
+                                  reportRecoverableError(await, AwaitNotAsync)
+                                    listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                  listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                            listener: handleUnaryPrefixExpression(!)
+                        listener: endBinaryExpression(^)
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrecedenceExpression(!, 16, true)
+                                            parseUnaryExpression(!, true)
+                                              inPlainSync()
+                                              looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                              parseAwaitExpression(!, true)
+                                                listener: beginAwaitExpression(await)
+                                                parsePrecedenceExpression(await, 16, true)
+                                                  parseUnaryExpression(await, true)
+                                                    parsePrimary(await, expression)
+                                                      parseSendOrFunctionLiteral(await, expression)
+                                                        looksLikeFunctionBody(^)
+                                                        parseSend(await, expression)
+                                                          isNextIdentifier(await)
+                                                          ensureIdentifier(await, expression)
+                                                            listener: handleIdentifier(returnsFuture, expression)
+                                                          listener: handleNoTypeArguments(()
+                                                          parseArgumentsOpt(returnsFuture)
+                                                            parseArguments(returnsFuture)
+                                                              parseArgumentsRest(()
+                                                                listener: beginArguments(()
+                                                                listener: endArguments(0, (, ))
+                                                          listener: handleSend(returnsFuture, ^)
+                                                inAsync()
+                                                reportRecoverableError(await, AwaitNotAsync)
+                                                  listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                                listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                                          listener: handleUnaryPrefixExpression(!)
+                                        listener: beginBinaryExpression(^)
+                                        parsePrecedenceExpression(^, 11, true)
+                                          parseUnaryExpression(^, true)
+                                            parsePrecedenceExpression(!, 16, true)
+                                              parseUnaryExpression(!, true)
+                                                inPlainSync()
+                                                looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                                  looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                                parseAwaitExpression(!, true)
+                                                  listener: beginAwaitExpression(await)
+                                                  parsePrecedenceExpression(await, 16, true)
+                                                    parseUnaryExpression(await, true)
+                                                      parsePrimary(await, expression)
+                                                        parseSendOrFunctionLiteral(await, expression)
+                                                          looksLikeFunctionBody())
+                                                          parseSend(await, expression)
+                                                            isNextIdentifier(await)
+                                                            ensureIdentifier(await, expression)
+                                                              listener: handleIdentifier(returnsFuture, expression)
+                                                            listener: handleNoTypeArguments(()
+                                                            parseArgumentsOpt(returnsFuture)
+                                                              parseArguments(returnsFuture)
+                                                                parseArgumentsRest(()
+                                                                  listener: beginArguments(()
+                                                                  listener: endArguments(0, (, ))
+                                                            listener: handleSend(returnsFuture, ))
+                                                  inAsync()
+                                                  reportRecoverableError(await, AwaitNotAsync)
+                                                    listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                                  listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                            listener: handleUnaryPrefixExpression(!)
+                                        listener: endBinaryExpression(^)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, var)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, false)
+                looksLikeLocalFunction(f)
+                listener: beginMetadataStar(var)
+                listener: endMetadataStar(0)
+                listener: handleNoType(var)
+                listener: beginVariablesDeclaration(f, null, var)
+                parseVariablesDeclarationRest(var, true)
+                  parseOptionallyInitializedIdentifier(var)
+                    ensureIdentifier(var, localVariableDeclaration)
+                      listener: handleIdentifier(f, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(f)
+                    parseVariableInitializerOpt(f)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseSendOrFunctionLiteral(=, expression)
+                                looksLikeFunctionBody(;)
+                                parseSend(=, expression)
+                                  isNextIdentifier(=)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(returnsFuture, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(returnsFuture)
+                                    parseArguments(returnsFuture)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                  listener: handleSend(returnsFuture, ;)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(f)
+                  ensureSemicolon())
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(f)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(f)
+                  listener: handleType(await, null)
+                  listener: beginVariablesDeclaration(f, null, null)
+                  parseVariablesDeclarationRest(await, true)
+                    parseOptionallyInitializedIdentifier(await)
+                      ensureIdentifier(await, localVariableDeclaration)
+                        listener: handleIdentifier(f, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(f)
+                      parseVariableInitializerOpt(f)
+                        listener: handleNoVariableInitializer(f)
+                      listener: endInitializedIdentifier(f)
+                    ensureSemicolon(f)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if)
+                  parseExpressionInParenthesisRest(()
+                    parseExpression(()
+                      parsePrecedenceExpression((, 1, true)
+                        parseUnaryExpression((, true)
+                          inPlainSync()
+                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                          parseAwaitExpression((, true)
+                            listener: beginAwaitExpression(await)
+                            parsePrecedenceExpression(await, 16, true)
+                              parseUnaryExpression(await, true)
+                                parsePrimary(await, expression)
+                                  parseSendOrFunctionLiteral(await, expression)
+                                    parseSend(await, expression)
+                                      isNextIdentifier(await)
+                                      ensureIdentifier(await, expression)
+                                        listener: handleIdentifier(f, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt(f)
+                                        listener: handleNoArguments())
+                                      listener: handleSend(f, ))
+                            inAsync()
+                            reportRecoverableError(await, AwaitNotAsync)
+                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                    ensureCloseParen(f, ()
+                  listener: handleParenthesizedCondition(()
+                listener: beginThenStatement({)
+                parseStatement())
+                  parseStatementX())
+                    parseBlock(), BlockKind(statement))
+                      ensureBlock(), null, null)
+                      listener: beginBlock({, BlockKind(statement))
+                      notEofOrValue(}, })
+                      listener: endBlock(0, {, }, BlockKind(statement))
+                listener: endThenStatement(})
+                listener: beginElseStatement(else)
+                parseStatement(else)
+                  parseStatementX(else)
+                    parseIfStatement(else)
+                      listener: beginIfStatement(if)
+                      ensureParenthesizedCondition(if)
+                        parseExpressionInParenthesisRest(()
+                          parseExpression(()
+                            parsePrecedenceExpression((, 1, true)
+                              parseUnaryExpression((, true)
+                                parsePrecedenceExpression(!, 16, true)
+                                  parseUnaryExpression(!, true)
+                                    inPlainSync()
+                                    looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                      looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                    parseAwaitExpression(!, true)
+                                      listener: beginAwaitExpression(await)
+                                      parsePrecedenceExpression(await, 16, true)
+                                        parseUnaryExpression(await, true)
+                                          parsePrimary(await, expression)
+                                            parseSendOrFunctionLiteral(await, expression)
+                                              parseSend(await, expression)
+                                                isNextIdentifier(await)
+                                                ensureIdentifier(await, expression)
+                                                  listener: handleIdentifier(f, expression)
+                                                listener: handleNoTypeArguments())
+                                                parseArgumentsOpt(f)
+                                                  listener: handleNoArguments())
+                                                listener: handleSend(f, ))
+                                      inAsync()
+                                      reportRecoverableError(await, AwaitNotAsync)
+                                        listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                      listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                listener: handleUnaryPrefixExpression(!)
+                          ensureCloseParen(f, ()
+                        listener: handleParenthesizedCondition(()
+                      listener: beginThenStatement({)
+                      parseStatement())
+                        parseStatementX())
+                          parseBlock(), BlockKind(statement))
+                            ensureBlock(), null, null)
+                            listener: beginBlock({, BlockKind(statement))
+                            notEofOrValue(}, })
+                            listener: endBlock(0, {, }, BlockKind(statement))
+                      listener: endThenStatement(})
+                      listener: endIfStatement(if, null)
+                listener: endElseStatement(else)
+                listener: endIfStatement(if, else)
+          notEofOrValue(}, print)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(f, ))
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, xor)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(xor)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(xor, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(xor)
+                                parseArguments(xor)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments(,)
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments(,)
+                                                      listener: handleSend(f, ,)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression(,, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression(,, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments(,)
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments(,)
+                                                      listener: handleSend(f, ,)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ,, AwaitNotAsync)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression(,, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression(,, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(f, ))
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(xor, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(f, expression)
+                                  listener: handleNoTypeArguments(^)
+                                  parseArgumentsOpt(f)
+                                    listener: handleNoArguments(^)
+                                  listener: handleSend(f, ^)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                    listener: beginBinaryExpression(^)
+                    parsePrecedenceExpression(^, 11, true)
+                      parseUnaryExpression(^, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(^, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(^, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(f, expression)
+                                    listener: handleNoTypeArguments(;)
+                                    parseArgumentsOpt(f)
+                                      listener: handleNoArguments(;)
+                                    listener: handleSend(f, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(^)
+                ensureSemicolon(f)
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments(^)
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments(^)
+                                                      listener: handleSend(f, ^)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                                        listener: beginBinaryExpression(^)
+                                        parsePrecedenceExpression(^, 11, true)
+                                          parseUnaryExpression(^, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(^, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(^, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(f, expression)
+                                                        listener: handleNoTypeArguments())
+                                                        parseArgumentsOpt(f)
+                                                          listener: handleNoArguments())
+                                                        listener: handleSend(f, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(^)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(f, expression)
+                                  listener: handleNoTypeArguments(+)
+                                  parseArgumentsOpt(f)
+                                    listener: handleNoArguments(+)
+                                  listener: handleSend(f, +)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, +, AwaitNotAsync)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true)
+                      parseUnaryExpression(+, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(+, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(+, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(f, expression)
+                                    listener: handleNoTypeArguments(;)
+                                    parseArgumentsOpt(f)
+                                      listener: handleNoArguments(;)
+                                    listener: handleSend(f, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(+)
+                ensureSemicolon(f)
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments(+)
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments(+)
+                                                      listener: handleSend(f, +)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, +, AwaitNotAsync)
+                                        listener: beginBinaryExpression(+)
+                                        parsePrecedenceExpression(+, 14, true)
+                                          parseUnaryExpression(+, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(+, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(+, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(f, expression)
+                                                        listener: handleNoTypeArguments())
+                                                        parseArgumentsOpt(f)
+                                                          listener: handleNoArguments())
+                                                        listener: handleSend(f, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(+)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatement(;)
+                parseExpression(;)
+                  parsePrecedenceExpression(;, 1, true)
+                    parseUnaryExpression(;, true)
+                      inPlainSync()
+                      looksLikeAwaitExpression(;, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parseAwaitExpression(;, true)
+                        listener: beginAwaitExpression(await)
+                        parsePrecedenceExpression(await, 16, true)
+                          parseUnaryExpression(await, true)
+                            parsePrimary(await, expression)
+                              parseSendOrFunctionLiteral(await, expression)
+                                parseSend(await, expression)
+                                  isNextIdentifier(await)
+                                  ensureIdentifier(await, expression)
+                                    listener: handleIdentifier(f, expression)
+                                  listener: handleNoTypeArguments(-)
+                                  parseArgumentsOpt(f)
+                                    listener: handleNoArguments(-)
+                                  listener: handleSend(f, -)
+                        inAsync()
+                        reportRecoverableError(await, AwaitNotAsync)
+                          listener: handleRecoverableError(AwaitNotAsync, await, await)
+                        listener: endInvalidAwaitExpression(await, -, AwaitNotAsync)
+                    listener: beginBinaryExpression(-)
+                    parsePrecedenceExpression(-, 14, true)
+                      parseUnaryExpression(-, true)
+                        inPlainSync()
+                        looksLikeAwaitExpression(-, AwaitOrYieldContext.UnaryExpression)
+                          looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                        parseAwaitExpression(-, true)
+                          listener: beginAwaitExpression(await)
+                          parsePrecedenceExpression(await, 16, true)
+                            parseUnaryExpression(await, true)
+                              parsePrimary(await, expression)
+                                parseSendOrFunctionLiteral(await, expression)
+                                  parseSend(await, expression)
+                                    isNextIdentifier(await)
+                                    ensureIdentifier(await, expression)
+                                      listener: handleIdentifier(f, expression)
+                                    listener: handleNoTypeArguments(;)
+                                    parseArgumentsOpt(f)
+                                      listener: handleNoArguments(;)
+                                    listener: handleSend(f, ;)
+                          inAsync()
+                          reportRecoverableError(await, AwaitNotAsync)
+                            listener: handleRecoverableError(AwaitNotAsync, await, await)
+                          listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                    listener: endBinaryExpression(-)
+                ensureSemicolon(f)
+                listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          inPlainSync()
+                                          looksLikeAwaitExpression((, AwaitOrYieldContext.UnaryExpression)
+                                            looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                          parseAwaitExpression((, true)
+                                            listener: beginAwaitExpression(await)
+                                            parsePrecedenceExpression(await, 16, true)
+                                              parseUnaryExpression(await, true)
+                                                parsePrimary(await, expression)
+                                                  parseSendOrFunctionLiteral(await, expression)
+                                                    parseSend(await, expression)
+                                                      isNextIdentifier(await)
+                                                      ensureIdentifier(await, expression)
+                                                        listener: handleIdentifier(f, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(f)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(f, -)
+                                            inAsync()
+                                            reportRecoverableError(await, AwaitNotAsync)
+                                              listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                            listener: endInvalidAwaitExpression(await, -, AwaitNotAsync)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true)
+                                          parseUnaryExpression(-, true)
+                                            inPlainSync()
+                                            looksLikeAwaitExpression(-, AwaitOrYieldContext.UnaryExpression)
+                                              looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                            parseAwaitExpression(-, true)
+                                              listener: beginAwaitExpression(await)
+                                              parsePrecedenceExpression(await, 16, true)
+                                                parseUnaryExpression(await, true)
+                                                  parsePrimary(await, expression)
+                                                    parseSendOrFunctionLiteral(await, expression)
+                                                      parseSend(await, expression)
+                                                        isNextIdentifier(await)
+                                                        ensureIdentifier(await, expression)
+                                                          listener: handleIdentifier(f, expression)
+                                                        listener: handleNoTypeArguments())
+                                                        parseArgumentsOpt(f)
+                                                          listener: handleNoArguments())
+                                                        listener: handleSend(f, ))
+                                              inAsync()
+                                              reportRecoverableError(await, AwaitNotAsync)
+                                                listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                              listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                        listener: endBinaryExpression(-)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, !)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(!)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrecedenceExpression(!, 16, true)
+                            parseUnaryExpression(!, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parseAwaitExpression(!, true)
+                                listener: beginAwaitExpression(await)
+                                parsePrecedenceExpression(await, 16, true)
+                                  parseUnaryExpression(await, true)
+                                    parsePrimary(await, expression)
+                                      parseSendOrFunctionLiteral(await, expression)
+                                        parseSend(await, expression)
+                                          isNextIdentifier(await)
+                                          ensureIdentifier(await, expression)
+                                            listener: handleIdentifier(f, expression)
+                                          listener: handleNoTypeArguments(^)
+                                          parseArgumentsOpt(f)
+                                            listener: handleNoArguments(^)
+                                          listener: handleSend(f, ^)
+                                inAsync()
+                                reportRecoverableError(await, AwaitNotAsync)
+                                  listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                          listener: handleUnaryPrefixExpression(!)
+                        listener: beginBinaryExpression(^)
+                        parsePrecedenceExpression(^, 11, true)
+                          parseUnaryExpression(^, true)
+                            parsePrecedenceExpression(!, 16, true)
+                              parseUnaryExpression(!, true)
+                                inPlainSync()
+                                looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                  looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                parseAwaitExpression(!, true)
+                                  listener: beginAwaitExpression(await)
+                                  parsePrecedenceExpression(await, 16, true)
+                                    parseUnaryExpression(await, true)
+                                      parsePrimary(await, expression)
+                                        parseSendOrFunctionLiteral(await, expression)
+                                          parseSend(await, expression)
+                                            isNextIdentifier(await)
+                                            ensureIdentifier(await, expression)
+                                              listener: handleIdentifier(f, expression)
+                                            listener: handleNoTypeArguments(;)
+                                            parseArgumentsOpt(f)
+                                              listener: handleNoArguments(;)
+                                            listener: handleSend(f, ;)
+                                  inAsync()
+                                  reportRecoverableError(await, AwaitNotAsync)
+                                    listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                  listener: endInvalidAwaitExpression(await, ;, AwaitNotAsync)
+                            listener: handleUnaryPrefixExpression(!)
+                        listener: endBinaryExpression(^)
+                    ensureSemicolon(f)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, print)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrecedenceExpression(!, 16, true)
+                                            parseUnaryExpression(!, true)
+                                              inPlainSync()
+                                              looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                              parseAwaitExpression(!, true)
+                                                listener: beginAwaitExpression(await)
+                                                parsePrecedenceExpression(await, 16, true)
+                                                  parseUnaryExpression(await, true)
+                                                    parsePrimary(await, expression)
+                                                      parseSendOrFunctionLiteral(await, expression)
+                                                        parseSend(await, expression)
+                                                          isNextIdentifier(await)
+                                                          ensureIdentifier(await, expression)
+                                                            listener: handleIdentifier(f, expression)
+                                                          listener: handleNoTypeArguments(^)
+                                                          parseArgumentsOpt(f)
+                                                            listener: handleNoArguments(^)
+                                                          listener: handleSend(f, ^)
+                                                inAsync()
+                                                reportRecoverableError(await, AwaitNotAsync)
+                                                  listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                                listener: endInvalidAwaitExpression(await, ^, AwaitNotAsync)
+                                          listener: handleUnaryPrefixExpression(!)
+                                        listener: beginBinaryExpression(^)
+                                        parsePrecedenceExpression(^, 11, true)
+                                          parseUnaryExpression(^, true)
+                                            parsePrecedenceExpression(!, 16, true)
+                                              parseUnaryExpression(!, true)
+                                                inPlainSync()
+                                                looksLikeAwaitExpression(!, AwaitOrYieldContext.UnaryExpression)
+                                                  looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                                                parseAwaitExpression(!, true)
+                                                  listener: beginAwaitExpression(await)
+                                                  parsePrecedenceExpression(await, 16, true)
+                                                    parseUnaryExpression(await, true)
+                                                      parsePrimary(await, expression)
+                                                        parseSendOrFunctionLiteral(await, expression)
+                                                          parseSend(await, expression)
+                                                            isNextIdentifier(await)
+                                                            ensureIdentifier(await, expression)
+                                                              listener: handleIdentifier(f, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(f)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(f, ))
+                                                  inAsync()
+                                                  reportRecoverableError(await, AwaitNotAsync)
+                                                    listener: handleRecoverableError(AwaitNotAsync, await, await)
+                                                  listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
+                                            listener: handleUnaryPrefixExpression(!)
+                                        listener: endBinaryExpression(^)
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(x)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(x)
+                  listener: handleType(await, null)
+                  listener: beginVariablesDeclaration(x, null, null)
+                  parseVariablesDeclarationRest(await, true)
+                    parseOptionallyInitializedIdentifier(await)
+                      ensureIdentifier(await, localVariableDeclaration)
+                        listener: handleIdentifier(x, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(x)
+                      parseVariableInitializerOpt(x)
+                        listener: handleNoVariableInitializer(x)
+                      listener: endInitializedIdentifier(x)
+                    ensureSemicolon(x)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(y)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(y)
+                  listener: handleType(await, null)
+                  listener: beginVariablesDeclaration(y, null, null)
+                  parseVariablesDeclarationRest(await, true)
+                    parseOptionallyInitializedIdentifier(await)
+                      ensureIdentifier(await, localVariableDeclaration)
+                        listener: handleIdentifier(y, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(y)
+                      parseVariableInitializerOpt(y)
+                        listener: handleNoVariableInitializer(y)
+                      listener: endInitializedIdentifier(y)
+                    parseOptionallyInitializedIdentifier(,)
+                      ensureIdentifier(,, localVariableDeclaration)
+                        listener: handleIdentifier(z, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(z)
+                      parseVariableInitializerOpt(z)
+                        listener: handleNoVariableInitializer(z)
+                      listener: endInitializedIdentifier(z)
+                    ensureSemicolon(z)
+                    listener: endVariablesDeclaration(2, ;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(x2)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(x2)
+                  listener: handleType(await, null)
+                  listener: beginVariablesDeclaration(x2, null, null)
+                  parseVariablesDeclarationRest(await, true)
+                    parseOptionallyInitializedIdentifier(await)
+                      ensureIdentifier(await, localVariableDeclaration)
+                        listener: handleIdentifier(x2, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(x2)
+                      parseVariableInitializerOpt(x2)
+                        listener: beginVariableInitializer(=)
+                        parseExpression(=)
+                          parsePrecedenceExpression(=, 1, true)
+                            parseUnaryExpression(=, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(=, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parsePrimary(=, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(=, expression)
+                                  parseSend(=, expression)
+                                    isNextIdentifier(=)
+                                    ensureIdentifier(=, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(await, expression)
+                                    listener: handleNoTypeArguments(;)
+                                    parseArgumentsOpt(await)
+                                      listener: handleNoArguments(;)
+                                    listener: handleSend(await, ;)
+                        listener: endVariableInitializer(=)
+                      listener: endInitializedIdentifier(x2)
+                    ensureSemicolon(await)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(y2)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(y2)
+                  listener: handleType(await, null)
+                  listener: beginVariablesDeclaration(y2, null, null)
+                  parseVariablesDeclarationRest(await, true)
+                    parseOptionallyInitializedIdentifier(await)
+                      ensureIdentifier(await, localVariableDeclaration)
+                        listener: handleIdentifier(y2, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(y2)
+                      parseVariableInitializerOpt(y2)
+                        listener: beginVariableInitializer(=)
+                        parseExpression(=)
+                          parsePrecedenceExpression(=, 1, true)
+                            parseUnaryExpression(=, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(=, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parsePrimary(=, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(=, expression)
+                                  parseSend(=, expression)
+                                    isNextIdentifier(=)
+                                    ensureIdentifier(=, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(await, expression)
+                                    listener: handleNoTypeArguments(,)
+                                    parseArgumentsOpt(await)
+                                      listener: handleNoArguments(,)
+                                    listener: handleSend(await, ,)
+                        listener: endVariableInitializer(=)
+                      listener: endInitializedIdentifier(y2)
+                    parseOptionallyInitializedIdentifier(,)
+                      ensureIdentifier(,, localVariableDeclaration)
+                        listener: handleIdentifier(z2, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(z2)
+                      parseVariableInitializerOpt(z2)
+                        listener: beginVariableInitializer(=)
+                        parseExpression(=)
+                          parsePrecedenceExpression(=, 1, true)
+                            parseUnaryExpression(=, true)
+                              inPlainSync()
+                              looksLikeAwaitExpression(=, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parsePrimary(=, expression)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(=, expression)
+                                  parseSend(=, expression)
+                                    isNextIdentifier(=)
+                                    ensureIdentifier(=, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(await, expression)
+                                    listener: handleNoTypeArguments(;)
+                                    parseArgumentsOpt(await)
+                                      listener: handleNoArguments(;)
+                                    listener: handleSend(await, ;)
+                        listener: endVariableInitializer(=)
+                      listener: endInitializedIdentifier(z2)
+                    ensureSemicolon(await)
+                    listener: endVariablesDeclaration(2, ;)
+          notEofOrValue(}, await)
+          parseStatement(;)
+            parseStatementX(;)
+              inPlainSync()
+              looksLikeAwaitExpression(;, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(foo)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleNoTypeVariables(()
+                  listener: beginLocalFunctionDeclaration(await)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(foo)
+                  listener: handleType(await, null)
+                  parseNamedFunctionRest(await, await, foo, false)
+                    listener: beginFunctionName(foo)
+                    ensureIdentifier(await, localFunctionDeclaration)
+                      listener: handleIdentifier(foo, localFunctionDeclaration)
+                    listener: endFunctionName(await, ()
+                    parseFormalParametersRequiredOpt(foo, MemberKind.Local)
+                      parseFormalParametersRest((, MemberKind.Local)
+                        listener: beginFormalParameters((, MemberKind.Local)
+                        parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(int)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(int, MemberKind.Local, null, null, null)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(bar)
+                          listener: handleType(int, null)
+                          ensureIdentifier(int, formalParameterDeclaration)
+                            listener: handleIdentifier(bar, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue())
+                          listener: endFormalParameter(null, null, null, bar, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+                        listener: endFormalParameters(1, (, ), MemberKind.Local)
+                    parseInitializersOpt())
+                      listener: handleNoInitializers()
+                    parseAsyncOptBody(), false, false)
+                      parseAsyncModifierOpt())
+                        listener: handleAsyncModifier(null, null)
+                        inPlainSync()
+                      parseFunctionBody(), false, false)
+                        listener: beginBlockFunctionBody({)
+                        notEofOrValue(}, return)
+                        parseStatement({)
+                          parseStatementX({)
+                            parseReturnStatement({)
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                parsePrecedenceExpression(return, 1, true)
+                                  parseUnaryExpression(return, true)
+                                    parsePrimary(return, expression)
+                                      parseNewExpression(return)
+                                        isNextIdentifier(new)
+                                        listener: beginNewExpression(new)
+                                        parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                                          ensureIdentifier(new, constructorReference)
+                                            inPlainSync()
+                                            listener: handleIdentifier(await, constructorReference)
+                                          listener: beginConstructorReference(await)
+                                          parseQualifiedRestOpt(await, constructorReferenceContinuation)
+                                          listener: handleNoTypeArguments(()
+                                          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+                                          listener: endConstructorReference(await, null, (, ConstructorReferenceContext.New)
+                                        parseConstructorInvocationArguments(await)
+                                          parseArgumentsRest(()
+                                            listener: beginArguments(()
+                                            listener: endArguments(0, (, ))
+                                        listener: endNewExpression(new)
+                              ensureSemicolon())
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        notEofOrValue(}, })
+                        listener: endBlockFunctionBody(1, {, })
+                    listener: endLocalFunctionDeclaration(})
+          notEofOrValue(}, await)
+          parseStatement(})
+            parseStatementX(})
+              inPlainSync()
+              looksLikeAwaitExpression(}, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(bar)
+                  listener: beginMetadataStar(await)
+                  listener: endMetadataStar(0)
+                  listener: handleNoTypeVariables(()
+                  listener: beginLocalFunctionDeclaration(await)
+                  listener: handleIdentifier(await, typeReference)
+                  listener: handleNoTypeArguments(bar)
+                  listener: handleType(await, null)
+                  parseNamedFunctionRest(await, await, bar, false)
+                    listener: beginFunctionName(bar)
+                    ensureIdentifier(await, localFunctionDeclaration)
+                      listener: handleIdentifier(bar, localFunctionDeclaration)
+                    listener: endFunctionName(await, ()
+                    parseFormalParametersRequiredOpt(bar, MemberKind.Local)
+                      parseFormalParametersRest((, MemberKind.Local)
+                        listener: beginFormalParameters((, MemberKind.Local)
+                        parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(await)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(await, MemberKind.Local, null, null, null)
+                          listener: handleIdentifier(await, typeReference)
+                          listener: handleNoTypeArguments(baz)
+                          listener: handleType(await, null)
+                          ensureIdentifier(await, formalParameterDeclaration)
+                            listener: handleIdentifier(baz, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue(,)
+                          listener: endFormalParameter(null, null, null, baz, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+                        parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.Local)
+                          parseMetadataStar(,)
+                            listener: beginMetadataStar(await)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(await, MemberKind.Local, null, null, null)
+                          listener: handleIdentifier(await, typeReference)
+                          listener: handleNoTypeArguments(baz2)
+                          listener: handleType(await, null)
+                          ensureIdentifier(await, formalParameterDeclaration)
+                            listener: handleIdentifier(baz2, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue(,)
+                          listener: endFormalParameter(null, null, null, baz2, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+                        parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.Local)
+                          parseMetadataStar(,)
+                            listener: beginMetadataStar(await)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(await, MemberKind.Local, null, null, null)
+                          listener: handleIdentifier(await, typeReference)
+                          listener: handleNoTypeArguments(baz3)
+                          listener: handleType(await, null)
+                          ensureIdentifier(await, formalParameterDeclaration)
+                            listener: handleIdentifier(baz3, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue())
+                          listener: endFormalParameter(null, null, null, baz3, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
+                        listener: endFormalParameters(3, (, ), MemberKind.Local)
+                    parseInitializersOpt())
+                      listener: handleNoInitializers()
+                    parseAsyncOptBody(), false, false)
+                      parseAsyncModifierOpt())
+                        listener: handleAsyncModifier(null, null)
+                        inPlainSync()
+                      parseFunctionBody(), false, false)
+                        listener: beginBlockFunctionBody({)
+                        notEofOrValue(}, return)
+                        parseStatement({)
+                          parseStatementX({)
+                            parseReturnStatement({)
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                parsePrecedenceExpression(return, 1, true)
+                                  parseUnaryExpression(return, true)
+                                    parsePrimary(return, expression)
+                                      parseSendOrFunctionLiteral(return, expression)
+                                        parseSend(return, expression)
+                                          isNextIdentifier(return)
+                                          ensureIdentifier(return, expression)
+                                            listener: handleIdentifier(baz, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt(baz)
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(baz, ;)
+                              ensureSemicolon(baz)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        notEofOrValue(}, })
+                        listener: endBlockFunctionBody(1, {, })
+                    listener: endLocalFunctionDeclaration(})
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(31, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(bool)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(bool)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(bool)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, xor, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(bool, typeReference)
+        listener: handleNoTypeArguments(xor)
+        listener: handleType(bool, null)
+        ensureIdentifierPotentiallyRecovered(bool, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(xor, topLevelFunctionDeclaration)
+        parseMethodTypeVar(xor)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(xor, xor, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(xor, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(a)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(c)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(c, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        parseSendOrFunctionLiteral(return, expression)
+                          parseSend(return, expression)
+                            isNextIdentifier(return)
+                            ensureIdentifier(return, expression)
+                              listener: handleIdentifier(b, expression)
+                            listener: handleNoTypeArguments(^)
+                            parseArgumentsOpt(b)
+                              listener: handleNoArguments(^)
+                            listener: handleSend(b, ^)
+                    listener: beginBinaryExpression(^)
+                    parsePrecedenceExpression(^, 11, true)
+                      parseUnaryExpression(^, true)
+                        parsePrimary(^, expression)
+                          parseSendOrFunctionLiteral(^, expression)
+                            parseSend(^, expression)
+                              isNextIdentifier(^)
+                              ensureIdentifier(^, expression)
+                                listener: handleIdentifier(b, expression)
+                              listener: handleNoTypeArguments(^)
+                              parseArgumentsOpt(b)
+                                listener: handleNoArguments(^)
+                              listener: handleSend(b, ^)
+                    listener: endBinaryExpression(^)
+                    listener: beginBinaryExpression(^)
+                    parsePrecedenceExpression(^, 11, true)
+                      parseUnaryExpression(^, true)
+                        parsePrimary(^, expression)
+                          parseSendOrFunctionLiteral(^, expression)
+                            parseSend(^, expression)
+                              isNextIdentifier(^)
+                              ensureIdentifier(^, expression)
+                                listener: handleIdentifier(c, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(c)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(c, ;)
+                    listener: endBinaryExpression(^)
+                ensureSemicolon(c)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(bool, null, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(await, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, await)
+        parseClass(await, class, class, await)
+          parseClassHeaderOpt(await, class, class)
+            parseClassExtendsOpt(await)
+              listener: handleNoType(await)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(await)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(await)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(await, DeclarationKind.Class, await)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(Future)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.parser.expect
new file mode 100644
index 0000000..e111af6d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.parser.expect
@@ -0,0 +1,105 @@
+Future<bool> returnsFuture() => new Future.value(true);
+
+
+void foo() {
+await returnsFuture();
+if (await returnsFuture()) {}
+else if (!await returnsFuture()) {}
+print(await returnsFuture());
+xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+await returnsFuture() ^ await returnsFuture();
+print(await returnsFuture() ^ await returnsFuture());
+await returnsFuture() + await returnsFuture();
+print(await returnsFuture() + await returnsFuture());
+await returnsFuture() - await returnsFuture();
+print(await returnsFuture() - await returnsFuture());
+!await returnsFuture() ^ !await returnsFuture();
+print(!await returnsFuture() ^ !await returnsFuture());
+
+var f = returnsFuture();
+await f;
+if (await f) {}
+else if (!await f) {}
+print(await f);
+xor(await f, await f, await f);
+await f ^ await f;
+print(await f ^ await f);
+await f + await f;
+print(await f + await f);
+await f - await f;
+print(await f - await f);
+!await f ^ !await f;
+print(!await f ^ !await f);
+
+
+await x;
+await y, z;
+await x2 = await;
+await y2 = await, z2 = await;
+await foo(int bar) {
+return new await();
+}
+await bar(await baz, await baz2, await baz3) {
+return baz;
+}
+}
+
+bool xor(bool a, bool b, bool c) {
+return b ^ b ^ c;
+}
+
+class await {}
+
+
+Future[StringToken]<[BeginToken]bool[StringToken]>[SimpleToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] new[KeywordToken] Future[StringToken].[SimpleToken]value[StringToken]([BeginToken]true[KeywordToken])[SimpleToken];[SimpleToken]
+
+
+void[KeywordToken] foo[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+else[KeywordToken] if[KeywordToken] ([BeginToken]![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+xor[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken],[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken],[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] +[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] +[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] -[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] -[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] f[StringToken] =[SimpleToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]await[KeywordToken] f[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+else[KeywordToken] if[KeywordToken] ([BeginToken]![SimpleToken]await[KeywordToken] f[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+xor[StringToken]([BeginToken]await[KeywordToken] f[StringToken],[SimpleToken] await[KeywordToken] f[StringToken],[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] ^[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] ^[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] +[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] +[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] -[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] -[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+![SimpleToken]await[KeywordToken] f[StringToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]![SimpleToken]await[KeywordToken] f[StringToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+
+
+await[KeywordToken] x[StringToken];[SimpleToken]
+await[KeywordToken] y[StringToken],[SimpleToken] z[StringToken];[SimpleToken]
+await[KeywordToken] x2[StringToken] =[SimpleToken] await[KeywordToken];[SimpleToken]
+await[KeywordToken] y2[StringToken] =[SimpleToken] await[KeywordToken],[SimpleToken] z2[StringToken] =[SimpleToken] await[KeywordToken];[SimpleToken]
+await[KeywordToken] foo[StringToken]([BeginToken]int[StringToken] bar[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] new[KeywordToken] await[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+await[KeywordToken] bar[StringToken]([BeginToken]await[KeywordToken] baz[StringToken],[SimpleToken] await[KeywordToken] baz2[StringToken],[SimpleToken] await[KeywordToken] baz3[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] baz[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+
+bool[StringToken] xor[StringToken]([BeginToken]bool[StringToken] a[StringToken],[SimpleToken] bool[StringToken] b[StringToken],[SimpleToken] bool[StringToken] c[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] b[StringToken] ^[SimpleToken] b[StringToken] ^[SimpleToken] c[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.scanner.expect
new file mode 100644
index 0000000..e111af6d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.scanner.expect
@@ -0,0 +1,105 @@
+Future<bool> returnsFuture() => new Future.value(true);
+
+
+void foo() {
+await returnsFuture();
+if (await returnsFuture()) {}
+else if (!await returnsFuture()) {}
+print(await returnsFuture());
+xor(await returnsFuture(), await returnsFuture(), await returnsFuture());
+await returnsFuture() ^ await returnsFuture();
+print(await returnsFuture() ^ await returnsFuture());
+await returnsFuture() + await returnsFuture();
+print(await returnsFuture() + await returnsFuture());
+await returnsFuture() - await returnsFuture();
+print(await returnsFuture() - await returnsFuture());
+!await returnsFuture() ^ !await returnsFuture();
+print(!await returnsFuture() ^ !await returnsFuture());
+
+var f = returnsFuture();
+await f;
+if (await f) {}
+else if (!await f) {}
+print(await f);
+xor(await f, await f, await f);
+await f ^ await f;
+print(await f ^ await f);
+await f + await f;
+print(await f + await f);
+await f - await f;
+print(await f - await f);
+!await f ^ !await f;
+print(!await f ^ !await f);
+
+
+await x;
+await y, z;
+await x2 = await;
+await y2 = await, z2 = await;
+await foo(int bar) {
+return new await();
+}
+await bar(await baz, await baz2, await baz3) {
+return baz;
+}
+}
+
+bool xor(bool a, bool b, bool c) {
+return b ^ b ^ c;
+}
+
+class await {}
+
+
+Future[StringToken]<[BeginToken]bool[StringToken]>[SimpleToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] new[KeywordToken] Future[StringToken].[SimpleToken]value[StringToken]([BeginToken]true[KeywordToken])[SimpleToken];[SimpleToken]
+
+
+void[KeywordToken] foo[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+else[KeywordToken] if[KeywordToken] ([BeginToken]![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+xor[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken],[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken],[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] +[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] +[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] -[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] -[SimpleToken] await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] returnsFuture[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] f[StringToken] =[SimpleToken] returnsFuture[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken];[SimpleToken]
+if[KeywordToken] ([BeginToken]await[KeywordToken] f[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+else[KeywordToken] if[KeywordToken] ([BeginToken]![SimpleToken]await[KeywordToken] f[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+xor[StringToken]([BeginToken]await[KeywordToken] f[StringToken],[SimpleToken] await[KeywordToken] f[StringToken],[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] ^[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] ^[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] +[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] +[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+await[KeywordToken] f[StringToken] -[SimpleToken] await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]await[KeywordToken] f[StringToken] -[SimpleToken] await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+![SimpleToken]await[KeywordToken] f[StringToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] f[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]![SimpleToken]await[KeywordToken] f[StringToken] ^[SimpleToken] ![SimpleToken]await[KeywordToken] f[StringToken])[SimpleToken];[SimpleToken]
+
+
+await[KeywordToken] x[StringToken];[SimpleToken]
+await[KeywordToken] y[StringToken],[SimpleToken] z[StringToken];[SimpleToken]
+await[KeywordToken] x2[StringToken] =[SimpleToken] await[KeywordToken];[SimpleToken]
+await[KeywordToken] y2[StringToken] =[SimpleToken] await[KeywordToken],[SimpleToken] z2[StringToken] =[SimpleToken] await[KeywordToken];[SimpleToken]
+await[KeywordToken] foo[StringToken]([BeginToken]int[StringToken] bar[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] new[KeywordToken] await[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+await[KeywordToken] bar[StringToken]([BeginToken]await[KeywordToken] baz[StringToken],[SimpleToken] await[KeywordToken] baz2[StringToken],[SimpleToken] await[KeywordToken] baz3[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] baz[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+
+bool[StringToken] xor[StringToken]([BeginToken]bool[StringToken] a[StringToken],[SimpleToken] bool[StringToken] b[StringToken],[SimpleToken] bool[StringToken] c[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] b[StringToken] ^[SimpleToken] b[StringToken] ^[SimpleToken] c[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 36f1d49..06dc2d8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -691,8 +691,8 @@
                           parsePrecedenceExpression(return, 1, true)
                             parseUnaryExpression(return, true)
                               inPlainSync()
-                              looksLikeAwaitExpression(return)
-                                looksLikeExpression(await)
+                              looksLikeAwaitExpression(return, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
                               parsePrimary(return, expression)
                                 inPlainSync()
                                 parseSendOrFunctionLiteral(return, expression)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
index 1db298e..8b1d7ab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
@@ -648,8 +648,8 @@
                   parsePrecedenceExpression(return, 1, true)
                     parseUnaryExpression(return, true)
                       inPlainSync()
-                      looksLikeAwaitExpression(return)
-                        looksLikeExpression(await)
+                      looksLikeAwaitExpression(return, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
                       parsePrimary(return, expression)
                         inPlainSync()
                         parseSendOrFunctionLiteral(return, expression)
diff --git a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
index 73a9892..61cc64b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
@@ -102,8 +102,8 @@
           notEofOrValue(}, yield)
           parseStatement({)
             parseStatementX({)
-              looksLikeYieldStatement({)
-                looksLikeExpression(yield)
+              looksLikeYieldStatement({, AwaitOrYieldContext.Statement)
+                looksLikeExpressionAfterAwaitOrYield(yield, AwaitOrYieldContext.Statement)
               parseYieldStatement({)
                 listener: beginYieldStatement(yield)
                 parseExpression(yield)
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index d29de47..91a7954 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -12,6 +12,8 @@
 import 'package:_fe_analyzer_shared/src/parser/listener.dart' show Listener;
 import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/parser.dart' show Parser;
+import 'package:_fe_analyzer_shared/src/parser/parser_impl.dart'
+    show AwaitOrYieldContext;
 import 'package:_fe_analyzer_shared/src/parser/token_stream_rewriter.dart';
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
@@ -2090,28 +2092,29 @@
   }
 
   @override
-  bool looksLikeExpression(Token token) {
-    doPrint('looksLikeExpression(' '$token)');
+  bool looksLikeExpressionAfterAwaitOrYield(
+      Token token, AwaitOrYieldContext context) {
+    doPrint('looksLikeExpressionAfterAwaitOrYield(' '$token, ' '$context)');
     indent++;
-    var result = super.looksLikeExpression(token);
+    var result = super.looksLikeExpressionAfterAwaitOrYield(token, context);
     indent--;
     return result;
   }
 
   @override
-  bool looksLikeAwaitExpression(Token token) {
-    doPrint('looksLikeAwaitExpression(' '$token)');
+  bool looksLikeAwaitExpression(Token token, AwaitOrYieldContext context) {
+    doPrint('looksLikeAwaitExpression(' '$token, ' '$context)');
     indent++;
-    var result = super.looksLikeAwaitExpression(token);
+    var result = super.looksLikeAwaitExpression(token, context);
     indent--;
     return result;
   }
 
   @override
-  bool looksLikeYieldStatement(Token token) {
-    doPrint('looksLikeYieldStatement(' '$token)');
+  bool looksLikeYieldStatement(Token token, AwaitOrYieldContext context) {
+    doPrint('looksLikeYieldStatement(' '$token, ' '$context)');
     indent++;
-    var result = super.looksLikeYieldStatement(token);
+    var result = super.looksLikeYieldStatement(token, context);
     indent--;
     return result;
   }
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 17c7ff3..af64ccf 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -50,6 +50,7 @@
 import 'package:_fe_analyzer_shared/src/parser/listener.dart' show Listener;
 import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/parser.dart' show Parser;
+import 'package:_fe_analyzer_shared/src/parser/parser_impl.dart' show AwaitOrYieldContext;
 import 'package:_fe_analyzer_shared/src/parser/token_stream_rewriter.dart';
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index f0f2c06..32f10592 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -14,6 +14,7 @@
 dart/analyze_snapshot_binary_test: Pass, Slow # Runs various subprocesses for testing AOT.
 dart/boxmint_test: Pass, Slow # Uses slow path
 dart/byte_array_optimized_test: Pass, Slow
+dart/byte_array_test: Pass, Slow # Uses --opt-counter-threshold=10
 dart/data_uri_import_test/none: SkipByDesign
 dart/disassemble_aot_test: Pass, Slow # Spawns several subprocesses
 dart/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
@@ -31,6 +32,7 @@
 dart_2/analyze_snapshot_binary_test: Pass, Slow # Runs various subprocesses for testing AOT.
 dart_2/boxmint_test: Pass, Slow # Uses slow path
 dart_2/byte_array_optimized_test: Pass, Slow
+dart_2/byte_array_test: Pass, Slow # Uses --opt-counter-threshold=10
 dart_2/data_uri_import_test/none: SkipByDesign
 dart_2/disassemble_aot_test: Pass, Slow # Spawns several subprocesses
 dart_2/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
diff --git a/tools/VERSION b/tools/VERSION
index 4f0a8bd..cb3be23 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 235
+PRERELEASE 236
 PRERELEASE_PATCH 0
\ No newline at end of file
