Chromium Code Reviews| Index: src/parser.cc |
| diff --git a/src/parser.cc b/src/parser.cc |
| index e50a5efdcbde94f5bd4a49c2e4108cb31192a2eb..f15418f6b9ab253c7b09d4ed5bdb5ac86d3255b3 100644 |
| --- a/src/parser.cc |
| +++ b/src/parser.cc |
| @@ -1349,7 +1349,8 @@ void* Parser::ParseExportClause(ZoneList<const AstRawString*>* export_names, |
| } |
| -void* Parser::ParseNamedImports(ZoneList<const AstRawString*>* names, |
| +void* Parser::ParseNamedImports(ZoneList<const AstRawString*>* import_names, |
| + ZoneList<const AstRawString*>* local_names, |
| bool* ok) { |
| // NamedImports : |
| // '{' '}' |
| @@ -1366,27 +1367,26 @@ void* Parser::ParseNamedImports(ZoneList<const AstRawString*>* names, |
| Expect(Token::LBRACE, CHECK_OK); |
| - Token::Value name_tok; |
| - while ((name_tok = peek()) != Token::RBRACE) { |
| - const AstRawString* name = ParseIdentifierName(CHECK_OK); |
| - const AstRawString* import_name = NULL; |
| + while (peek() != Token::RBRACE) { |
| + const AstRawString* import_name = ParseIdentifierName(CHECK_OK); |
| + const AstRawString* local_name = import_name; |
| // In the presence of 'as', the left-side of the 'as' can |
| // be any IdentifierName. But without 'as', it must be a valid |
| - // BindingIdentiifer. |
| + // BindingIdentifier. |
| if (CheckContextualKeyword(CStrVector("as"))) { |
| - import_name = ParseIdentifier(kDontAllowEvalOrArguments, CHECK_OK); |
| - } else if (!Token::IsIdentifier(name_tok, STRICT, false)) { |
| + local_name = ParseIdentifierName(CHECK_OK); |
| + } |
| + if (!Token::IsIdentifier(scanner()->current_token(), STRICT, false)) { |
| *ok = false; |
| - ReportMessageAt(scanner()->location(), "unexpected_reserved"); |
| + ReportMessage("unexpected_reserved"); |
| return NULL; |
| - } else if (IsEvalOrArguments(name)) { |
| + } else if (IsEvalOrArguments(local_name)) { |
| *ok = false; |
| - ReportMessageAt(scanner()->location(), "strict_eval_arguments"); |
| + ReportMessage("strict_eval_arguments"); |
| return NULL; |
| } |
| - // TODO(ES6): Return the import_name as well as the name. |
| - names->Add(name, zone()); |
| - USE(import_name); |
| + import_names->Add(import_name, zone()); |
| + local_names->Add(local_name, zone()); |
| if (peek() == Token::RBRACE) break; |
| Expect(Token::COMMA, CHECK_OK); |
| } |
| @@ -1419,8 +1419,10 @@ Statement* Parser::ParseImportDeclaration(bool* ok) { |
| // 'import' ModuleSpecifier ';' |
| if (tok == Token::STRING) { |
| - ParseModuleSpecifier(CHECK_OK); |
| + Literal* module = ParseModuleSpecifier(CHECK_OK); |
|
arv (Not doing code reviews)
2015/02/25 15:33:07
nit: module_specifier
adamk
2015/02/25 19:02:33
Done.
|
| ExpectSemicolon(CHECK_OK); |
| + // TODO(ES6): Add module to the requested modules of scope_->module(). |
| + USE(module); |
| return factory()->NewEmptyStatement(pos); |
| } |
| @@ -1432,7 +1434,8 @@ Statement* Parser::ParseImportDeclaration(bool* ok) { |
| } |
| const AstRawString* module_instance_binding = NULL; |
| - ZoneList<const AstRawString*> names(1, zone()); |
| + ZoneList<const AstRawString*> local_names(1, zone()); |
| + ZoneList<const AstRawString*> import_names(1, zone()); |
| if (imported_default_binding == NULL || Check(Token::COMMA)) { |
| switch (peek()) { |
| case Token::MUL: { |
| @@ -1444,7 +1447,7 @@ Statement* Parser::ParseImportDeclaration(bool* ok) { |
| } |
| case Token::LBRACE: |
| - ParseNamedImports(&names, CHECK_OK); |
| + ParseNamedImports(&import_names, &local_names, CHECK_OK); |
| break; |
| default: |
| @@ -1468,7 +1471,9 @@ Statement* Parser::ParseImportDeclaration(bool* ok) { |
| // TODO(ES6): Add an appropriate declaration. |
| } |
| - for (int i = 0; i < names.length(); ++i) { |
| + const int length = import_names.length(); |
| + DCHECK_EQ(length, local_names.length()); |
| + for (int i = 0; i < length; ++i) { |
| // TODO(ES6): Add an appropriate declaration for each name |
| } |