| 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;
|
| }
|
|
|
|
|
|
|