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

Unified Diff: pkg/compiler/lib/src/parser/parser.dart

Issue 2567133002: Add support for the new function-type syntax. (Closed)
Patch Set: Fix comments. Created 4 years 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/compiler/lib/src/parser/parser.dart
diff --git a/pkg/compiler/lib/src/parser/parser.dart b/pkg/compiler/lib/src/parser/parser.dart
index 988cbf32c63d165be72ac4250dba5fc1b794c509..b660895f1a7ce7101ae70b1a48e004221ea822f3 100644
--- a/pkg/compiler/lib/src/parser/parser.dart
+++ b/pkg/compiler/lib/src/parser/parser.dart
@@ -362,12 +362,21 @@ class Parser {
Token parseTypedef(Token token) {
Token typedefKeyword = token;
- listener.beginFunctionTypeAlias(token);
- token = parseReturnTypeOpt(token.next);
- token = parseIdentifier(token);
- token = parseTypeVariablesOpt(token);
- token = parseFormalParameters(token);
- listener.endFunctionTypeAlias(typedefKeyword, token);
+ if (optional('=', peekAfterType(token.next))) {
+ listener.beginNewFunctionTypeAlias(token);
+ token = parseIdentifier(token.next);
+ token = parseTypeVariablesOpt(token);
+ token = expect('=', token);
+ token = parseFunctionType(token);
+ listener.endNewFunctionTypeAlias(typedefKeyword, token);
+ } else {
+ listener.beginFunctionTypeAlias(token);
+ token = parseReturnTypeOpt(token.next);
+ token = parseIdentifier(token);
+ token = parseTypeVariablesOpt(token);
+ token = parseFormalParameters(token);
+ listener.endFunctionTypeAlias(typedefKeyword, token);
Siggi Cherem (dart-lang) 2016/12/12 23:20:40 a suggestion to make this match closer to what the
floitsch 2016/12/29 19:57:46 Done.
+ }
return expect(';', token);
}
@@ -813,6 +822,22 @@ class Parser {
return token;
}
+ Token parseFunctionType(Token token) {
+ Token begin = token;
+ listener.beginFunctionType(token);
+ token = parseReturnTypeOpt(token);
+ // TODO(floitsch): don't use string comparison, but the keyword-state table
+ // is currently not set up to deal with upper-case characters.
Siggi Cherem (dart-lang) 2016/12/12 23:20:40 can this count as a reason to switch to `fun` or `
floitsch 2016/12/29 19:57:46 nice try ;)
+ if (token.value != "Function") {
+ return listener.expected("Function", token);
+ }
+ token = token.next;
+ token = parseTypeVariablesOpt(token);
+ token = parseFormalParameters(token);
+ listener.endFunctionType(begin, token);
+ return token;
+ }
+
Token parseTypeArgumentsOpt(Token token) {
return parseStuff(
token,

Powered by Google App Engine
This is Rietveld 408576698