Index: src/full-codegen.cc |
diff --git a/src/full-codegen.cc b/src/full-codegen.cc |
index 3386ce12e5546c95dd13733564a667c40e98c033..0dac7d2e0b0bcec68e53eb19192e54fb88793a4e 100644 |
--- a/src/full-codegen.cc |
+++ b/src/full-codegen.cc |
@@ -41,11 +41,6 @@ void BreakableStatementChecker::VisitFunctionDeclaration( |
} |
-void BreakableStatementChecker::VisitModuleDeclaration( |
- ModuleDeclaration* decl) { |
-} |
- |
- |
void BreakableStatementChecker::VisitImportDeclaration( |
ImportDeclaration* decl) { |
} |
@@ -56,22 +51,6 @@ void BreakableStatementChecker::VisitExportDeclaration( |
} |
-void BreakableStatementChecker::VisitModuleLiteral(ModuleLiteral* module) { |
-} |
- |
- |
-void BreakableStatementChecker::VisitModulePath(ModulePath* module) { |
-} |
- |
- |
-void BreakableStatementChecker::VisitModuleUrl(ModuleUrl* module) { |
-} |
- |
- |
-void BreakableStatementChecker::VisitModuleStatement(ModuleStatement* stmt) { |
-} |
- |
- |
void BreakableStatementChecker::VisitBlock(Block* stmt) { |
} |
@@ -634,138 +613,14 @@ void FullCodeGenerator::DoTest(const TestContext* context) { |
} |
-void FullCodeGenerator::AllocateModules(ZoneList<Declaration*>* declarations) { |
- DCHECK(scope_->is_script_scope()); |
- |
- for (int i = 0; i < declarations->length(); i++) { |
- ModuleDeclaration* declaration = declarations->at(i)->AsModuleDeclaration(); |
- if (declaration != NULL) { |
- ModuleLiteral* module = declaration->module()->AsModuleLiteral(); |
- if (module != NULL) { |
- Comment cmnt(masm_, "[ Link nested modules"); |
- Scope* scope = module->body()->scope(); |
- DCHECK(scope->module()->IsFrozen()); |
- |
- scope->module()->Allocate(scope->module_var()->index()); |
- |
- // Set up module context. |
- DCHECK(scope->module()->Index() >= 0); |
- __ Push(Smi::FromInt(scope->module()->Index())); |
- __ Push(scope->GetScopeInfo(isolate())); |
- __ CallRuntime(Runtime::kPushModuleContext, 2); |
- StoreToFrameField(StandardFrameConstants::kContextOffset, |
- context_register()); |
- |
- AllocateModules(scope->declarations()); |
- |
- // Pop module context. |
- LoadContextField(context_register(), Context::PREVIOUS_INDEX); |
- // Update local stack frame context field. |
- StoreToFrameField(StandardFrameConstants::kContextOffset, |
- context_register()); |
- } |
- } |
- } |
-} |
- |
- |
-// Modules have their own local scope, represented by their own context. |
-// Module instance objects have an accessor for every export that forwards |
-// access to the respective slot from the module's context. (Exports that are |
-// modules themselves, however, are simple data properties.) |
-// |
-// All modules have a _hosting_ scope/context, which (currently) is the |
-// enclosing script scope. To deal with recursion, nested modules are hosted |
-// by the same scope as global ones. |
-// |
-// For every (global or nested) module literal, the hosting context has an |
-// internal slot that points directly to the respective module context. This |
-// enables quick access to (statically resolved) module members by 2-dimensional |
-// access through the hosting context. For example, |
-// |
-// module A { |
-// let x; |
-// module B { let y; } |
-// } |
-// module C { let z; } |
-// |
-// allocates contexts as follows: |
-// |
-// [header| .A | .B | .C | A | C ] (global) |
-// | | | |
-// | | +-- [header| z ] (module) |
-// | | |
-// | +------- [header| y ] (module) |
-// | |
-// +------------ [header| x | B ] (module) |
-// |
-// Here, .A, .B, .C are the internal slots pointing to the hosted module |
-// contexts, whereas A, B, C hold the actual instance objects (note that every |
-// module context also points to the respective instance object through its |
-// extension slot in the header). |
-// |
-// To deal with arbitrary recursion and aliases between modules, |
-// they are created and initialized in several stages. Each stage applies to |
-// all modules in the hosting script scope, including nested ones. |
-// |
-// 1. Allocate: for each module _literal_, allocate the module contexts and |
-// respective instance object and wire them up. This happens in the |
-// PushModuleContext runtime function, as generated by AllocateModules |
-// (invoked by VisitDeclarations in the hosting scope). |
-// |
-// 2. Bind: for each module _declaration_ (i.e. literals as well as aliases), |
-// assign the respective instance object to respective local variables. This |
-// happens in VisitModuleDeclaration, and uses the instance objects created |
-// in the previous stage. |
-// For each module _literal_, this phase also constructs a module descriptor |
-// for the next stage. This happens in VisitModuleLiteral. |
-// |
-// 3. Populate: invoke the DeclareModules runtime function to populate each |
-// _instance_ object with accessors for it exports. This is generated by |
-// DeclareModules (invoked by VisitDeclarations in the hosting scope again), |
-// and uses the descriptors generated in the previous stage. |
-// |
-// 4. Initialize: execute the module bodies (and other code) in sequence. This |
-// happens by the separate statements generated for module bodies. To reenter |
-// the module scopes properly, the parser inserted ModuleStatements. |
- |
void FullCodeGenerator::VisitDeclarations( |
ZoneList<Declaration*>* declarations) { |
- Handle<FixedArray> saved_modules = modules_; |
- int saved_module_index = module_index_; |
ZoneList<Handle<Object> >* saved_globals = globals_; |
ZoneList<Handle<Object> > inner_globals(10, zone()); |
globals_ = &inner_globals; |
- if (scope_->num_modules() != 0) { |
- // This is a scope hosting modules. Allocate a descriptor array to pass |
- // to the runtime for initialization. |
- Comment cmnt(masm_, "[ Allocate modules"); |
- DCHECK(scope_->is_script_scope()); |
- modules_ = |
- isolate()->factory()->NewFixedArray(scope_->num_modules(), TENURED); |
- module_index_ = 0; |
- |
- // Generate code for allocating all modules, including nested ones. |
- // The allocated contexts are stored in internal variables in this scope. |
- AllocateModules(declarations); |
- } |
- |
AstVisitor::VisitDeclarations(declarations); |
- if (scope_->num_modules() != 0) { |
- // TODO(ES6): This step, which creates module instance objects, |
- // can probably be delayed until an "import *" declaration |
- // reifies a module instance. Until imports are implemented, |
- // we skip it altogether. |
- // |
- // Initialize modules from descriptor array. |
- // DCHECK(module_index_ == modules_->length()); |
- // DeclareModules(modules_); |
- modules_ = saved_modules; |
- module_index_ = saved_module_index; |
- } |
- |
if (!globals_->is_empty()) { |
// Invoke the platform-dependent code generator to do the actual |
// declaration of the global functions and variables. |
@@ -780,54 +635,6 @@ void FullCodeGenerator::VisitDeclarations( |
} |
-void FullCodeGenerator::VisitModuleLiteral(ModuleLiteral* module) { |
- Block* block = module->body(); |
- Scope* saved_scope = scope(); |
- scope_ = block->scope(); |
- ModuleDescriptor* descriptor = scope_->module(); |
- |
- Comment cmnt(masm_, "[ ModuleLiteral"); |
- SetStatementPosition(block); |
- |
- DCHECK(!modules_.is_null()); |
- DCHECK(module_index_ < modules_->length()); |
- int index = module_index_++; |
- |
- // Set up module context. |
- DCHECK(descriptor->Index() >= 0); |
- __ Push(Smi::FromInt(descriptor->Index())); |
- __ Push(Smi::FromInt(0)); |
- __ CallRuntime(Runtime::kPushModuleContext, 2); |
- StoreToFrameField(StandardFrameConstants::kContextOffset, context_register()); |
- |
- { |
- Comment cmnt(masm_, "[ Declarations"); |
- VisitDeclarations(scope_->declarations()); |
- } |
- |
- // Populate the module description. |
- Handle<ModuleInfo> description = |
- ModuleInfo::Create(isolate(), descriptor, scope_); |
- modules_->set(index, *description); |
- |
- scope_ = saved_scope; |
- // Pop module context. |
- LoadContextField(context_register(), Context::PREVIOUS_INDEX); |
- // Update local stack frame context field. |
- StoreToFrameField(StandardFrameConstants::kContextOffset, context_register()); |
-} |
- |
- |
-// TODO(adamk): Delete ModulePath. |
-void FullCodeGenerator::VisitModulePath(ModulePath* module) { |
-} |
- |
- |
-// TODO(adamk): Delete ModuleUrl. |
-void FullCodeGenerator::VisitModuleUrl(ModuleUrl* module) { |
-} |
- |
- |
int FullCodeGenerator::DeclareGlobalsFlags() { |
DCHECK(DeclareGlobalsLanguageMode::is_valid(language_mode())); |
return DeclareGlobalsEvalFlag::encode(is_eval()) | |
@@ -1061,28 +868,6 @@ void FullCodeGenerator::VisitBlock(Block* stmt) { |
} |
-void FullCodeGenerator::VisitModuleStatement(ModuleStatement* stmt) { |
- Comment cmnt(masm_, "[ Module context"); |
- |
- DCHECK(stmt->body()->scope()->is_module_scope()); |
- |
- __ Push(Smi::FromInt(stmt->body()->scope()->module()->Index())); |
- __ Push(Smi::FromInt(0)); |
- __ CallRuntime(Runtime::kPushModuleContext, 2); |
- StoreToFrameField( |
- StandardFrameConstants::kContextOffset, context_register()); |
- |
- Scope* saved_scope = scope_; |
- scope_ = stmt->body()->scope(); |
- VisitStatements(stmt->body()->statements()); |
- scope_ = saved_scope; |
- LoadContextField(context_register(), Context::PREVIOUS_INDEX); |
- // Update local stack frame context field. |
- StoreToFrameField(StandardFrameConstants::kContextOffset, |
- context_register()); |
-} |
- |
- |
void FullCodeGenerator::VisitExpressionStatement(ExpressionStatement* stmt) { |
Comment cmnt(masm_, "[ ExpressionStatement"); |
SetStatementPosition(stmt); |