| Index: pkg/front_end/lib/src/fasta/parser/parser.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| index 4b24296358c7d77db910c1721c10d482b71aec53..c7dc51d9915067ee1ef27895aa5880da0370ff80 100644
|
| --- a/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| +++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| @@ -460,7 +460,7 @@ class Parser {
|
| return token;
|
| }
|
| return reportUnrecoverableError(
|
| - token, ErrorKind.ExpectedButGot, {"expected": "("});
|
| + token, ErrorKind.ExpectedButGot, {"expected": "("})?.next;
|
| }
|
| BeginGroupToken beginGroupToken = token;
|
| Token endToken = beginGroupToken.endGroup;
|
| @@ -752,16 +752,17 @@ class Parser {
|
|
|
| Token skipBlock(Token token) {
|
| if (!optional('{', token)) {
|
| - return reportUnrecoverableError(token, ErrorKind.ExpectedBlockToSkip);
|
| + return reportUnrecoverableError(token, ErrorKind.ExpectedBlockToSkip)
|
| + ?.next;
|
| }
|
| BeginGroupToken beginGroupToken = token;
|
| Token endGroup = beginGroupToken.endGroup;
|
| if (endGroup == null) {
|
| - return reportUnrecoverableError(
|
| - beginGroupToken, ErrorKind.UnmatchedToken);
|
| + return reportUnrecoverableError(beginGroupToken, ErrorKind.UnmatchedToken)
|
| + ?.next;
|
| } else if (!identical(endGroup.kind, $CLOSE_CURLY_BRACKET)) {
|
| - return reportUnrecoverableError(
|
| - beginGroupToken, ErrorKind.UnmatchedToken);
|
| + return reportUnrecoverableError(beginGroupToken, ErrorKind.UnmatchedToken)
|
| + ?.next;
|
| }
|
| return beginGroupToken.endGroup;
|
| }
|
| @@ -870,7 +871,7 @@ class Parser {
|
|
|
| Token parseStringPart(Token token) {
|
| if (token.kind != STRING_TOKEN) {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedString);
|
| + token = reportUnrecoverableError(token, ErrorKind.ExpectedString)?.next;
|
| }
|
| listener.handleStringPart(token);
|
| return token.next;
|
| @@ -878,7 +879,8 @@ class Parser {
|
|
|
| Token parseIdentifier(Token token, IdentifierContext context) {
|
| if (!token.isIdentifier()) {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedIdentifier);
|
| + token =
|
| + reportUnrecoverableError(token, ErrorKind.ExpectedIdentifier)?.next;
|
| }
|
| listener.handleIdentifier(token, context);
|
| return token.next;
|
| @@ -887,7 +889,7 @@ class Parser {
|
| Token expect(String string, Token token) {
|
| if (!identical(string, token.stringValue)) {
|
| return reportUnrecoverableError(
|
| - token, ErrorKind.ExpectedButGot, {"expected": string});
|
| + token, ErrorKind.ExpectedButGot, {"expected": string})?.next;
|
| }
|
| return token.next;
|
| }
|
| @@ -957,7 +959,7 @@ class Parser {
|
| token = parseQualifiedRestOpt(
|
| token, IdentifierContext.typeReferenceContinuation);
|
| } else {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedType);
|
| + token = reportUnrecoverableError(token, ErrorKind.ExpectedType)?.next;
|
| listener.handleInvalidTypeReference(token);
|
| }
|
| token = parseTypeArgumentsOpt(token);
|
| @@ -1033,13 +1035,15 @@ class Parser {
|
|
|
| Link<Token> identifiers = findMemberName(token);
|
| if (identifiers.isEmpty) {
|
| - return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration);
|
| + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration)
|
| + ?.next;
|
| }
|
| Token afterName = identifiers.head;
|
| identifiers = identifiers.tail;
|
|
|
| if (identifiers.isEmpty) {
|
| - return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration);
|
| + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration)
|
| + ?.next;
|
| }
|
| Token name = identifiers.head;
|
| identifiers = identifiers.tail;
|
| @@ -1084,7 +1088,8 @@ class Parser {
|
| }
|
| break;
|
| } else {
|
| - token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + token =
|
| + reportUnrecoverableError(token, ErrorKind.UnexpectedToken)?.next;
|
| if (identical(token.kind, EOF_TOKEN)) return token;
|
| }
|
| }
|
| @@ -1621,16 +1626,17 @@ class Parser {
|
|
|
| Token skipClassBody(Token token) {
|
| if (!optional('{', token)) {
|
| - return reportUnrecoverableError(token, ErrorKind.ExpectedClassBodyToSkip);
|
| + return reportUnrecoverableError(token, ErrorKind.ExpectedClassBodyToSkip)
|
| + ?.next;
|
| }
|
| BeginGroupToken beginGroupToken = token;
|
| Token endGroup = beginGroupToken.endGroup;
|
| if (endGroup == null) {
|
| - return reportUnrecoverableError(
|
| - beginGroupToken, ErrorKind.UnmatchedToken);
|
| + return reportUnrecoverableError(beginGroupToken, ErrorKind.UnmatchedToken)
|
| + ?.next;
|
| } else if (!identical(endGroup.kind, $CLOSE_CURLY_BRACKET)) {
|
| - return reportUnrecoverableError(
|
| - beginGroupToken, ErrorKind.UnmatchedToken);
|
| + return reportUnrecoverableError(beginGroupToken, ErrorKind.UnmatchedToken)
|
| + ?.next;
|
| }
|
| return endGroup;
|
| }
|
| @@ -1639,7 +1645,8 @@ class Parser {
|
| Token begin = token;
|
| listener.beginClassBody(token);
|
| if (!optional('{', token)) {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedClassBody);
|
| + token =
|
| + reportUnrecoverableError(token, ErrorKind.ExpectedClassBody)?.next;
|
| }
|
| token = token.next;
|
| int count = 0;
|
| @@ -1676,13 +1683,15 @@ class Parser {
|
|
|
| Link<Token> identifiers = findMemberName(token);
|
| if (identifiers.isEmpty) {
|
| - return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration);
|
| + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration)
|
| + ?.next;
|
| }
|
| Token afterName = identifiers.head;
|
| identifiers = identifiers.tail;
|
|
|
| if (identifiers.isEmpty) {
|
| - return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration);
|
| + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration)
|
| + ?.next;
|
| }
|
| Token name = identifiers.head;
|
| identifiers = identifiers.tail;
|
| @@ -1734,7 +1743,8 @@ class Parser {
|
| isField = true;
|
| break;
|
| } else {
|
| - token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + token =
|
| + reportUnrecoverableError(token, ErrorKind.UnexpectedToken)?.next;
|
| if (identical(token.kind, EOF_TOKEN)) {
|
| // TODO(ahe): This is a hack, see parseTopLevelMember.
|
| listener.endFields(1, null, start, token);
|
| @@ -2052,7 +2062,8 @@ class Parser {
|
| Token begin = token;
|
| int statementCount = 0;
|
| if (!optional('{', token)) {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedFunctionBody);
|
| + token =
|
| + reportUnrecoverableError(token, ErrorKind.ExpectedFunctionBody)?.next;
|
| listener.handleInvalidFunctionBody(token);
|
| return token;
|
| }
|
| @@ -2121,7 +2132,7 @@ class Parser {
|
| // This happens for degenerate programs, for example, a lot of nested
|
| // if-statements. The language test deep_nesting2_negative_test, for
|
| // example, provokes this.
|
| - return reportUnrecoverableError(token, ErrorKind.StackOverflow);
|
| + return reportUnrecoverableError(token, ErrorKind.StackOverflow)?.next;
|
| }
|
| Token result = parseStatementX(token);
|
| statementDepth--;
|
| @@ -2426,7 +2437,7 @@ class Parser {
|
| BeginGroupToken begin = token;
|
| token = (begin.endGroup != null) ? begin.endGroup : token;
|
| } else if (token is ErrorToken) {
|
| - reportErrorToken(token, false);
|
| + reportErrorToken(token, false)?.next;
|
| }
|
| token = token.next;
|
| }
|
| @@ -2441,7 +2452,7 @@ class Parser {
|
| // This happens in degenerate programs, for example, with a lot of nested
|
| // list literals. This is provoked by, for examaple, the language test
|
| // deep_nesting1_negative_test.
|
| - return reportUnrecoverableError(token, ErrorKind.StackOverflow);
|
| + return reportUnrecoverableError(token, ErrorKind.StackOverflow)?.next;
|
| }
|
| listener.beginExpression(token);
|
| Token result = optional('throw', token)
|
| @@ -2508,7 +2519,8 @@ class Parser {
|
| listener.handleUnaryPostfixAssignmentExpression(token);
|
| token = token.next;
|
| } else {
|
| - token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken)
|
| + ?.next;
|
| }
|
| } else if (identical(info, IS_INFO)) {
|
| token = parseIsOperatorRest(token);
|
| @@ -2548,7 +2560,7 @@ class Parser {
|
| token = parseSend(token, IdentifierContext.expressionContinuation);
|
| listener.handleBinaryExpression(cascadeOperator);
|
| } else {
|
| - return reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + return reportUnrecoverableError(token, ErrorKind.UnexpectedToken)?.next;
|
| }
|
| Token mark;
|
| do {
|
| @@ -2676,7 +2688,7 @@ class Parser {
|
| }
|
|
|
| Token expressionExpected(Token token) {
|
| - token = reportUnrecoverableError(token, ErrorKind.ExpectedExpression);
|
| + token = reportUnrecoverableError(token, ErrorKind.ExpectedExpression)?.next;
|
| listener.handleInvalidExpression(token);
|
| return token;
|
| }
|
| @@ -2710,7 +2722,7 @@ class Parser {
|
| // [begin] is now known to have type [BeginGroupToken].
|
| token = parseExpression(token);
|
| if (!identical(begin.endGroup, token)) {
|
| - reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + reportUnrecoverableError(token, ErrorKind.UnexpectedToken)?.next;
|
| token = begin.endGroup;
|
| }
|
| listener.handleParenthesizedExpression(begin);
|
| @@ -2899,7 +2911,7 @@ class Parser {
|
| token = parseArguments(token);
|
| } else {
|
| listener.handleNoArguments(token);
|
| - token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken);
|
| + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken)?.next;
|
| }
|
| return token;
|
| }
|
| @@ -3530,7 +3542,7 @@ class Parser {
|
| } else {
|
| arguments ??= {};
|
| arguments.putIfAbsent("actual", () => token.value);
|
| - next = listener.handleUnrecoverableError(token, kind, arguments)?.next;
|
| + next = listener.handleUnrecoverableError(token, kind, arguments);
|
| }
|
| return next ?? skipToEof(token);
|
| }
|
| @@ -3581,7 +3593,7 @@ class Parser {
|
| listener.handleRecoverableError(token, kind, arguments);
|
| return null;
|
| } else {
|
| - return listener.handleUnrecoverableError(token, kind, arguments)?.next;
|
| + return listener.handleUnrecoverableError(token, kind, arguments);
|
| }
|
| }
|
| }
|
|
|