Index: src/factory.cc |
diff --git a/src/factory.cc b/src/factory.cc |
index 400e15e5c97ddb4fc132baba1b630e7414953787..ae0ff158b0aea91c367412b5081f42bab89c346a 100644 |
--- a/src/factory.cc |
+++ b/src/factory.cc |
@@ -792,15 +792,19 @@ Handle<ScriptContextTable> Factory::NewScriptContextTable() { |
return context_table; |
} |
- |
-Handle<Context> Factory::NewModuleContext(Handle<ScopeInfo> scope_info) { |
+Handle<Context> Factory::NewModuleContext(Handle<JSModule> module, |
+ Handle<JSFunction> function, |
+ Handle<ScopeInfo> scope_info) { |
DCHECK_EQ(scope_info->scope_type(), MODULE_SCOPE); |
Handle<FixedArray> array = |
NewFixedArray(scope_info->ContextLength(), TENURED); |
array->set_map_no_write_barrier(*module_context_map()); |
- // Instance link will be set later. |
Handle<Context> context = Handle<Context>::cast(array); |
- context->set_extension(*the_hole_value()); |
+ context->set_closure(*function); |
+ context->set_previous(function->context()); |
+ context->set_extension(*module); |
+ context->set_native_context(function->native_context()); |
+ DCHECK(context->IsModuleContext()); |
return context; |
} |
@@ -1393,11 +1397,16 @@ Handle<ScopeInfo> Factory::NewScopeInfo(int length) { |
return scope_info; |
} |
+Handle<ModuleInfoEntry> Factory::NewModuleInfoEntry() { |
+ Handle<FixedArray> array = NewFixedArray(ModuleInfoEntry::kLength, TENURED); |
+ array->set_map_no_write_barrier(*module_info_entry_map()); |
+ return Handle<ModuleInfoEntry>::cast(array); |
+} |
+ |
Handle<ModuleInfo> Factory::NewModuleInfo() { |
Handle<FixedArray> array = NewFixedArray(ModuleInfo::kLength, TENURED); |
array->set_map_no_write_barrier(*module_info_map()); |
- Handle<ModuleInfo> module_info = Handle<ModuleInfo>::cast(array); |
- return module_info; |
+ return Handle<ModuleInfo>::cast(array); |
} |
Handle<JSObject> Factory::NewExternal(void* value) { |
@@ -1690,6 +1699,14 @@ Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( |
JSGeneratorObject); |
} |
+// XXX |
+Handle<JSModule> Factory::NewJSModule() { |
+ Handle<Map> map = NewMap(JS_MODULE_TYPE, JSModule::kSize); |
adamk
2016/09/01 23:13:34
As discussed offline, the module map should in the
neis
2016/09/02 11:32:58
Done. But I can't claim I really understand what I
|
+ // Allocate the object based on the map. |
+ Handle<JSModule> module = |
+ Handle<JSModule>::cast(NewJSObjectFromMap(map, TENURED)); |
+ return module; |
+} |
Handle<JSArrayBuffer> Factory::NewJSArrayBuffer(SharedFlag shared, |
PretenureFlag pretenure) { |