Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index 8f1ad946288979ebbc790c57eddfe250646137d7..31c95de3225b53075a78e708496b6f83fb3a2d57 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -1875,7 +1875,7 @@ bool Heap::CreateInitialMaps() { |
AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
if (!maybe_obj->ToObject(&obj)) return false; |
} |
- set_context_map(Map::cast(obj)); |
+ set_function_context_map(Map::cast(obj)); |
{ MaybeObject* maybe_obj = |
AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
@@ -1887,6 +1887,12 @@ bool Heap::CreateInitialMaps() { |
AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
if (!maybe_obj->ToObject(&obj)) return false; |
} |
+ set_with_context_map(Map::cast(obj)); |
+ |
+ { MaybeObject* maybe_obj = |
+ AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
+ if (!maybe_obj->ToObject(&obj)) return false; |
+ } |
Map* global_context_map = Map::cast(obj); |
global_context_map->set_visitor_id(StaticVisitorBase::kVisitGlobalContext); |
set_global_context_map(global_context_map); |
@@ -3844,38 +3850,47 @@ MaybeObject* Heap::AllocateFunctionContext(int length, JSFunction* function) { |
if (!maybe_result->ToObject(&result)) return maybe_result; |
} |
Context* context = reinterpret_cast<Context*>(result); |
- context->set_map(context_map()); |
+ context->set_map(function_context_map()); |
context->set_closure(function); |
context->set_fcontext(context); |
context->set_previous(NULL); |
context->set_extension(NULL); |
context->set_global(function->context()->global()); |
- ASSERT(!context->IsGlobalContext()); |
- ASSERT(context->is_function_context()); |
- ASSERT(result->IsContext()); |
- return result; |
+ return context; |
+} |
+ |
+ |
+MaybeObject* Heap::AllocateCatchContext(Context* previous, |
+ JSObject* extension) { |
+ Object* result; |
+ { MaybeObject* maybe_result = AllocateFixedArray(Context::MIN_CONTEXT_SLOTS); |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
+ } |
+ Context* context = reinterpret_cast<Context*>(result); |
+ context->set_map(catch_context_map()); |
+ context->set_closure(previous->closure()); |
+ context->set_fcontext(previous->fcontext()); |
+ context->set_previous(previous); |
+ context->set_extension(extension); |
+ context->set_global(previous->global()); |
+ return context; |
} |
MaybeObject* Heap::AllocateWithContext(Context* previous, |
- JSObject* extension, |
- bool is_catch_context) { |
+ JSObject* extension) { |
Object* result; |
{ MaybeObject* maybe_result = AllocateFixedArray(Context::MIN_CONTEXT_SLOTS); |
if (!maybe_result->ToObject(&result)) return maybe_result; |
} |
Context* context = reinterpret_cast<Context*>(result); |
- context->set_map(is_catch_context ? catch_context_map() : |
- context_map()); |
+ context->set_map(with_context_map()); |
context->set_closure(previous->closure()); |
context->set_fcontext(previous->fcontext()); |
context->set_previous(previous); |
context->set_extension(extension); |
context->set_global(previous->global()); |
- ASSERT(!context->IsGlobalContext()); |
- ASSERT(!context->is_function_context()); |
- ASSERT(result->IsContext()); |
- return result; |
+ return context; |
} |