| Index: src/bootstrapper.cc
 | 
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
 | 
| index f223695a5b29ca760f5ea0bed9c098d634659a01..a878ecb4389b5ba8d85697d238a7315bb36e15f9 100644
 | 
| --- a/src/bootstrapper.cc
 | 
| +++ b/src/bootstrapper.cc
 | 
| @@ -362,7 +362,7 @@ static void SetObjectPrototype(Handle<JSObject> object, Handle<Object> proto) {
 | 
|    // object.__proto__ = proto;
 | 
|    Handle<Map> old_map = Handle<Map>(object->map());
 | 
|    Handle<Map> new_map = Map::Copy(old_map, "SetObjectPrototype");
 | 
| -  new_map->set_prototype(*proto);
 | 
| +  new_map->SetPrototype(proto, FAST_PROTOTYPE);
 | 
|    JSObject::MigrateToMap(object, new_map);
 | 
|  }
 | 
|  
 | 
| @@ -493,6 +493,8 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
 | 
|  
 | 
|    Handle<String> object_name = factory->Object_string();
 | 
|  
 | 
| +  Handle<JSObject> object_function_prototype;
 | 
| +
 | 
|    {  // --- O b j e c t ---
 | 
|      Handle<JSFunction> object_fun = factory->NewFunction(object_name);
 | 
|      int unused = JSObject::kInitialGlobalObjectUnusedPropertiesCount;
 | 
| @@ -507,20 +509,20 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
 | 
|      native_context()->set_object_function(*object_fun);
 | 
|  
 | 
|      // Allocate a new prototype for the object function.
 | 
| -    Handle<JSObject> prototype = factory->NewJSObject(
 | 
| -        isolate->object_function(),
 | 
| -        TENURED);
 | 
| -    Handle<Map> map =
 | 
| -        Map::Copy(handle(prototype->map()), "EmptyObjectPrototype");
 | 
| +    object_function_prototype =
 | 
| +        factory->NewJSObject(isolate->object_function(), TENURED);
 | 
| +    Handle<Map> map = Map::Copy(handle(object_function_prototype->map()),
 | 
| +                                "EmptyObjectPrototype");
 | 
|      map->set_is_prototype_map(true);
 | 
| -    prototype->set_map(*map);
 | 
| +    object_function_prototype->set_map(*map);
 | 
|  
 | 
| -    native_context()->set_initial_object_prototype(*prototype);
 | 
| +    native_context()->set_initial_object_prototype(*object_function_prototype);
 | 
|      // For bootstrapping set the array prototype to be the same as the object
 | 
|      // prototype, otherwise the missing initial_array_prototype will cause
 | 
|      // assertions during startup.
 | 
| -    native_context()->set_initial_array_prototype(*prototype);
 | 
| -    Accessors::FunctionSetPrototype(object_fun, prototype).Assert();
 | 
| +    native_context()->set_initial_array_prototype(*object_function_prototype);
 | 
| +    Accessors::FunctionSetPrototype(object_fun, object_function_prototype)
 | 
| +        .Assert();
 | 
|    }
 | 
|  
 | 
|    // Allocate the empty function as the prototype for function ECMAScript
 | 
| @@ -535,8 +537,7 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
 | 
|    Handle<Map> empty_function_map =
 | 
|        CreateFunctionMap(FUNCTION_WITHOUT_PROTOTYPE);
 | 
|    DCHECK(!empty_function_map->is_dictionary_map());
 | 
| -  empty_function_map->set_prototype(
 | 
| -      native_context()->object_function()->prototype());
 | 
| +  empty_function_map->SetPrototype(object_function_prototype);
 | 
|    empty_function_map->set_is_prototype_map(true);
 | 
|    empty_function->set_map(*empty_function_map);
 | 
|  
 | 
| @@ -550,10 +551,10 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
 | 
|    empty_function->shared()->DontAdaptArguments();
 | 
|  
 | 
|    // Set prototypes for the function maps.
 | 
| -  native_context()->sloppy_function_map()->set_prototype(*empty_function);
 | 
| -  native_context()->sloppy_function_without_prototype_map()->
 | 
| -      set_prototype(*empty_function);
 | 
| -  sloppy_function_map_writable_prototype_->set_prototype(*empty_function);
 | 
| +  native_context()->sloppy_function_map()->SetPrototype(empty_function);
 | 
| +  native_context()->sloppy_function_without_prototype_map()->SetPrototype(
 | 
| +      empty_function);
 | 
| +  sloppy_function_map_writable_prototype_->SetPrototype(empty_function);
 | 
|    return empty_function;
 | 
