Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index 4ffd3f9ed938e16e0dd4565406241d91b8cf0c1d..da8db2c45260e111710bb2a929447102457bebb1 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -255,16 +255,16 @@ class Genesis BASE_EMBEDDED { |
Handle<Map> CreateFunctionMap(PrototypePropertyMode prototype_mode); |
- Handle<DescriptorArray> ComputeFunctionInstanceDescriptor( |
- PrototypePropertyMode prototypeMode); |
+ void SetFunctionInstanceDescriptor(Handle<Map> map, |
+ PrototypePropertyMode prototypeMode); |
void MakeFunctionInstancePrototypeWritable(); |
Handle<Map> CreateStrictModeFunctionMap( |
PrototypePropertyMode prototype_mode, |
Handle<JSFunction> empty_function); |
- Handle<DescriptorArray> ComputeStrictFunctionInstanceDescriptor( |
- PrototypePropertyMode propertyMode); |
+ void SetStrictFunctionInstanceDescriptor(Handle<Map> map, |
+ PrototypePropertyMode propertyMode); |
static bool CompileBuiltin(Isolate* isolate, int index); |
static bool CompileExperimentalBuiltin(Isolate* isolate, int index); |
@@ -383,8 +383,8 @@ static Handle<JSFunction> InstallFunction(Handle<JSObject> target, |
} |
-Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor( |
- PrototypePropertyMode prototypeMode) { |
+void Genesis::SetFunctionInstanceDescriptor( |
+ Handle<Map> map, PrototypePropertyMode prototypeMode) { |
int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; |
Handle<DescriptorArray> descriptors(factory()->NewDescriptorArray(size)); |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
@@ -422,16 +422,13 @@ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor( |
descriptors->Append(&d, witness); |
} |
- descriptors->Sort(witness); |
- return descriptors; |
+ map->set_instance_descriptors(*descriptors); |
} |
Handle<Map> Genesis::CreateFunctionMap(PrototypePropertyMode prototype_mode) { |
Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); |
- Handle<DescriptorArray> descriptors = |
- ComputeFunctionInstanceDescriptor(prototype_mode); |
- map->set_instance_descriptors(*descriptors); |
+ SetFunctionInstanceDescriptor(map, prototype_mode); |
map->set_function_with_prototype(prototype_mode != DONT_ADD_PROTOTYPE); |
return map; |
} |
@@ -487,8 +484,6 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
global_context()->set_initial_object_prototype(*prototype); |
SetPrototype(object_fun, prototype); |
- object_function_map->set_instance_descriptors( |
- heap->empty_descriptor_array()); |
} |
// Allocate the empty function as the prototype for function ECMAScript |
@@ -527,8 +522,8 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
} |
-Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor( |
- PrototypePropertyMode prototypeMode) { |
+void Genesis::SetStrictFunctionInstanceDescriptor( |
+ Handle<Map> map, PrototypePropertyMode prototypeMode) { |
int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; |
Handle<DescriptorArray> descriptors(factory()->NewDescriptorArray(size)); |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
@@ -567,8 +562,7 @@ Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor( |
descriptors->Append(&d, witness); |
} |
- descriptors->Sort(witness); |
- return descriptors; |
+ map->set_instance_descriptors(*descriptors); |
} |
@@ -596,9 +590,7 @@ Handle<Map> Genesis::CreateStrictModeFunctionMap( |
PrototypePropertyMode prototype_mode, |
Handle<JSFunction> empty_function) { |
Handle<Map> map = factory()->NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); |
- Handle<DescriptorArray> descriptors = |
- ComputeStrictFunctionInstanceDescriptor(prototype_mode); |
- map->set_instance_descriptors(*descriptors); |
+ SetStrictFunctionInstanceDescriptor(map, prototype_mode); |
map->set_function_with_prototype(prototype_mode != DONT_ADD_PROTOTYPE); |
map->set_prototype(*empty_function); |
return map; |
@@ -1000,14 +992,13 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
writable); |
descriptors->Append(&field, witness); |
} |
- descriptors->Sort(witness); |
+ initial_map->set_instance_descriptors(*descriptors); |
initial_map->set_inobject_properties(5); |
initial_map->set_pre_allocated_property_fields(5); |
initial_map->set_unused_property_fields(0); |
initial_map->set_instance_size( |
initial_map->instance_size() + 5 * kPointerSize); |
- initial_map->set_instance_descriptors(*descriptors); |
initial_map->set_visitor_id(StaticVisitorBase::GetVisitorId(*initial_map)); |
// RegExp prototype object is itself a RegExp. |
@@ -1141,6 +1132,9 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
caller->set_getter(*throw_function); |
caller->set_setter(*throw_function); |
+ // Create the map. Allocate one in-object field for length. |
+ Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, |
+ Heap::kArgumentsObjectSizeStrict); |
// Create the descriptor array for the arguments object. |
Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(3); |
DescriptorArray::WhitenessWitness witness(*descriptors); |
@@ -1160,12 +1154,8 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
attributes); |
descriptors->Append(&d, witness); |
} |
- descriptors->Sort(witness); |
- |
- // Create the map. Allocate one in-object field for length. |
- Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, |
- Heap::kArgumentsObjectSizeStrict); |
map->set_instance_descriptors(*descriptors); |
+ |
map->set_function_with_prototype(true); |
map->set_prototype(global_context()->object_function()->prototype()); |
map->set_pre_allocated_property_fields(1); |
@@ -1487,6 +1477,8 @@ bool Genesis::InstallNatives() { |
PropertyAttributes attribs = |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
+ Handle<Map> script_map = Handle<Map>(script_fun->initial_map()); |
+ |
Handle<DescriptorArray> script_descriptors( |
factory()->NewDescriptorArray(13)); |
@@ -1591,9 +1583,6 @@ bool Genesis::InstallNatives() { |
script_descriptors->Append(&d, witness); |
} |
- script_descriptors->Sort(witness); |
- |
- Handle<Map> script_map = Handle<Map>(script_fun->initial_map()); |
script_map->set_instance_descriptors(*script_descriptors); |
// Allocate the empty script. |
@@ -1663,8 +1652,7 @@ bool Genesis::InstallNatives() { |
array_descriptors->Append(&d, witness); |
} |
- array_function->initial_map()->set_instance_descriptors( |
- *array_descriptors); |
+ array_function->initial_map()->set_instance_descriptors(*array_descriptors); |
global_context()->set_internal_array_function(*array_function); |
} |
@@ -1775,12 +1763,11 @@ bool Genesis::InstallNatives() { |
NONE); |
reresult_descriptors->Append(&input_field, witness); |
} |
- reresult_descriptors->Sort(witness); |
+ initial_map->set_instance_descriptors(*reresult_descriptors); |
initial_map->set_inobject_properties(2); |
initial_map->set_pre_allocated_property_fields(2); |
initial_map->set_unused_property_fields(0); |
- initial_map->set_instance_descriptors(*reresult_descriptors); |
global_context()->set_regexp_result_map(*initial_map); |
} |