Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: src/bootstrapper.cc

Issue 10695120: Ensure that all descriptors have a valid enumeration index, and replace NextEnumIndex with LastAdde… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comment. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index 4238a12d22a71276d394c6de179538b96ff1563c..54eb9b8a8f7ca9599f4d0131292022bccd1a887e 100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -390,25 +390,32 @@ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor(
DescriptorArray::WhitenessWitness witness(*descriptors);
+ int index = 0;
+
{ // Add length.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionLength));
- CallbacksDescriptor d(*factory()->length_symbol(), *f, attribs);
- descriptors->Set(0, &d, witness);
+ CallbacksDescriptor d(*factory()->length_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add name.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionName));
- CallbacksDescriptor d(*factory()->name_symbol(), *f, attribs);
- descriptors->Set(1, &d, witness);
+ CallbacksDescriptor d(*factory()->name_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add arguments.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionArguments));
- CallbacksDescriptor d(*factory()->arguments_symbol(), *f, attribs);
- descriptors->Set(2, &d, witness);
+ CallbacksDescriptor d(
+ *factory()->arguments_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add caller.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionCaller));
- CallbacksDescriptor d(*factory()->caller_symbol(), *f, attribs);
- descriptors->Set(3, &d, witness);
+ CallbacksDescriptor d(*factory()->caller_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
if (prototypeMode != DONT_ADD_PROTOTYPE) {
// Add prototype.
@@ -416,9 +423,11 @@ Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor(
attribs = static_cast<PropertyAttributes>(attribs & ~READ_ONLY);
}
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionPrototype));
- CallbacksDescriptor d(*factory()->prototype_symbol(), *f, attribs);
- descriptors->Set(4, &d, witness);
+ CallbacksDescriptor d(
+ *factory()->prototype_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
}
+
descriptors->Sort(witness);
return descriptors;
}
@@ -533,25 +542,32 @@ Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor(
DescriptorArray::WhitenessWitness witness(*descriptors);
+ int index = 0;
{ // Add length.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionLength));
- CallbacksDescriptor d(*factory()->length_symbol(), *f, attribs);
- descriptors->Set(0, &d, witness);
+ CallbacksDescriptor d(*factory()->length_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add name.
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionName));
- CallbacksDescriptor d(*factory()->name_symbol(), *f, attribs);
- descriptors->Set(1, &d, witness);
+ CallbacksDescriptor d(*factory()->name_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add arguments.
Handle<AccessorPair> arguments(factory()->NewAccessorPair());
- CallbacksDescriptor d(*factory()->arguments_symbol(), *arguments, attribs);
- descriptors->Set(2, &d, witness);
+ CallbacksDescriptor d(
+ *factory()->arguments_symbol(), *arguments, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // Add caller.
Handle<AccessorPair> caller(factory()->NewAccessorPair());
- CallbacksDescriptor d(*factory()->caller_symbol(), *caller, attribs);
- descriptors->Set(3, &d, witness);
+ CallbacksDescriptor d(
+ *factory()->caller_symbol(), *caller, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
if (prototypeMode != DONT_ADD_PROTOTYPE) {
@@ -560,8 +576,9 @@ Handle<DescriptorArray> Genesis::ComputeStrictFunctionInstanceDescriptor(
attribs = static_cast<PropertyAttributes>(attribs | READ_ONLY);
}
Handle<Foreign> f(factory()->NewForeign(&Accessors::FunctionPrototype));
- CallbacksDescriptor d(*factory()->prototype_symbol(), *f, attribs);
- descriptors->Set(4, &d, witness);
+ CallbacksDescriptor d(
+ *factory()->prototype_symbol(), *f, attribs, index + 1);
+ descriptors->Set(index, &d, witness);
}
descriptors->Sort(witness);
@@ -950,38 +967,42 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
DescriptorArray::WhitenessWitness witness(*descriptors);
PropertyAttributes final =
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
- int enum_index = 0;
+ int index = 0;
{
// ECMA-262, section 15.10.7.1.
FieldDescriptor field(heap->source_symbol(),
JSRegExp::kSourceFieldIndex,
final,
- enum_index++);
- descriptors->Set(0, &field, witness);
+ index + 1);
+ descriptors->Set(index, &field, witness);
+ ++index;
}
{
// ECMA-262, section 15.10.7.2.
FieldDescriptor field(heap->global_symbol(),
JSRegExp::kGlobalFieldIndex,
final,
- enum_index++);
- descriptors->Set(1, &field, witness);
+ index + 1);
+ descriptors->Set(index, &field, witness);
+ ++index;
}
{
// ECMA-262, section 15.10.7.3.
FieldDescriptor field(heap->ignore_case_symbol(),
JSRegExp::kIgnoreCaseFieldIndex,
final,
- enum_index++);
- descriptors->Set(2, &field, witness);
+ index + 1);
+ descriptors->Set(index, &field, witness);
+ ++index;
}
{
// ECMA-262, section 15.10.7.4.
FieldDescriptor field(heap->multiline_symbol(),
JSRegExp::kMultilineFieldIndex,
final,
- enum_index++);
- descriptors->Set(3, &field, witness);
+ index + 1);
+ descriptors->Set(index, &field, witness);
+ ++index;
}
{
// ECMA-262, section 15.10.7.5.
@@ -990,10 +1011,9 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
FieldDescriptor field(heap->last_index_symbol(),
JSRegExp::kLastIndexFieldIndex,
writable,
- enum_index++);
- descriptors->Set(4, &field, witness);
+ index + 1);
+ descriptors->Set(index, &field, witness);
}
- descriptors->SetNextEnumerationIndex(enum_index);
descriptors->Sort(witness);
initial_map->set_inobject_properties(5);
@@ -1138,17 +1158,26 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
// Create the descriptor array for the arguments object.
Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(3);
DescriptorArray::WhitenessWitness witness(*descriptors);
+ int index = 0;
{ // length
- FieldDescriptor d(*factory->length_symbol(), 0, DONT_ENUM);
- descriptors->Set(0, &d, witness);
+ FieldDescriptor d(*factory->length_symbol(), 0, DONT_ENUM, index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // callee
- CallbacksDescriptor d(*factory->callee_symbol(), *callee, attributes);
- descriptors->Set(1, &d, witness);
+ CallbacksDescriptor d(*factory->callee_symbol(),
+ *callee,
+ attributes,
+ index + 1);
+ descriptors->Set(index, &d, witness);
+ ++index;
}
{ // caller
- CallbacksDescriptor d(*factory->caller_symbol(), *caller, attributes);
- descriptors->Set(2, &d, witness);
+ CallbacksDescriptor d(*factory->caller_symbol(),
+ *caller,
+ attributes,
+ index + 1);
+ descriptors->Set(index, &d, witness);
}
descriptors->Sort(witness);
@@ -1741,26 +1770,27 @@ bool Genesis::InstallNatives() {
JSFunction* array_function = global_context()->array_function();
Handle<DescriptorArray> array_descriptors(
array_function->initial_map()->instance_descriptors());
- int index = array_descriptors->SearchWithCache(heap()->length_symbol());
+ int old = array_descriptors->SearchWithCache(heap()->length_symbol());
MaybeObject* copy_result =
- reresult_descriptors->CopyFrom(0, *array_descriptors, index, witness);
+ reresult_descriptors->CopyFrom(0, *array_descriptors, old, witness);
if (copy_result->IsFailure()) return false;
- int enum_index = 0;
+ int index = 1;
{
FieldDescriptor index_field(heap()->index_symbol(),
JSRegExpResult::kIndexIndex,
NONE,
- enum_index++);
- reresult_descriptors->Set(1, &index_field, witness);
+ index + 1);
+ reresult_descriptors->Set(index, &index_field, witness);
+ ++index;
}
{
FieldDescriptor input_field(heap()->input_symbol(),
JSRegExpResult::kInputIndex,
NONE,
- enum_index++);
- reresult_descriptors->Set(2, &input_field, witness);
+ index + 1);
+ reresult_descriptors->Set(index, &input_field, witness);
}
reresult_descriptors->Sort(witness);
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698