| 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 f1cf87e4b4b12e43085c0b7fbda53a6b45c56033..0b75d4da9d253f9f01d847a0fc75c80928b91db1 100644
|
| --- a/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| +++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| @@ -564,7 +564,7 @@ class Parser {
|
| token = expect('=', token);
|
| token = parseType(token);
|
| } else {
|
| - token = parseReturnTypeOpt(token.next);
|
| + token = parseTypeOpt(token.next);
|
| token = parseIdentifier(token, IdentifierContext.typedefDeclaration);
|
| token = parseTypeVariablesOpt(token);
|
| token = parseFormalParameters(token);
|
| @@ -583,19 +583,6 @@ class Parser {
|
| return token;
|
| }
|
|
|
| - Token parseReturnTypeOpt(Token token) {
|
| - if (identical(token.stringValue, 'void')) {
|
| - if (isGeneralizedFunctionType(token.next)) {
|
| - return parseType(token);
|
| - } else {
|
| - listener.handleVoidKeyword(token);
|
| - return token.next;
|
| - }
|
| - } else {
|
| - return parseTypeOpt(token);
|
| - }
|
| - }
|
| -
|
| Token parseFormalParametersOpt(Token token) {
|
| if (optional('(', token)) {
|
| return parseFormalParameters(token);
|
| @@ -693,7 +680,7 @@ class Parser {
|
| listener.handleNoName(token);
|
| }
|
| } else {
|
| - token = parseReturnTypeOpt(token);
|
| + token = parseTypeOpt(token);
|
| if (optional('this', token)) {
|
| thisKeyword = token;
|
| token = expect('.', token.next);
|
| @@ -1048,7 +1035,7 @@ class Parser {
|
| if (context.inDeclaration) {
|
| reportRecoverableErrorCodeWithToken(
|
| token, codeBuiltInIdentifierInDeclaration);
|
| - } else if (!optional("dynamic", token)) {
|
| + } else if (!optional("dynamic", token) && !optional("void", token)) {
|
| reportRecoverableErrorCodeWithToken(token, codeBuiltInIdentifierAsType);
|
| }
|
| } else if (!inPlainSync && token.isPseudo) {
|
| @@ -1125,10 +1112,6 @@ class Parser {
|
| // Push the non-existing return type first. The loop below will
|
| // generate the full type.
|
| listener.handleNoType(token);
|
| - } else if (identical(token.stringValue, 'void') &&
|
| - isGeneralizedFunctionType(token.next)) {
|
| - listener.handleVoidKeyword(token);
|
| - token = token.next;
|
| } else {
|
| if (isValidTypeReference(token)) {
|
| token = parseIdentifier(token, IdentifierContext.typeReference);
|
| @@ -1403,13 +1386,6 @@ class Parser {
|
|
|
| if (!hasType) {
|
| listener.handleNoType(name);
|
| - } else if (optional('void', type) &&
|
| - !isGeneralizedFunctionType(type.next)) {
|
| - listener.handleNoType(name);
|
| - // TODO(ahe): This error is reported twice, second time is from
|
| - // [parseVariablesDeclarationMaybeSemicolon] via
|
| - // [PartialFieldListElement.parseNode].
|
| - reportRecoverableErrorCode(type, codeInvalidVoid);
|
| } else {
|
| parseType(type);
|
| if (isVar) {
|
| @@ -1463,7 +1439,7 @@ class Parser {
|
| if (type == null) {
|
| listener.handleNoType(name);
|
| } else {
|
| - parseReturnTypeOpt(type);
|
| + parseTypeOpt(type);
|
| }
|
| Token token =
|
| parseIdentifier(name, IdentifierContext.topLevelFunctionDeclaration);
|
| @@ -1830,7 +1806,7 @@ class Parser {
|
| /// If [token] is the start of a type, returns the token after that type.
|
| /// If [token] is not the start of a type, null is returned.
|
| Token peekAfterIfType(Token token) {
|
| - if (!optional('void', token) && !token.isIdentifier) {
|
| + if (!token.isIdentifier) {
|
| return null;
|
| }
|
| return peekAfterType(token);
|
| @@ -2016,7 +1992,7 @@ class Parser {
|
| if (type == null) {
|
| listener.handleNoType(name);
|
| } else {
|
| - parseReturnTypeOpt(type);
|
| + parseTypeOpt(type);
|
| }
|
| Token token;
|
| if (optional('operator', name)) {
|
| @@ -2121,7 +2097,7 @@ class Parser {
|
| token = parseOperatorName(token);
|
| } else {
|
| // <type>? <get>? <name>
|
| - token = parseReturnTypeOpt(token);
|
| + token = parseTypeOpt(token);
|
| if (identical(getOrSet, token)) {
|
| token = token.next;
|
| }
|
| @@ -2175,7 +2151,7 @@ class Parser {
|
| Token beginToken = token;
|
| listener.beginFunction(token);
|
| listener.handleModifiers(0);
|
| - token = parseReturnTypeOpt(token);
|
| + token = parseTypeOpt(token);
|
| listener.beginFunctionName(token);
|
| token = parseIdentifier(token, IdentifierContext.functionExpressionName);
|
| listener.endFunctionName(beginToken, token);
|
| @@ -2391,8 +2367,6 @@ class Parser {
|
| } else if (identical(value, 'throw') && optional(';', token.next)) {
|
| // TODO(kasperl): Stop dealing with throw here.
|
| return parseRethrowStatement(token);
|
| - } else if (identical(value, 'void')) {
|
| - return parseExpressionStatementOrDeclaration(token);
|
| } else if (identical(value, 'while')) {
|
| return parseWhileStatement(token);
|
| } else if (identical(value, 'do')) {
|
| @@ -2491,7 +2465,7 @@ class Parser {
|
| if (!inPlainSync && optional("await", token)) {
|
| return parseExpressionStatement(token);
|
| }
|
| - assert(token.isIdentifier || identical(token.stringValue, 'void'));
|
| + assert(token.isIdentifier);
|
| Token identifier = peekIdentifierAfterType(token);
|
| if (identifier != null) {
|
| assert(identifier.isIdentifier);
|
| @@ -2921,8 +2895,6 @@ class Parser {
|
| return parseNewExpression(token);
|
| } else if (identical(value, "const")) {
|
| return parseConstExpression(token);
|
| - } else if (identical(value, "void")) {
|
| - return parseFunctionExpression(token);
|
| } else if (!inPlainSync &&
|
| (identical(value, "yield") || identical(value, "async"))) {
|
| return expressionExpected(token);
|
|
|