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