Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index 4cfebadd57bf27daceb15f1990d171781f75a5e9..f6d9979e9f1f15514314f9d67a296804371b5195 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -383,8 +383,7 @@ static Handle<JSFunction> InstallFunction(Handle<JSObject> target, |
void Genesis::SetFunctionInstanceDescriptor( |
Handle<Map> map, PrototypePropertyMode prototypeMode) { |
int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; |
- Handle<DescriptorArray> descriptors(factory()->NewDescriptorArray(0, size)); |
- DescriptorArray::WhitenessWitness witness(*descriptors); |
+ Map::EnsureDescriptorSlack(map, size); |
Handle<Foreign> length(factory()->NewForeign(&Accessors::FunctionLength)); |
Handle<Foreign> name(factory()->NewForeign(&Accessors::FunctionName)); |
@@ -396,23 +395,22 @@ void Genesis::SetFunctionInstanceDescriptor( |
} |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
DONT_ENUM | DONT_DELETE | READ_ONLY); |
- map->set_instance_descriptors(*descriptors); |
{ // Add length. |
CallbacksDescriptor d(factory()->length_string(), length, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add name. |
CallbacksDescriptor d(factory()->name_string(), name, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add arguments. |
CallbacksDescriptor d(factory()->arguments_string(), args, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add caller. |
CallbacksDescriptor d(factory()->caller_string(), caller, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
if (prototypeMode != DONT_ADD_PROTOTYPE) { |
// Add prototype. |
@@ -420,7 +418,7 @@ void Genesis::SetFunctionInstanceDescriptor( |
attribs = static_cast<PropertyAttributes>(attribs & ~READ_ONLY); |
} |
CallbacksDescriptor d(factory()->prototype_string(), prototype, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
} |
@@ -522,8 +520,7 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
void Genesis::SetStrictFunctionInstanceDescriptor( |
Handle<Map> map, PrototypePropertyMode prototypeMode) { |
int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5; |
- Handle<DescriptorArray> descriptors(factory()->NewDescriptorArray(0, size)); |
- DescriptorArray::WhitenessWitness witness(*descriptors); |
+ Map::EnsureDescriptorSlack(map, size); |
Handle<Foreign> length(factory()->NewForeign(&Accessors::FunctionLength)); |
Handle<Foreign> name(factory()->NewForeign(&Accessors::FunctionName)); |
@@ -537,31 +534,30 @@ void Genesis::SetStrictFunctionInstanceDescriptor( |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); |
PropertyAttributes ro_attribs = |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
- map->set_instance_descriptors(*descriptors); |
{ // Add length. |
CallbacksDescriptor d(factory()->length_string(), length, ro_attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add name. |
CallbacksDescriptor d(factory()->name_string(), name, ro_attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add arguments. |
CallbacksDescriptor d(factory()->arguments_string(), arguments, |
rw_attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // Add caller. |
CallbacksDescriptor d(factory()->caller_string(), caller, rw_attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
if (prototypeMode != DONT_ADD_PROTOTYPE) { |
// Add prototype. |
PropertyAttributes attribs = |
prototypeMode == ADD_WRITEABLE_PROTOTYPE ? rw_attribs : ro_attribs; |
CallbacksDescriptor d(factory()->prototype_string(), prototype, attribs); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
} |
@@ -861,19 +857,15 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
// This assert protects an optimization in |
// HGraphBuilder::JSArrayBuilder::EmitMapCode() |
ASSERT(initial_map->elements_kind() == GetInitialFastElementsKind()); |
- |
- Handle<DescriptorArray> array_descriptors( |
- factory->NewDescriptorArray(0, 1)); |
- DescriptorArray::WhitenessWitness witness(*array_descriptors); |
+ Map::EnsureDescriptorSlack(initial_map, 1); |
Handle<Foreign> array_length(factory->NewForeign(&Accessors::ArrayLength)); |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
DONT_ENUM | DONT_DELETE); |
- initial_map->set_instance_descriptors(*array_descriptors); |
{ // Add length. |
CallbacksDescriptor d(factory->length_string(), array_length, attribs); |
- array_function->initial_map()->AppendDescriptor(&d, witness); |
+ array_function->initial_map()->AppendDescriptor(&d); |
} |
// array_function is used internally. JS code creating array object should |
@@ -916,19 +908,16 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
Handle<Map> string_map = |
Handle<Map>(native_context()->string_function()->initial_map()); |
- Handle<DescriptorArray> string_descriptors( |
- factory->NewDescriptorArray(0, 1)); |
- DescriptorArray::WhitenessWitness witness(*string_descriptors); |
+ Map::EnsureDescriptorSlack(string_map, 1); |
Handle<Foreign> string_length( |
factory->NewForeign(&Accessors::StringLength)); |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
DONT_ENUM | DONT_DELETE | READ_ONLY); |
- string_map->set_instance_descriptors(*string_descriptors); |
{ // Add length. |
CallbacksDescriptor d(factory->length_string(), string_length, attribs); |
- string_map->AppendDescriptor(&d, witness); |
+ string_map->AppendDescriptor(&d); |
} |
} |
@@ -958,9 +947,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
PropertyAttributes final = |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
- Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(0, 5); |
- DescriptorArray::WhitenessWitness witness(*descriptors); |
- initial_map->set_instance_descriptors(*descriptors); |
+ Map::EnsureDescriptorSlack(initial_map, 5); |
{ |
// ECMA-262, section 15.10.7.1. |
@@ -968,7 +955,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
JSRegExp::kSourceFieldIndex, |
final, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&field, witness); |
+ initial_map->AppendDescriptor(&field); |
} |
{ |
// ECMA-262, section 15.10.7.2. |
@@ -976,7 +963,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
JSRegExp::kGlobalFieldIndex, |
final, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&field, witness); |
+ initial_map->AppendDescriptor(&field); |
} |
{ |
// ECMA-262, section 15.10.7.3. |
@@ -984,7 +971,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
JSRegExp::kIgnoreCaseFieldIndex, |
final, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&field, witness); |
+ initial_map->AppendDescriptor(&field); |
} |
{ |
// ECMA-262, section 15.10.7.4. |
@@ -992,7 +979,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
JSRegExp::kMultilineFieldIndex, |
final, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&field, witness); |
+ initial_map->AppendDescriptor(&field); |
} |
{ |
// ECMA-262, section 15.10.7.5. |
@@ -1002,7 +989,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
JSRegExp::kLastIndexFieldIndex, |
writable, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&field, witness); |
+ initial_map->AppendDescriptor(&field); |
} |
initial_map->set_inobject_properties(5); |
@@ -1175,26 +1162,24 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, |
Heap::kStrictArgumentsObjectSize); |
// Create the descriptor array for the arguments object. |
- Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(0, 3); |
- DescriptorArray::WhitenessWitness witness(*descriptors); |
- map->set_instance_descriptors(*descriptors); |
+ Map::EnsureDescriptorSlack(map, 3); |
{ // length |
FieldDescriptor d( |
factory->length_string(), 0, DONT_ENUM, Representation::Tagged()); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // callee |
CallbacksDescriptor d(factory->callee_string(), |
callee, |
attributes); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
{ // caller |
CallbacksDescriptor d(factory->caller_string(), |
caller, |
attributes); |
- map->AppendDescriptor(&d, witness); |
+ map->AppendDescriptor(&d); |
} |
map->set_function_with_prototype(true); |
@@ -1380,11 +1365,8 @@ void Genesis::InitializeExperimentalGlobal() { |
object_function, JSGeneratorObject::kResultPropertyCount); |
ASSERT(generator_result_map->inobject_properties() == |
JSGeneratorObject::kResultPropertyCount); |
- |
- Handle<DescriptorArray> descriptors = factory()->NewDescriptorArray(0, |
- JSGeneratorObject::kResultPropertyCount); |
- DescriptorArray::WhitenessWitness witness(*descriptors); |
- generator_result_map->set_instance_descriptors(*descriptors); |
+ Map::EnsureDescriptorSlack( |
+ generator_result_map, JSGeneratorObject::kResultPropertyCount); |
Handle<String> value_string = factory()->InternalizeOneByteString( |
STATIC_ASCII_VECTOR("value")); |
@@ -1392,7 +1374,7 @@ void Genesis::InitializeExperimentalGlobal() { |
JSGeneratorObject::kResultValuePropertyIndex, |
NONE, |
Representation::Tagged()); |
- generator_result_map->AppendDescriptor(&value_descr, witness); |
+ generator_result_map->AppendDescriptor(&value_descr); |
Handle<String> done_string = factory()->InternalizeOneByteString( |
STATIC_ASCII_VECTOR("done")); |
@@ -1400,7 +1382,7 @@ void Genesis::InitializeExperimentalGlobal() { |
JSGeneratorObject::kResultDonePropertyIndex, |
NONE, |
Representation::Tagged()); |
- generator_result_map->AppendDescriptor(&done_descr, witness); |
+ generator_result_map->AppendDescriptor(&done_descr); |
generator_result_map->set_unused_property_fields(0); |
ASSERT_EQ(JSGeneratorObject::kResultSize, |
@@ -1608,20 +1590,17 @@ Handle<JSFunction> Genesis::InstallInternalArray( |
array_function->set_initial_map(*initial_map); |
// Make "length" magic on instances. |
- Handle<DescriptorArray> array_descriptors( |
- factory()->NewDescriptorArray(0, 1)); |
- DescriptorArray::WhitenessWitness witness(*array_descriptors); |
+ Map::EnsureDescriptorSlack(initial_map, 1); |
Handle<Foreign> array_length(factory()->NewForeign( |
&Accessors::ArrayLength)); |
PropertyAttributes attribs = static_cast<PropertyAttributes>( |
DONT_ENUM | DONT_DELETE); |
- initial_map->set_instance_descriptors(*array_descriptors); |
{ // Add length. |
CallbacksDescriptor d( |
factory()->length_string(), array_length, attribs); |
- array_function->initial_map()->AppendDescriptor(&d, witness); |
+ array_function->initial_map()->AppendDescriptor(&d); |
} |
return array_function; |
@@ -1702,10 +1681,7 @@ bool Genesis::InstallNatives() { |
native_context()->set_script_function(*script_fun); |
Handle<Map> script_map = Handle<Map>(script_fun->initial_map()); |
- |
- Handle<DescriptorArray> script_descriptors( |
- factory()->NewDescriptorArray(0, 13)); |
- DescriptorArray::WhitenessWitness witness(*script_descriptors); |
+ Map::EnsureDescriptorSlack(script_map, 13); |
Handle<Foreign> script_source( |
factory()->NewForeign(&Accessors::ScriptSource)); |
@@ -1757,61 +1733,60 @@ bool Genesis::InstallNatives() { |
factory()->NewForeign(&Accessors::ScriptEvalFromFunctionName)); |
PropertyAttributes attribs = |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
- script_map->set_instance_descriptors(*script_descriptors); |
{ |
CallbacksDescriptor d( |
factory()->source_string(), script_source, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d(factory()->name_string(), script_name, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d(id_string, script_id, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d(line_offset_string, script_line_offset, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d( |
column_offset_string, script_column_offset, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d(type_string, script_type, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d( |
compilation_type_string, script_compilation_type, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d(line_ends_string, script_line_ends, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d( |
context_data_string, script_context_data, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
CallbacksDescriptor d( |
eval_from_script_string, script_eval_from_script, attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
@@ -1819,7 +1794,7 @@ bool Genesis::InstallNatives() { |
eval_from_script_position_string, |
script_eval_from_script_position, |
attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
{ |
@@ -1827,7 +1802,7 @@ bool Genesis::InstallNatives() { |
eval_from_function_name_string, |
script_eval_from_function_name, |
attribs); |
- script_map->AppendDescriptor(&d, witness); |
+ script_map->AppendDescriptor(&d); |
} |
// Allocate the empty script. |
@@ -1947,10 +1922,7 @@ bool Genesis::InstallNatives() { |
initial_map->set_prototype(*array_prototype); |
// Update map with length accessor from Array and add "index" and "input". |
- Handle<DescriptorArray> reresult_descriptors = |
- factory()->NewDescriptorArray(0, 3); |
- DescriptorArray::WhitenessWitness witness(*reresult_descriptors); |
- initial_map->set_instance_descriptors(*reresult_descriptors); |
+ Map::EnsureDescriptorSlack(initial_map, 3); |
{ |
JSFunction* array_function = native_context()->array_function(); |
@@ -1964,14 +1936,14 @@ bool Genesis::InstallNatives() { |
handle(array_descriptors->GetValue(old), |
isolate()), |
array_descriptors->GetDetails(old).attributes()); |
- initial_map->AppendDescriptor(&desc, witness); |
+ initial_map->AppendDescriptor(&desc); |
} |
{ |
FieldDescriptor index_field(factory()->index_string(), |
JSRegExpResult::kIndexIndex, |
NONE, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&index_field, witness); |
+ initial_map->AppendDescriptor(&index_field); |
} |
{ |
@@ -1979,7 +1951,7 @@ bool Genesis::InstallNatives() { |
JSRegExpResult::kInputIndex, |
NONE, |
Representation::Tagged()); |
- initial_map->AppendDescriptor(&input_field, witness); |
+ initial_map->AppendDescriptor(&input_field); |
} |
initial_map->set_inobject_properties(2); |