|  }
 | 
|  
 | 
| @@ -655,7 +656,7 @@ Handle<Map> Genesis::CreateStrictFunctionMap(
 | 
|    Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
 | 
|    SetStrictFunctionInstanceDescriptor(map, function_mode);
 | 
|    map->set_function_with_prototype(IsFunctionModeWithPrototype(function_mode));
 | 
| -  map->set_prototype(*empty_function);
 | 
| +  map->SetPrototype(empty_function);
 | 
|    return map;
 | 
|  }
 | 
|  
 | 
| @@ -1093,7 +1094,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> global_object,
 | 
|  
 | 
|      // RegExp prototype object is itself a RegExp.
 | 
|      Handle<Map> proto_map = Map::Copy(initial_map, "RegExpPrototype");
 | 
| -    proto_map->set_prototype(native_context()->initial_object_prototype());
 | 
| +    DCHECK(proto_map->prototype() == *isolate->initial_object_prototype());
 | 
|      Handle<JSObject> proto = factory->NewJSObjectFromMap(proto_map);
 | 
|      proto->InObjectPropertyAtPut(JSRegExp::kGlobalFieldIndex,
 | 
|                                   heap->false_value());
 | 
| @@ -1105,7 +1106,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> global_object,
 | 
|                                   Smi::FromInt(0),
 | 
|                                   SKIP_WRITE_BARRIER);  // It's a Smi.
 | 
|      proto_map->set_is_prototype_map(true);
 | 
| -    initial_map->set_prototype(*proto);
 | 
| +    initial_map->SetPrototype(proto);
 | 
|      factory->SetRegExpIrregexpData(Handle<JSRegExp>::cast(proto),
 | 
|                                     JSRegExp::IRREGEXP, factory->empty_string(),
 | 
|                                     JSRegExp::Flags(0), 0);
 | 
| @@ -1290,7 +1291,9 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> global_object,
 | 
|      // @@iterator method is added later.
 | 
|  
 | 
|      map->set_function_with_prototype(true);
 | 
| -    map->set_prototype(native_context()->object_function()->prototype());
 | 
| +    DCHECK_EQ(native_context()->object_function()->prototype(),
 | 
| +              *isolate->initial_object_prototype());
 | 
| +    map->SetPrototype(isolate->initial_object_prototype());
 | 
|      map->set_pre_allocated_property_fields(1);
 | 
|      map->set_inobject_properties(1);
 | 
|  
 | 
| @@ -1937,7 +1940,7 @@ bool Genesis::InstallNatives() {
 | 
|      // maps in the native context.
 | 
|      Handle<Map> generator_function_map =
 | 
|          Map::Copy(sloppy_function_map_writable_prototype_, "GeneratorFunction");
 | 
| -    generator_function_map->set_prototype(*generator_function_prototype);
 | 
| +    generator_function_map->SetPrototype(generator_function_prototype);
 | 
|      native_context()->set_sloppy_generator_function_map(
 | 
|          *generator_function_map);
 | 
|  
 | 
| @@ -1970,13 +1973,13 @@ bool Genesis::InstallNatives() {
 | 
|      Handle<Map> strict_generator_function_map =
 | 
|          Map::Copy(strict_function_map, "StrictGeneratorFunction");
 | 
|      // "arguments" and "caller" already poisoned.
 | 
| -    strict_generator_function_map->set_prototype(*generator_function_prototype);
 | 
| +    strict_generator_function_map->SetPrototype(generator_function_prototype);
 | 
|      native_context()->set_strict_generator_function_map(
 | 
|          *strict_generator_function_map);
 | 
|  
 | 
|      Handle<JSFunction> object_function(native_context()->object_function());
 | 
|      Handle<Map> generator_object_prototype_map = Map::Create(isolate(), 0);
 | 
| -    generator_object_prototype_map->set_prototype(*generator_object_prototype);
 | 
| +    generator_object_prototype_map->SetPrototype(generator_object_prototype);
 | 
|      native_context()->set_generator_object_prototype_map(
 | 
|          *generator_object_prototype_map);
 | 
|    }
 | 
| @@ -2077,7 +2080,7 @@ bool Genesis::InstallNatives() {
 | 
|  
 | 
|      // Set prototype on map.
 | 
|      initial_map->set_non_instance_prototype(false);
 | 
| -    initial_map->set_prototype(*array_prototype);
 | 
| +    initial_map->SetPrototype(array_prototype);
 | 
|  
 | 
|      // Update map with length accessor from Array and add "index" and "input".
 | 
|      Map::EnsureDescriptorSlack(initial_map, 3);
 | 
| 
 |