Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index d1bf975fb5fb7f225e0ce4283a1e3c8b804e1633..7d65e09635584ecca524cf8ba3f87ef3004c8da2 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -892,9 +892,8 @@ void Genesis::InitializeGlobal(Handle<GlobalObject> inner_global, |
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE)); |
// Cache the fast JavaScript array map |
- global_context()->set_js_array_map(array_function->initial_map()); |
- global_context()->js_array_map()->set_instance_descriptors( |
- *array_descriptors); |
+ Map* initial_map = array_function->initial_map(); |
+ initial_map->set_instance_descriptors(*array_descriptors); |
// array_function is used internally. JS code creating array object should |
// search for the 'Array' property on the global object and use that one |
// as the constructor. 'Array' property on a global object can be |
@@ -1637,7 +1636,7 @@ bool Genesis::InstallNatives() { |
MaybeObject* maybe_map = |
array_function->initial_map()->CopyDropTransitions(); |
Map* new_map; |
- if (!maybe_map->To<Map>(&new_map)) return maybe_map; |
+ if (!maybe_map->To<Map>(&new_map)) return false; |
new_map->set_elements_kind(FAST_ELEMENTS); |
array_function->set_initial_map(new_map); |
@@ -1736,17 +1735,15 @@ bool Genesis::InstallNatives() { |
initial_map->set_prototype(*array_prototype); |
// Update map with length accessor from Array and add "index" and "input". |
- Handle<Map> array_map(global_context()->js_array_map()); |
- Handle<DescriptorArray> array_descriptors( |
- array_map->instance_descriptors()); |
- ASSERT_EQ(1, array_descriptors->number_of_descriptors()); |
- |
Handle<DescriptorArray> reresult_descriptors = |
factory()->NewDescriptorArray(3); |
- |
DescriptorArray::WhitenessWitness witness(*reresult_descriptors); |
- reresult_descriptors->CopyFrom(0, *array_descriptors, 0, witness); |
+ 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()); |
+ reresult_descriptors->CopyFrom(0, *array_descriptors, index, witness); |
int enum_index = 0; |
{ |
@@ -2324,6 +2321,11 @@ Genesis::Genesis(Isolate* isolate, |
isolate->counters()->contexts_created_from_scratch()->Increment(); |
} |
+ Handle<Context> context = global_context(); |
+ context->set_untransitioned_js_array_map( |
+ context->array_function()->initial_map()); |
+ context->set_fast_array_element_bias(0); |
Jakob Kummerow
2012/01/04 20:55:17
I have a weak preference to use "Smi::FromInt(0)"
|
+ |
// Initialize experimental globals and install experimental natives. |
InitializeExperimentalGlobal(); |
if (!InstallExperimentalNatives()) return; |