| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index e7a5c23259d53b93c691533028c5687a5c9be964..05c08444263de31e76bc6bf19bb91ab462f50ca7 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1728,28 +1728,6 @@ void JSObject::EnsureCanContainElements(Handle<JSObject> object,
|
| }
|
|
|
|
|
| -MaybeObject* JSObject::GetElementsTransitionMap(Isolate* isolate,
|
| - ElementsKind to_kind) {
|
| - Map* current_map = map();
|
| - ElementsKind from_kind = current_map->elements_kind();
|
| - if (from_kind == to_kind) return current_map;
|
| -
|
| - Context* native_context = isolate->context()->native_context();
|
| - Object* maybe_array_maps = native_context->js_array_maps();
|
| - if (maybe_array_maps->IsFixedArray()) {
|
| - FixedArray* array_maps = FixedArray::cast(maybe_array_maps);
|
| - if (array_maps->get(from_kind) == current_map) {
|
| - Object* maybe_transitioned_map = array_maps->get(to_kind);
|
| - if (maybe_transitioned_map->IsMap()) {
|
| - return Map::cast(maybe_transitioned_map);
|
| - }
|
| - }
|
| - }
|
| -
|
| - return GetElementsTransitionMapSlow(to_kind);
|
| -}
|
| -
|
| -
|
| void JSObject::SetMapAndElements(Handle<JSObject> object,
|
| Handle<Map> new_map,
|
| Handle<FixedArrayBase> value) {
|
| @@ -1778,50 +1756,8 @@ void JSObject::initialize_properties() {
|
|
|
|
|
| void JSObject::initialize_elements() {
|
| - if (map()->has_fast_smi_or_object_elements() ||
|
| - map()->has_fast_double_elements()) {
|
| - ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array()));
|
| - WRITE_FIELD(this, kElementsOffset, GetHeap()->empty_fixed_array());
|
| - } else if (map()->has_external_array_elements()) {
|
| - ExternalArray* empty_array = GetHeap()->EmptyExternalArrayForMap(map());
|
| - ASSERT(!GetHeap()->InNewSpace(empty_array));
|
| - WRITE_FIELD(this, kElementsOffset, empty_array);
|
| - } else if (map()->has_fixed_typed_array_elements()) {
|
| - FixedTypedArrayBase* empty_array =
|
| - GetHeap()->EmptyFixedTypedArrayForMap(map());
|
| - ASSERT(!GetHeap()->InNewSpace(empty_array));
|
| - WRITE_FIELD(this, kElementsOffset, empty_array);
|
| - } else {
|
| - UNREACHABLE();
|
| - }
|
| -}
|
| -
|
| -
|
| -MaybeObject* JSObject::ResetElements() {
|
| - if (map()->is_observed()) {
|
| - // Maintain invariant that observed elements are always in dictionary mode.
|
| - SeededNumberDictionary* dictionary;
|
| - MaybeObject* maybe = SeededNumberDictionary::Allocate(GetHeap(), 0);
|
| - if (!maybe->To(&dictionary)) return maybe;
|
| - if (map() == GetHeap()->sloppy_arguments_elements_map()) {
|
| - FixedArray::cast(elements())->set(1, dictionary);
|
| - } else {
|
| - set_elements(dictionary);
|
| - }
|
| - return this;
|
| - }
|
| -
|
| - ElementsKind elements_kind = GetInitialFastElementsKind();
|
| - if (!FLAG_smi_only_arrays) {
|
| - elements_kind = FastSmiToObjectElementsKind(elements_kind);
|
| - }
|
| - MaybeObject* maybe = GetElementsTransitionMap(GetIsolate(), elements_kind);
|
| - Map* map;
|
| - if (!maybe->To(&map)) return maybe;
|
| - set_map(map);
|
| - initialize_elements();
|
| -
|
| - return this;
|
| + FixedArrayBase* elements = map()->GetInitialElements();
|
| + WRITE_FIELD(this, kElementsOffset, elements);
|
| }
|
|
|
|
|
| @@ -2664,6 +2600,27 @@ void Map::LookupTransition(JSObject* holder,
|
| }
|
|
|
|
|
| +FixedArrayBase* Map::GetInitialElements() {
|
| + if (has_fast_smi_or_object_elements() ||
|
| + has_fast_double_elements()) {
|
| + ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array()));
|
| + return GetHeap()->empty_fixed_array();
|
| + } else if (has_external_array_elements()) {
|
| + ExternalArray* empty_array = GetHeap()->EmptyExternalArrayForMap(this);
|
| + ASSERT(!GetHeap()->InNewSpace(empty_array));
|
| + return empty_array;
|
| + } else if (has_fixed_typed_array_elements()) {
|
| + FixedTypedArrayBase* empty_array =
|
| + GetHeap()->EmptyFixedTypedArrayForMap(this);
|
| + ASSERT(!GetHeap()->InNewSpace(empty_array));
|
| + return empty_array;
|
| + } else {
|
| + UNREACHABLE();
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| +
|
| Object** DescriptorArray::GetKeySlot(int descriptor_number) {
|
| ASSERT(descriptor_number < number_of_descriptors());
|
| return RawFieldOfElementAt(ToKeyIndex(descriptor_number));
|
| @@ -2768,8 +2725,8 @@ AccessorDescriptor* DescriptorArray::GetCallbacks(int descriptor_number) {
|
|
|
|
|
| void DescriptorArray::Get(int descriptor_number, Descriptor* desc) {
|
| - desc->Init(GetKey(descriptor_number),
|
| - GetValue(descriptor_number),
|
| + desc->Init(handle(GetKey(descriptor_number), GetIsolate()),
|
| + handle(GetValue(descriptor_number), GetIsolate()),
|
| GetDetails(descriptor_number));
|
| }
|
|
|
| @@ -2782,10 +2739,10 @@ void DescriptorArray::Set(int descriptor_number,
|
|
|
| NoIncrementalWriteBarrierSet(this,
|
| ToKeyIndex(descriptor_number),
|
| - desc->GetKey());
|
| + *desc->GetKey());
|
| NoIncrementalWriteBarrierSet(this,
|
| ToValueIndex(descriptor_number),
|
| - desc->GetValue());
|
| + *desc->GetValue());
|
| NoIncrementalWriteBarrierSet(this,
|
| ToDetailsIndex(descriptor_number),
|
| desc->GetDetails().AsSmi());
|
| @@ -2796,14 +2753,15 @@ void DescriptorArray::Set(int descriptor_number, Descriptor* desc) {
|
| // Range check.
|
| ASSERT(descriptor_number < number_of_descriptors());
|
|
|
| - set(ToKeyIndex(descriptor_number), desc->GetKey());
|
| - set(ToValueIndex(descriptor_number), desc->GetValue());
|
| + set(ToKeyIndex(descriptor_number), *desc->GetKey());
|
| + set(ToValueIndex(descriptor_number), *desc->GetValue());
|
| set(ToDetailsIndex(descriptor_number), desc->GetDetails().AsSmi());
|
| }
|
|
|
|
|
| void DescriptorArray::Append(Descriptor* desc,
|
| const WhitenessWitness& witness) {
|
| + DisallowHeapAllocation no_gc;
|
| int descriptor_number = number_of_descriptors();
|
| SetNumberOfDescriptors(descriptor_number + 1);
|
| Set(descriptor_number, desc, witness);
|
| @@ -2823,6 +2781,7 @@ void DescriptorArray::Append(Descriptor* desc,
|
|
|
|
|
| void DescriptorArray::Append(Descriptor* desc) {
|
| + DisallowHeapAllocation no_gc;
|
| int descriptor_number = number_of_descriptors();
|
| SetNumberOfDescriptors(descriptor_number + 1);
|
| Set(descriptor_number, desc);
|
| @@ -4916,14 +4875,6 @@ bool Map::CanHaveMoreTransitions() {
|
| }
|
|
|
|
|
| -MaybeObject* Map::AddTransition(Name* key,
|
| - Map* target,
|
| - SimpleTransitionFlag flag) {
|
| - if (HasTransitionArray()) return transitions()->CopyInsert(key, target);
|
| - return TransitionArray::NewWith(flag, key, target, GetBackPointer());
|
| -}
|
| -
|
| -
|
| void Map::SetTransition(int transition_index, Map* target) {
|
| transitions()->SetTarget(transition_index, target);
|
| }
|
| @@ -4940,18 +4891,6 @@ int Map::SearchTransition(Name* name) {
|
| }
|
|
|
|
|
| -MaybeObject* Map::set_elements_transition_map(Map* transitioned_map) {
|
| - TransitionArray* transitions;
|
| - MaybeObject* maybe_transitions = AddTransition(
|
| - GetHeap()->elements_transition_symbol(),
|
| - transitioned_map,
|
| - FULL_TRANSITION);
|
| - if (!maybe_transitions->To(&transitions)) return maybe_transitions;
|
| - set_transitions(transitions);
|
| - return transitions;
|
| -}
|
| -
|
| -
|
| FixedArray* Map::GetPrototypeTransitions() {
|
| if (!HasTransitionArray()) return GetHeap()->empty_fixed_array();
|
| if (!transitions()->HasPrototypeTransitions()) {
|
|
|