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

Unified Diff: src/parser.cc

Issue 902093002: Add basic compilation support for modules (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add TODO Created 5 years, 10 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
« no previous file with comments | « src/parser.h ('k') | test/cctest/cctest.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index 3c72dd0f72c7b47b05c08da86de112bee65468eb..ed3c4dc735035699b8fdeb55ebfaf2662c60095c 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -954,11 +954,9 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, Scope** scope,
int beg_pos = scanner()->location().beg_pos;
if (info->is_module()) {
DCHECK(allow_harmony_modules());
- Module* module = ParseModule(&ok);
+ Statement* stmt = ParseModule(&ok);
if (ok) {
- // TODO(adamk): Do something with returned Module
- CHECK(module);
- body->Add(factory()->NewEmptyStatement(RelocInfo::kNoPosition), zone());
+ body->Add(stmt, zone());
}
} else {
ParseStatementList(body, Token::EOS, info->is_eval(), eval_scope, &ok);
@@ -1254,7 +1252,7 @@ Statement* Parser::ParseModuleItem(bool* ok) {
}
-Module* Parser::ParseModule(bool* ok) {
+Statement* Parser::ParseModule(bool* ok) {
// (Ecma 262 6th Edition, 15.2):
// Module :
// ModuleBody?
@@ -1262,21 +1260,14 @@ Module* Parser::ParseModule(bool* ok) {
// ModuleBody :
// ModuleItem*
- int pos = peek_position();
- // Construct block expecting 16 statements.
Block* body = factory()->NewBlock(NULL, 16, false, RelocInfo::kNoPosition);
-#ifdef DEBUG
- if (FLAG_print_interface_details) PrintF("# Literal ");
-#endif
Scope* scope = NewScope(scope_, MODULE_SCOPE);
-
scope->set_start_position(scanner()->location().beg_pos);
scope->SetLanguageMode(
static_cast<LanguageMode>(scope->language_mode() | STRICT_BIT));
{
BlockState block_state(&scope_, scope);
- Target target(&this->target_stack_, body);
while (peek() != Token::EOS) {
Statement* stat = ParseModuleItem(CHECK_OK);
@@ -1304,36 +1295,17 @@ Module* Parser::ParseModule(bool* ok) {
DCHECK(*ok);
interface->Freeze(ok);
DCHECK(*ok);
- return factory()->NewModuleLiteral(body, interface, pos);
+ return body;
}
-Module* Parser::ParseModuleSpecifier(bool* ok) {
- // Module:
- // String
+Literal* Parser::ParseModuleSpecifier(bool* ok) {
+ // ModuleSpecifier :
+ // StringLiteral
int pos = peek_position();
Expect(Token::STRING, CHECK_OK);
- const AstRawString* symbol = GetSymbol(scanner());
-
- // TODO(ES6): Request JS resource from environment...
-
-#ifdef DEBUG
- if (FLAG_print_interface_details) PrintF("# Url ");
-#endif
-
- // Create an empty literal as long as the feature isn't finished.
- USE(symbol);
- Scope* scope = NewScope(scope_, MODULE_SCOPE);
- Block* body = factory()->NewBlock(NULL, 1, false, RelocInfo::kNoPosition);
- body->set_scope(scope);
- Interface* interface = scope->interface();
- Module* result = factory()->NewModuleLiteral(body, interface, pos);
- interface->Freeze(ok);
- DCHECK(*ok);
- interface->Unify(scope->interface(), zone(), ok);
- DCHECK(*ok);
- return result;
+ return factory()->NewStringLiteral(GetSymbol(scanner()), pos);
}
@@ -1486,7 +1458,7 @@ Statement* Parser::ParseImportDeclaration(bool* ok) {
}
ExpectContextualKeyword(CStrVector("from"), CHECK_OK);
- Module* module = ParseModuleSpecifier(CHECK_OK);
+ Literal* module = ParseModuleSpecifier(CHECK_OK);
USE(module);
ExpectSemicolon(CHECK_OK);
@@ -1562,7 +1534,7 @@ Statement* Parser::ParseExportDeclaration(bool* ok) {
case Token::MUL: {
Consume(Token::MUL);
ExpectContextualKeyword(CStrVector("from"), CHECK_OK);
- Module* module = ParseModuleSpecifier(CHECK_OK);
+ Literal* module = ParseModuleSpecifier(CHECK_OK);
ExpectSemicolon(CHECK_OK);
// TODO(ES6): Do something with the return value
// of ParseModuleSpecifier.
@@ -1587,7 +1559,7 @@ Statement* Parser::ParseExportDeclaration(bool* ok) {
Scanner::Location reserved_loc = Scanner::Location::invalid();
ParseExportClause(&names, &reserved_loc, CHECK_OK);
if (CheckContextualKeyword(CStrVector("from"))) {
- Module* module = ParseModuleSpecifier(CHECK_OK);
+ Literal* module = ParseModuleSpecifier(CHECK_OK);
// TODO(ES6): Do something with the return value
// of ParseModuleSpecifier.
USE(module);
« no previous file with comments | « src/parser.h ('k') | test/cctest/cctest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698