Allow "Function" as prefixed identifier

Change-Id: Id8dd154d8e3426a9a01d548af94d413e97590c76
Reviewed-on: https://dart-review.googlesource.com/40320
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
This commit is contained in:
danrubel 2018-02-09 15:41:10 +00:00 committed by commit-bot@chromium.org
parent c580897aec
commit 87a395bd09
2 changed files with 15 additions and 4 deletions

View file

@ -15596,8 +15596,9 @@ abstract class TopLevelParserTestMixin implements AbstractParserTestCase {
void test_parseCompilationUnit_builtIn_asFunctionName() {
for (Keyword keyword in Keyword.values) {
if (keyword.isBuiltIn) {
if (keyword.isBuiltIn || keyword.isPseudo) {
String lexeme = keyword.lexeme;
if (lexeme == 'Function' && !usingFastaParser) continue;
parseCompilationUnit('$lexeme(x) => 0;');
parseCompilationUnit('class C {$lexeme(x) => 0;}');
}
@ -15607,7 +15608,7 @@ abstract class TopLevelParserTestMixin implements AbstractParserTestCase {
void test_parseCompilationUnit_builtIn_asFunctionName_withTypeParameter() {
if (usingFastaParser) {
for (Keyword keyword in Keyword.values) {
if (keyword.isBuiltIn) {
if (keyword.isBuiltIn || keyword.isPseudo) {
String lexeme = keyword.lexeme;
parseCompilationUnit('$lexeme<T>(x) => 0;');
parseCompilationUnit('class C {$lexeme<T>(x) => 0;}');
@ -15618,7 +15619,7 @@ abstract class TopLevelParserTestMixin implements AbstractParserTestCase {
void test_parseCompilationUnit_builtIn_asGetter() {
for (Keyword keyword in Keyword.values) {
if (keyword.isBuiltIn) {
if (keyword.isBuiltIn || keyword.isPseudo) {
String lexeme = keyword.lexeme;
parseCompilationUnit('get $lexeme => 0;');
parseCompilationUnit('class C {get $lexeme => 0;}');
@ -15701,6 +15702,16 @@ abstract class TopLevelParserTestMixin implements AbstractParserTestCase {
expect(unit.declarations, hasLength(1));
}
void test_parseCompilationUnit_pseudo_prefixed() {
for (Keyword keyword in Keyword.values) {
if (keyword.isPseudo) {
String lexeme = keyword.lexeme;
parseCompilationUnit('M.$lexeme f;');
parseCompilationUnit('class C {M.$lexeme f;}');
}
}
}
void test_parseCompilationUnit_script() {
createParser('#! /bin/dart');
CompilationUnit unit = parser.parseCompilationUnit2();

View file

@ -1420,7 +1420,7 @@ class Parser {
// Return the newly inserted synthetic token
// as the end of the type reference.
return token.next;
} else if (identical(value, '<') || identical(value, 'Function')) {
} else if (identical(value, '<')) {
// Found a type reference, but missing an identifier after the period.
rewriteAndRecover(
token,