Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index 66f7055d3e85d20e5168bc2749b4d5dfd971189e..a4b75d6f20acffab6792bfd0eab92101d5e4a0a6 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -2441,6 +2441,12 @@ bool Heap::CreateInitialMaps() { |
AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
if (!maybe_obj->ToObject(&obj)) return false; |
} |
+ set_global_context_map(Map::cast(obj)); |
+ |
+ { MaybeObject* maybe_obj = |
+ AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
Map* native_context_map = Map::cast(obj); |
native_context_map->set_dictionary_map(true); |
native_context_map->set_visitor_id(StaticVisitorBase::kVisitNativeContext); |
@@ -4905,6 +4911,23 @@ MaybeObject* Heap::AllocateNativeContext() { |
} |
+MaybeObject* Heap::AllocateGlobalContext(JSFunction* function, |
+ ScopeInfo* scope_info) { |
+ Object* result; |
+ { MaybeObject* maybe_result = |
+ AllocateFixedArray(scope_info->ContextLength(), TENURED); |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
+ } |
+ Context* context = reinterpret_cast<Context*>(result); |
+ context->set_map_no_write_barrier(global_context_map()); |
+ context->set_closure(function); |
+ context->set_extension(scope_info); |
+ ASSERT(context->IsGlobalContext()); |
+ ASSERT(result->IsContext()); |
+ return context; |
+} |
+ |
+ |
MaybeObject* Heap::AllocateModuleContext(ScopeInfo* scope_info) { |
Object* result; |
{ MaybeObject* maybe_result = |