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

Unified Diff: src/factory.cc

Issue 2302783002: [modules] Basic support of exports (Closed)
Patch Set: . Created 4 years, 3 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
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) {

Powered by Google App Engine
This is Rietveld 408576698