Version 2.18.0-236.0.dev
Merge commit 'dd9a2dca24a5a50bffcb088368b003414c737aa3' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 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