| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index e47cec7db5cab20a29071c8f7cbc616d39ff4b04..9d8169787d30958651ef32714ba920eeeedf6ff3 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -2165,12 +2165,6 @@ void DescriptorArray::Set(int descriptor_number, Descriptor* desc) {
|
| }
|
|
|
|
|
| -void DescriptorArray::EraseDescriptor(Heap* heap, int descriptor_number) {
|
| - set_null_unchecked(heap, ToKeyIndex(descriptor_number));
|
| - set_null_unchecked(heap, ToValueIndex(descriptor_number));
|
| -}
|
| -
|
| -
|
| void DescriptorArray::Append(Descriptor* desc,
|
| const WhitenessWitness& witness) {
|
| int descriptor_number = number_of_descriptors();
|
| @@ -3554,12 +3548,6 @@ void Map::set_prototype(Object* value, WriteBarrierMode mode) {
|
| }
|
|
|
|
|
| -JSGlobalPropertyCell* Map::descriptors_pointer() {
|
| - ASSERT(HasTransitionArray());
|
| - return transitions()->descriptors_pointer();
|
| -}
|
| -
|
| -
|
| DescriptorArray* Map::instance_descriptors() {
|
| if (HasTransitionArray()) return transitions()->descriptors();
|
| Object* back_pointer = GetBackPointer();
|
| @@ -3576,22 +3564,20 @@ enum TransitionsKind { DESCRIPTORS_HOLDER, FULL_TRANSITION_ARRAY };
|
| static MaybeObject* EnsureHasTransitionArray(Map* map, TransitionsKind kind) {
|
| TransitionArray* transitions;
|
| MaybeObject* maybe_transitions;
|
| - if (map->HasTransitionArray()) {
|
| - if (kind != FULL_TRANSITION_ARRAY ||
|
| - map->transitions()->IsFullTransitionArray()) {
|
| - return map;
|
| - }
|
| - maybe_transitions = map->transitions()->ExtendToFullTransitionArray();
|
| - if (!maybe_transitions->To(&transitions)) return maybe_transitions;
|
| - } else {
|
| - JSGlobalPropertyCell* pointer = map->RetrieveDescriptorsPointer();
|
| + if (!map->HasTransitionArray()) {
|
| if (kind == FULL_TRANSITION_ARRAY) {
|
| - maybe_transitions = TransitionArray::Allocate(0, pointer);
|
| + maybe_transitions = TransitionArray::Allocate(0);
|
| } else {
|
| - maybe_transitions = TransitionArray::AllocateDescriptorsHolder(pointer);
|
| + maybe_transitions = TransitionArray::AllocateDescriptorsHolder();
|
| }
|
| if (!maybe_transitions->To(&transitions)) return maybe_transitions;
|
| transitions->set_back_pointer_storage(map->GetBackPointer());
|
| + } else if (kind == FULL_TRANSITION_ARRAY &&
|
| + !map->transitions()->IsFullTransitionArray()) {
|
| + maybe_transitions = map->transitions()->ExtendToFullTransitionArray();
|
| + if (!maybe_transitions->To(&transitions)) return maybe_transitions;
|
| + } else {
|
| + return map;
|
| }
|
| map->set_transitions(transitions);
|
| return transitions;
|
| @@ -3701,23 +3687,12 @@ bool Map::CanHaveMoreTransitions() {
|
| }
|
|
|
|
|
| -JSGlobalPropertyCell* Map::RetrieveDescriptorsPointer() {
|
| - if (!owns_descriptors()) return NULL;
|
| - Object* back_pointer = GetBackPointer();
|
| - if (back_pointer->IsUndefined()) return NULL;
|
| - Map* map = Map::cast(back_pointer);
|
| - ASSERT(map->HasTransitionArray());
|
| - return map->transitions()->descriptors_pointer();
|
| -}
|
| -
|
| -
|
| MaybeObject* Map::AddTransition(String* key,
|
| Map* target,
|
| SimpleTransitionFlag flag) {
|
| if (HasTransitionArray()) return transitions()->CopyInsert(key, target);
|
| - JSGlobalPropertyCell* descriptors_pointer = RetrieveDescriptorsPointer();
|
| return TransitionArray::NewWith(
|
| - flag, key, target, descriptors_pointer, GetBackPointer());
|
| + flag, key, target, instance_descriptors(), GetBackPointer());
|
| }
|
|
|
|
|
| @@ -3732,9 +3707,11 @@ Map* Map::GetTransition(int transition_index) {
|
|
|
|
|
| MaybeObject* Map::set_elements_transition_map(Map* transitioned_map) {
|
| + DescriptorArray* descriptors = instance_descriptors();
|
| MaybeObject* allow_elements =
|
| EnsureHasTransitionArray(this, FULL_TRANSITION_ARRAY);
|
| if (allow_elements->IsFailure()) return allow_elements;
|
| + transitions()->set_descriptors(descriptors);
|
| transitions()->set_elements_transition(transitioned_map);
|
| return this;
|
| }
|
| @@ -3750,6 +3727,7 @@ FixedArray* Map::GetPrototypeTransitions() {
|
|
|
|
|
| MaybeObject* Map::SetPrototypeTransitions(FixedArray* proto_transitions) {
|
| + DescriptorArray* descriptors = instance_descriptors();
|
| MaybeObject* allow_prototype =
|
| EnsureHasTransitionArray(this, FULL_TRANSITION_ARRAY);
|
| if (allow_prototype->IsFailure()) return allow_prototype;
|
| @@ -3759,6 +3737,7 @@ MaybeObject* Map::SetPrototypeTransitions(FixedArray* proto_transitions) {
|
| ZapPrototypeTransitions();
|
| }
|
| #endif
|
| + transitions()->set_descriptors(descriptors);
|
| transitions()->SetPrototypeTransitions(proto_transitions);
|
| return this;
|
| }
|
|
|