Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index 241da74c98fe25eee19fdc001fd1cc2098326357..3865786cd02a3551be377dc713c8e3ddcefafe4b 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -9532,57 +9532,53 @@ Handle<Object> CacheInitialJSArrayMaps(Handle<Context> native_context, |
| } |
| -MaybeObject* JSFunction::SetInstancePrototype(Object* value) { |
| +void JSFunction::SetInstancePrototype(Handle<JSFunction> function, |
| + Handle<Object> value) { |
| ASSERT(value->IsJSReceiver()); |
| - Heap* heap = GetHeap(); |
| // First some logic for the map of the prototype to make sure it is in fast |
| // mode. |
| if (value->IsJSObject()) { |
| - MaybeObject* ok = JSObject::cast(value)->OptimizeAsPrototype(); |
| - if (ok->IsFailure()) return ok; |
| + JSObject::OptimizeAsPrototype(Handle<JSObject>::cast(value)); |
| } |
| // Now some logic for the maps of the objects that are created by using this |
| // function as a constructor. |
| - if (has_initial_map()) { |
| + if (function->has_initial_map()) { |
| // If the function has allocated the initial map replace it with a |
| // copy containing the new prototype. Also complete any in-object |
| // slack tracking that is in progress at this point because it is |
| // still tracking the old copy. |
| - if (shared()->IsInobjectSlackTrackingInProgress()) { |
| - shared()->CompleteInobjectSlackTracking(); |
| + if (function->shared()->IsInobjectSlackTrackingInProgress()) { |
| + function->shared()->CompleteInobjectSlackTracking(); |
| } |
| - Map* new_map; |
| - MaybeObject* maybe_object = initial_map()->Copy(); |
| - if (!maybe_object->To(&new_map)) return maybe_object; |
| - new_map->set_prototype(value); |
| + Handle<Map> new_map = Map::Copy(Handle<Map>(function->initial_map())); |
|
Toon Verwaest
2013/07/17 16:25:20
Lets use handle(function->initial_map) since it's
Michael Starzinger
2013/07/17 17:12:53
Done.
|
| + new_map->set_prototype(*value); |
| // If the function is used as the global Array function, cache the |
| // initial map (and transitioned versions) in the native context. |
| - Context* native_context = context()->native_context(); |
| + Context* native_context = function->context()->native_context(); |
| Object* array_function = native_context->get(Context::ARRAY_FUNCTION_INDEX); |
| if (array_function->IsJSFunction() && |
| - this == JSFunction::cast(array_function)) { |
| - MaybeObject* ok = CacheInitialJSArrayMaps(native_context, new_map); |
| - if (ok->IsFailure()) return ok; |
| + *function == JSFunction::cast(array_function)) { |
| + CacheInitialJSArrayMaps(Handle<Context>(native_context), new_map); |
| } |
| - set_initial_map(new_map); |
| + function->set_initial_map(*new_map); |
| } else { |
| // Put the value in the initial map field until an initial map is |
| // needed. At that point, a new initial map is created and the |
| // prototype is put into the initial map where it belongs. |
| - set_prototype_or_initial_map(value); |
| + function->set_prototype_or_initial_map(*value); |
| } |
| - heap->ClearInstanceofCache(); |
| - return value; |
| + function->GetHeap()->ClearInstanceofCache(); |
| } |
| -MaybeObject* JSFunction::SetPrototype(Object* value) { |
| - ASSERT(should_have_prototype()); |
| - Object* construct_prototype = value; |
| +void JSFunction::SetPrototype(Handle<JSFunction> function, |
| + Handle<Object> value) { |
| + ASSERT(function->should_have_prototype()); |
| + Handle<Object> construct_prototype = value; |
| // If the value is not a JSReceiver, store the value in the map's |
| // constructor field so it can be accessed. Also, set the prototype |
| @@ -9592,22 +9588,20 @@ MaybeObject* JSFunction::SetPrototype(Object* value) { |
| // Copy the map so this does not affect unrelated functions. |
| // Remove map transitions because they point to maps with a |
| // different prototype. |
| - Map* new_map; |
| - MaybeObject* maybe_new_map = map()->Copy(); |
| - if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
| + Handle<Map> new_map = Map::Copy(Handle<Map>(function->map())); |
| - Heap* heap = new_map->GetHeap(); |
| - set_map(new_map); |
| - new_map->set_constructor(value); |
| + function->set_map(*new_map); |
| + new_map->set_constructor(*value); |
| new_map->set_non_instance_prototype(true); |
| - construct_prototype = |
| - heap->isolate()->context()->native_context()-> |
| - initial_object_prototype(); |
| + Isolate* isolate = new_map->GetIsolate(); |
| + construct_prototype = Handle<Object>( |
| + isolate->context()->native_context()->initial_object_prototype(), |
| + isolate); |
| } else { |
| - map()->set_non_instance_prototype(false); |
| + function->map()->set_non_instance_prototype(false); |
| } |
| - return SetInstancePrototype(construct_prototype); |
| + return SetInstancePrototype(function, construct_prototype); |
| } |