| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index 84e9377829736d9df6866bdc657184114c290323..ffefdc6d93fa46b83bdb6b96bf1dee8ffd4d22ea 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -376,26 +376,28 @@ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor(
|
| PropertyAttributes attributes =
|
| static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
|
|
|
| + DescriptorArray::WhitenessWitness witness(*descriptors);
|
| +
|
| { // Add length.
|
| Handle<Foreign> foreign = factory()->NewForeign(&Accessors::FunctionLength);
|
| CallbacksDescriptor d(*factory()->length_symbol(), *foreign, attributes);
|
| - descriptors->Set(0, &d);
|
| + descriptors->Set(0, &d, witness);
|
| }
|
| { // Add name.
|
| Handle<Foreign> foreign = factory()->NewForeign(&Accessors::FunctionName);
|
| CallbacksDescriptor d(*factory()->name_symbol(), *foreign, attributes);
|
| - descriptors->Set(1, &d);
|
| + descriptors->Set(1, &d, witness);
|
| }
|
| { // Add arguments.
|
| Handle<Foreign> foreign =
|
| factory()->NewForeign(&Accessors::FunctionArguments);
|
| CallbacksDescriptor d(*factory()->arguments_symbol(), *foreign, attributes);
|
| - descriptors->Set(2, &d);
|
| + descriptors->Set(2, &d, witness);
|
| }
|
| { // Add caller.
|
| Handle<Foreign> foreign = factory()->NewForeign(&Accessors::FunctionCaller);
|
| CallbacksDescriptor d(*factory()->caller_symbol(), *foreign, attributes);
|
| - descriptors->Set(3, &d);
|
| + descriptors->Set(3, &d, witness);
|
| }
|
| if (prototypeMode != DONT_ADD_PROTOTYPE) {
|
| // Add prototype.
|
| @@ -405,9 +407,9 @@ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor(
|
| Handle<Foreign> foreign =
|
| factory()->NewForeign(&Accessors::FunctionPrototype);
|
| CallbacksDescriptor d(*factory()->prototype_symbol(), *foreign, attributes);
|
| - descriptors->Set(4, &d);
|
| + descriptors->Set(4, &d, witness);
|
| }
|
| - descriptors->Sort();
|
| + descriptors->Sort(witness);
|
| return descriptors;
|
| }
|
|
|
| @@ -525,25 +527,27 @@ Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor(
|
| PropertyAttributes attributes = static_cast<PropertyAttributes>(
|
| DONT_ENUM | DONT_DELETE);
|
|
|
| + DescriptorArray::WhitenessWitness witness(*descriptors);
|
| +
|
| { // length
|
| Handle<Foreign> foreign = factory()->NewForeign(&Accessors::FunctionLength);
|
| CallbacksDescriptor d(*factory()->length_symbol(), *foreign, attributes);
|
| - descriptors->Set(0, &d);
|
| + descriptors->Set(0, &d, witness);
|
| }
|
| { // name
|
| Handle<Foreign> foreign = factory()->NewForeign(&Accessors::FunctionName);
|
| CallbacksDescriptor d(*factory()->name_symbol(), *foreign, attributes);
|
| - descriptors->Set(1, &d);
|
| + descriptors->Set(1, &d, witness);
|
| }
|
| { // arguments
|
| CallbacksDescriptor d(*factory()->arguments_symbol(),
|
| *arguments,
|
| attributes);
|
| - descriptors->Set(2, &d);
|
| + descriptors->Set(2, &d, witness);
|
| }
|
| { // caller
|
| CallbacksDescriptor d(*factory()->caller_symbol(), *caller, attributes);
|
| - descriptors->Set(3, &d);
|
| + descriptors->Set(3, &d, witness);
|
| }
|
|
|
| // prototype
|
| @@ -554,10 +558,10 @@ Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor(
|
| Handle<Foreign> foreign =
|
| factory()->NewForeign(&Accessors::FunctionPrototype);
|
| CallbacksDescriptor d(*factory()->prototype_symbol(), *foreign, attributes);
|
| - descriptors->Set(4, &d);
|
| + descriptors->Set(4, &d, witness);
|
| }
|
|
|
| - descriptors->Sort();
|
| + descriptors->Sort(witness);
|
| return descriptors;
|
| }
|
|
|
| @@ -942,6 +946,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| ASSERT_EQ(0, initial_map->inobject_properties());
|
|
|
| Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(5);
|
| + DescriptorArray::WhitenessWitness witness(*descriptors);
|
| PropertyAttributes final =
|
| static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
|
| int enum_index = 0;
|
| @@ -951,7 +956,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| JSRegExp::kSourceFieldIndex,
|
| final,
|
| enum_index++);
|
| - descriptors->Set(0, &field);
|
| + descriptors->Set(0, &field, witness);
|
| }
|
| {
|
| // ECMA-262, section 15.10.7.2.
|
| @@ -959,7 +964,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| JSRegExp::kGlobalFieldIndex,
|
| final,
|
| enum_index++);
|
| - descriptors->Set(1, &field);
|
| + descriptors->Set(1, &field, witness);
|
| }
|
| {
|
| // ECMA-262, section 15.10.7.3.
|
| @@ -967,7 +972,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| JSRegExp::kIgnoreCaseFieldIndex,
|
| final,
|
| enum_index++);
|
| - descriptors->Set(2, &field);
|
| + descriptors->Set(2, &field, witness);
|
| }
|
| {
|
| // ECMA-262, section 15.10.7.4.
|
| @@ -975,7 +980,7 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| JSRegExp::kMultilineFieldIndex,
|
| final,
|
| enum_index++);
|
| - descriptors->Set(3, &field);
|
| + descriptors->Set(3, &field, witness);
|
| }
|
| {
|
| // ECMA-262, section 15.10.7.5.
|
| @@ -985,10 +990,10 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
| JSRegExp::kLastIndexFieldIndex,
|
| writable,
|
| enum_index++);
|
| - descriptors->Set(4, &field);
|
| + descriptors->Set(4, &field, witness);
|
| }
|
| descriptors->SetNextEnumerationIndex(enum_index);
|
| - descriptors->Sort();
|
| + descriptors->Sort(witness);
|
|
|
| initial_map->set_inobject_properties(5);
|
| initial_map->set_pre_allocated_property_fields(5);
|
| @@ -1125,19 +1130,20 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
|
|
|
| // Create the descriptor array for the arguments object.
|
| Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(3);
|
| + DescriptorArray::WhitenessWitness witness(*descriptors);
|
| { // length
|
| FieldDescriptor d(*factory->length_symbol(), 0, DONT_ENUM);
|
| - descriptors->Set(0, &d);
|
| + descriptors->Set(0, &d, witness);
|
| }
|
| { // callee
|
| CallbacksDescriptor d(*factory->callee_symbol(), *callee, attributes);
|
| - descriptors->Set(1, &d);
|
| + descriptors->Set(1, &d, witness);
|
| }
|
| { // caller
|
| CallbacksDescriptor d(*factory->caller_symbol(), *caller, attributes);
|
| - descriptors->Set(2, &d);
|
| + descriptors->Set(2, &d, witness);
|
| }
|
| - descriptors->Sort();
|
| + descriptors->Sort(witness);
|
|
|
| // Create the map. Allocate one in-object field for length.
|
| Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE,
|
| @@ -1696,7 +1702,9 @@ bool Genesis::InstallNatives() {
|
| Handle<DescriptorArray> reresult_descriptors =
|
| factory()->NewDescriptorArray(3);
|
|
|
| - reresult_descriptors->CopyFrom(0, *array_descriptors, 0);
|
| + DescriptorArray::WhitenessWitness witness(*reresult_descriptors);
|
| +
|
| + reresult_descriptors->CopyFrom(0, *array_descriptors, 0, witness);
|
|
|
| int enum_index = 0;
|
| {
|
| @@ -1704,7 +1712,7 @@ bool Genesis::InstallNatives() {
|
| JSRegExpResult::kIndexIndex,
|
| NONE,
|
| enum_index++);
|
| - reresult_descriptors->Set(1, &index_field);
|
| + reresult_descriptors->Set(1, &index_field, witness);
|
| }
|
|
|
| {
|
| @@ -1712,9 +1720,9 @@ bool Genesis::InstallNatives() {
|
| JSRegExpResult::kInputIndex,
|
| NONE,
|
| enum_index++);
|
| - reresult_descriptors->Set(2, &input_field);
|
| + reresult_descriptors->Set(2, &input_field, witness);
|
| }
|
| - reresult_descriptors->Sort();
|
| + reresult_descriptors->Sort(witness);
|
|
|
| initial_map->set_inobject_properties(2);
|
| initial_map->set_pre_allocated_property_fields(2);
|
|
|