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

Unified Diff: pkg/analyzer/lib/src/generated/parser.dart

Issue 2799133003: enhance analyzer to parse uppercase and built-in/pseudo keywords (Closed)
Patch Set: Created 3 years, 8 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/analyzer/lib/src/generated/parser.dart
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 0067694aa15c0b30ff87ea045bbc44d6bf191d16..26ee60613be6b5055b1191e563a1bf34cab90f24 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -158,23 +158,17 @@ class Modifiers {
* A parser used to parse tokens into an AST structure.
*/
class Parser {
- static String ASYNC = "async";
+ static String ASYNC = Keyword.ASYNC.syntax;
- static String _AWAIT = "await";
+ static String _AWAIT = Keyword.AWAIT.syntax;
- static String _HIDE = "hide";
+ static String _HIDE = Keyword.HIDE.syntax;
- static String _OF = "of";
+ static String _SHOW = Keyword.SHOW.syntax;
- static String _ON = "on";
+ static String SYNC = Keyword.SYNC.syntax;
- static String _NATIVE = "native";
-
- static String _SHOW = "show";
-
- static String SYNC = "sync";
-
- static String _YIELD = "yield";
+ static String _YIELD = Keyword.YIELD.syntax;
/**
* The source being parsed.
@@ -1189,7 +1183,8 @@ class Parser {
// Look for and skip over the extra-lingual 'native' specification.
//
NativeClause nativeClause = null;
- if (_matchesString(_NATIVE) && _tokenMatches(_peek(), TokenType.STRING)) {
+ if (_matchesKeyword(Keyword.NATIVE) &&
+ _tokenMatches(_peek(), TokenType.STRING)) {
nativeClause = _parseNativeClause();
}
//
@@ -1586,9 +1581,9 @@ class Parser {
* | 'hide' identifier (',' identifier)*
*/
Combinator parseCombinator() {
- if (_matchesString(_SHOW)) {
+ if (_matchesKeyword(Keyword.SHOW)) {
return astFactory.showCombinator(getAndAdvance(), parseIdentifierList());
- } else if (_matchesString(_HIDE)) {
+ } else if (_matchesKeyword(Keyword.HIDE)) {
return astFactory.hideCombinator(getAndAdvance(), parseIdentifierList());
}
return null;
@@ -1917,7 +1912,7 @@ class Parser {
}
return parseLibraryDirective(commentAndMetadata);
} else if (keyword == Keyword.PART) {
- if (_tokenMatchesString(_peek(), _OF)) {
+ if (_tokenMatchesKeyword(_peek(), Keyword.OF)) {
partOfDirectiveFound = true;
return _parsePartOfDirective(commentAndMetadata);
} else {
@@ -2960,7 +2955,7 @@ class Parser {
_inLoop = true;
try {
Token awaitKeyword = null;
- if (_matchesString(_AWAIT)) {
+ if (_matchesKeyword(Keyword.AWAIT)) {
awaitKeyword = getAndAdvance();
}
Token forKeyword = _expectKeyword(Keyword.FOR);
@@ -3123,7 +3118,7 @@ class Parser {
Token star = null;
bool foundAsync = false;
bool foundSync = false;
- if (type == TokenType.IDENTIFIER) {
+ if (type == TokenType.KEYWORD) {
String lexeme = _currentToken.lexeme;
if (lexeme == ASYNC) {
foundAsync = true;
@@ -3184,7 +3179,7 @@ class Parser {
.emptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
}
return astFactory.blockFunctionBody(keyword, star, parseBlock());
- } else if (_matchesString(_NATIVE)) {
+ } else if (_matchesKeyword(Keyword.NATIVE)) {
Token nativeToken = getAndAdvance();
StringLiteral stringLiteral = null;
if (_matches(TokenType.STRING)) {
@@ -3338,7 +3333,7 @@ class Parser {
GenericFunctionType parseGenericFunctionTypeAfterReturnType(
TypeAnnotation returnType) {
Token functionKeyword = null;
- if (_matchesString('Function')) {
+ if (_matchesKeyword(Keyword.FUNCTION)) {
functionKeyword = getAndAdvance();
} else if (_matchesIdentifier()) {
_reportErrorForCurrentToken(ParserErrorCode.NAMED_FUNCTION_TYPE);
@@ -3547,12 +3542,12 @@ class Parser {
_reportErrorForCurrentToken(
ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT);
} else if (!_matches(TokenType.SEMICOLON) &&
- !_matchesString(_SHOW) &&
- !_matchesString(_HIDE)) {
+ !_matchesKeyword(Keyword.SHOW) &&
+ !_matchesKeyword(Keyword.HIDE)) {
Token nextToken = _peek();
if (_tokenMatchesKeyword(nextToken, Keyword.AS) ||
- _tokenMatchesString(nextToken, _SHOW) ||
- _tokenMatchesString(nextToken, _HIDE)) {
+ _tokenMatchesKeyword(nextToken, Keyword.SHOW) ||
+ _tokenMatchesKeyword(nextToken, Keyword.HIDE)) {
_reportErrorForCurrentToken(
ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken]);
_advance();
@@ -3989,7 +3984,8 @@ class Parser {
}
}
return parseBlock();
- } else if (type == TokenType.KEYWORD && !_currentToken.keyword.isBuiltIn) {
+ } else if (type == TokenType.KEYWORD &&
+ !_currentToken.keyword.isBuiltInOrPseudo) {
Keyword keyword = _currentToken.keyword;
// TODO(jwren) compute some metrics to figure out a better order for this
// if-then sequence to optimize performance
@@ -4105,15 +4101,15 @@ class Parser {
return astFactory
.emptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
}
- } else if (_inGenerator && _matchesString(_YIELD)) {
+ } else if (_inGenerator && _matchesKeyword(Keyword.YIELD)) {
return parseYieldStatement();
- } else if (_inAsync && _matchesString(_AWAIT)) {
+ } else if (_inAsync && _matchesKeyword(Keyword.AWAIT)) {
if (_tokenMatchesKeyword(_peek(), Keyword.FOR)) {
return parseForStatement();
}
return astFactory.expressionStatement(
parseExpression2(), _expect(TokenType.SEMICOLON));
- } else if (_matchesString(_AWAIT) &&
+ } else if (_matchesKeyword(Keyword.AWAIT) &&
_tokenMatchesKeyword(_peek(), Keyword.FOR)) {
Token awaitToken = _currentToken;
Statement statement = parseForStatement();
@@ -4306,7 +4302,7 @@ class Parser {
* metadata 'part' 'of' identifier ';'
*/
Directive parsePartOrPartOfDirective(CommentAndMetadata commentAndMetadata) {
- if (_tokenMatchesString(_peek(), _OF)) {
+ if (_tokenMatchesKeyword(_peek(), Keyword.OF)) {
return _parsePartOfDirective(commentAndMetadata);
}
return _parsePartDirective(commentAndMetadata);
@@ -4978,10 +4974,10 @@ class Parser {
Block body = _parseBlockChecked();
List<CatchClause> catchClauses = <CatchClause>[];
Block finallyClause = null;
- while (_matchesString(_ON) || _matchesKeyword(Keyword.CATCH)) {
+ while (_matchesKeyword(Keyword.ON) || _matchesKeyword(Keyword.CATCH)) {
Token onKeyword = null;
TypeName exceptionType = null;
- if (_matchesString(_ON)) {
+ if (_matchesKeyword(Keyword.ON)) {
onKeyword = getAndAdvance();
exceptionType = parseTypeAnnotation(false);
}
@@ -5241,7 +5237,7 @@ class Parser {
} else if (type == TokenType.PLUS) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
return createSyntheticIdentifier();
- } else if (_inAsync && _matchesString(_AWAIT)) {
+ } else if (_inAsync && _matchesKeyword(Keyword.AWAIT)) {
return parseAwaitExpression();
}
return parsePostfixExpression();
@@ -5694,7 +5690,7 @@ class Parser {
* function type alias.
*/
bool _atGenericFunctionTypeAfterReturnType(Token startToken) {
- if (_tokenMatchesString(startToken, 'Function')) {
+ if (_tokenMatchesKeyword(startToken, Keyword.FUNCTION)) {
Token next = startToken.next;
if (next != null &&
(_tokenMatches(next, TokenType.OPEN_PAREN) ||
@@ -6262,13 +6258,6 @@ class Parser {
_tokenMatchesKeyword(_currentToken, keyword);
/**
- * Return `true` if the current token matches the given [identifier].
- */
- bool _matchesString(String identifier) =>
- _currentToken.type == TokenType.IDENTIFIER &&
- _currentToken.lexeme == identifier;
-
- /**
* Report an error with the given [errorCode] if the given [typeName] has been
* marked as nullable.
*/
@@ -7993,13 +7982,7 @@ class Parser {
* Return `true` if the given [token] matches a pseudo keyword.
*/
bool _tokenMatchesPseudoKeyword(Token token) =>
- token.keyword?.isBuiltIn ?? false;
-
- /**
- * Return `true` if the given [token] matches the given [identifier].
- */
- bool _tokenMatchesString(Token token, String identifier) =>
- token.type == TokenType.IDENTIFIER && token.lexeme == identifier;
+ token.keyword?.isBuiltInOrPseudo ?? false;
/**
* Translate the characters at the given [index] in the given [lexeme],

Powered by Google App Engine
This is Rietveld 408576698