1337143 - Tweak NamedImports parsing to eliminate a complexifying peekToken where getToken could be used.

This commit is contained in:
Gaming4JC 2019-06-09 01:33:48 -04:00 • committed by Roy Tam
commit bd6ebc2ffe

View file

@ -4663,12 +4663,11 @@ bool
Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node importSpecSet) Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node importSpecSet)
{ {
if (tt == TOK_LC) { if (tt == TOK_LC) {
TokenStream::Modifier modifier = TokenStream::KeywordIsName;
while (true) { while (true) {
// Handle the forms |import {} from 'a'| and // Handle the forms |import {} from 'a'| and
// |import { ..., } from 'a'| (where ... is non empty), by // |import { ..., } from 'a'| (where ... is non empty), by
// escaping the loop early if the next token is }. // escaping the loop early if the next token is }.
if (!tokenStream.peekToken(&tt, TokenStream::KeywordIsName)) if (!tokenStream.getToken(&tt, TokenStream::KeywordIsName))
return false; return false;
if (tt == TOK_RC) if (tt == TOK_RC)
@ -4677,7 +4676,11 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
// If the next token is a keyword, the previous call to // If the next token is a keyword, the previous call to
// peekToken matched it as a TOK_NAME, and put it in the // peekToken matched it as a TOK_NAME, and put it in the
// lookahead buffer, so this call will match keywords as well. // lookahead buffer, so this call will match keywords as well.
MUST_MATCH_TOKEN_MOD(TOK_NAME, TokenStream::KeywordIsName, JSMSG_NO_IMPORT_NAME); if (tt != TOK_NAME) {
error(JSMSG_NO_IMPORT_NAME);
return false;
}
Rooted<PropertyName*> importName(context, tokenStream.currentName()); Rooted<PropertyName*> importName(context, tokenStream.currentName());
TokenPos importNamePos = pos(); TokenPos importNamePos = pos();
@ -4735,17 +4738,18 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
handler.addList(importSpecSet, importSpec); handler.addList(importSpecSet, importSpec);
bool matched; TokenKind next;
if (!tokenStream.matchToken(&matched, TOK_COMMA)) if (!tokenStream.getToken(&next))
return false; return false;
if (!matched) { if (next == TOK_RC)
modifier = TokenStream::None;
break; break;
if (next != TOK_COMMA) {
error(JSMSG_RC_AFTER_IMPORT_SPEC_LIST);
return false;
} }
} }
MUST_MATCH_TOKEN_MOD(TOK_RC, modifier, JSMSG_RC_AFTER_IMPORT_SPEC_LIST);
} else { } else {
MOZ_ASSERT(tt == TOK_MUL); MOZ_ASSERT(tt == TOK_MUL);
if (!tokenStream.getToken(&tt)) if (!tokenStream.getToken(&tt))