| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 32f73cf4f75bca9c810ccda4c2ac457da4958fea..070bb3b9182ac152053ce25b45587361f976630f 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -1338,7 +1338,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 :
|
| // '{' '}'
|
| @@ -1355,27 +1356,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);
|
| }
|
| @@ -1408,8 +1408,10 @@ Statement* Parser::ParseImportDeclaration(bool* ok) {
|
|
|
| // 'import' ModuleSpecifier ';'
|
| if (tok == Token::STRING) {
|
| - ParseModuleSpecifier(CHECK_OK);
|
| + Literal* module_specifier = ParseModuleSpecifier(CHECK_OK);
|
| ExpectSemicolon(CHECK_OK);
|
| + // TODO(ES6): Add module to the requested modules of scope_->module().
|
| + USE(module_specifier);
|
| return factory()->NewEmptyStatement(pos);
|
| }
|
|
|
| @@ -1421,7 +1423,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: {
|
| @@ -1433,7 +1436,7 @@ Statement* Parser::ParseImportDeclaration(bool* ok) {
|
| }
|
|
|
| case Token::LBRACE:
|
| - ParseNamedImports(&names, CHECK_OK);
|
| + ParseNamedImports(&import_names, &local_names, CHECK_OK);
|
| break;
|
|
|
| default:
|
| @@ -1457,7 +1460,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
|
| }
|
|
|
|
|