Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: pkg/front_end/lib/src/fasta/parser/parser.dart

Issue 2699073003: Support `void` as generic argument.
Patch Set: Add specialized messages for `void` for-ins. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ce6741a54c27894336570acc8b8999bfa5f3b6d1..5b3c27de3bd4ac410a8c63304c375c11a027fa1c 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -401,7 +401,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);
@@ -419,19 +419,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);
@@ -522,7 +509,7 @@ class Parser {
listener.handleNoName(token);
}
} else {
- token = parseReturnTypeOpt(token);
+ token = parseTypeOpt(token);
if (optional('this', token)) {
thisKeyword = token;
token = expect('.', token.next);
@@ -937,10 +924,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);
@@ -1198,13 +1181,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].
- reportRecoverableError(type, ErrorKind.InvalidVoid);
} else {
parseType(type);
if (isVar) {
@@ -1259,7 +1235,7 @@ class Parser {
if (type == null) {
listener.handleNoType(name);
} else {
- parseReturnTypeOpt(type);
+ parseTypeOpt(type);
}
Token token =
parseIdentifier(name, IdentifierContext.topLevelFunctionDeclaration);
@@ -1603,7 +1579,7 @@ class Parser {
* 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);
@@ -1789,7 +1765,7 @@ class Parser {
if (type == null) {
listener.handleNoType(name);
} else {
- parseReturnTypeOpt(type);
+ parseTypeOpt(type);
}
Token token;
if (optional('operator', name)) {
@@ -1885,7 +1861,7 @@ class Parser {
token = parseOperatorName(token);
} else {
// <type>? <get>? <name>
- token = parseReturnTypeOpt(token);
+ token = parseTypeOpt(token);
if (identical(getOrSet, token)) {
token = token.next;
}
@@ -1937,7 +1913,7 @@ class Parser {
Token parseFunctionExpression(Token token) {
listener.beginFunction(token);
listener.handleModifiers(0);
- token = parseReturnTypeOpt(token);
+ token = parseTypeOpt(token);
listener.beginFunctionName(token);
token = parseIdentifier(token, IdentifierContext.functionExpressionName);
listener.endFunctionName(token);
@@ -2143,8 +2119,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')) {
@@ -2225,7 +2199,7 @@ class Parser {
}
Token parseExpressionStatementOrDeclaration(Token token) {
- assert(token.isIdentifier() || identical(token.stringValue, 'void'));
+ assert(token.isIdentifier());
Token identifier = peekIdentifierAfterType(token);
if (identifier != null) {
assert(identifier.isIdentifier());
@@ -2639,8 +2613,6 @@ class Parser {
return parseNewExpression(token);
} else if (value == 'const') {
return parseConstExpression(token);
- } else if (value == 'void') {
- return parseFunctionExpression(token);
} else if (asyncAwaitKeywordsEnabled &&
(value == 'yield' || value == 'async')) {
return expressionExpected(token);

Powered by Google App Engine
This is Rietveld 408576698