| Index: src/transitions-inl.h
|
| diff --git a/src/transitions-inl.h b/src/transitions-inl.h
|
| index 17c42edce2e50daf51a7a9c212cf33e4cde30807..385bdd11998526d5e7b6ff6b516d70db0a5baaf5 100644
|
| --- a/src/transitions-inl.h
|
| +++ b/src/transitions-inl.h
|
| @@ -69,14 +69,12 @@ void TransitionArray::ClearElementsTransition() {
|
|
|
|
|
| bool TransitionArray::HasElementsTransition() {
|
| - return IsFullTransitionArray() &&
|
| - get(kElementsTransitionIndex) != Smi::FromInt(0);
|
| + return get(kElementsTransitionIndex) != Smi::FromInt(0);
|
| }
|
|
|
|
|
| void TransitionArray::set_elements_transition(Map* transition_map,
|
| WriteBarrierMode mode) {
|
| - ASSERT(IsFullTransitionArray());
|
| Heap* heap = GetHeap();
|
| WRITE_FIELD(this, kElementsTransitionOffset, transition_map);
|
| CONDITIONAL_WRITE_BARRIER(
|
| @@ -85,26 +83,22 @@ void TransitionArray::set_elements_transition(Map* transition_map,
|
|
|
|
|
| DescriptorArray* TransitionArray::descriptors() {
|
| - return DescriptorArray::cast(descriptors_pointer()->value());
|
| + return DescriptorArray::cast(get(kDescriptorsIndex));
|
| }
|
|
|
|
|
| -void TransitionArray::set_descriptors(DescriptorArray* descriptors) {
|
| - ASSERT(!this->descriptors()->IsDescriptorArray() ||
|
| - descriptors->number_of_descriptors() == 0 ||
|
| - descriptors->HasEnumCache() ||
|
| - !this->descriptors()->HasEnumCache());
|
| - descriptors_pointer()->set_value(descriptors);
|
| -}
|
| -
|
| -
|
| -JSGlobalPropertyCell* TransitionArray::descriptors_pointer() {
|
| - return JSGlobalPropertyCell::cast(get(kDescriptorsPointerIndex));
|
| +void TransitionArray::set_descriptors(DescriptorArray* descriptors,
|
| + WriteBarrierMode mode) {
|
| + Heap* heap = GetHeap();
|
| + WRITE_FIELD(this, kDescriptorsOffset, descriptors);
|
| + CONDITIONAL_WRITE_BARRIER(
|
| + heap, this, kDescriptorsOffset, descriptors, mode);
|
| }
|
|
|
|
|
| -void TransitionArray::set_descriptors_pointer(JSGlobalPropertyCell* pointer) {
|
| - set(kDescriptorsPointerIndex, pointer);
|
| +Object** TransitionArray::GetDescriptorsSlot() {
|
| + return HeapObject::RawField(reinterpret_cast<HeapObject*>(this),
|
| + kDescriptorsOffset);
|
| }
|
|
|
|
|
| @@ -123,13 +117,12 @@ void TransitionArray::set_back_pointer_storage(Object* back_pointer,
|
|
|
|
|
| bool TransitionArray::HasPrototypeTransitions() {
|
| - return IsFullTransitionArray() &&
|
| - get(kPrototypeTransitionsIndex) != Smi::FromInt(0);
|
| + Object* prototype_transitions = get(kPrototypeTransitionsIndex);
|
| + return prototype_transitions != Smi::FromInt(0);
|
| }
|
|
|
|
|
| FixedArray* TransitionArray::GetPrototypeTransitions() {
|
| - ASSERT(IsFullTransitionArray());
|
| Object* prototype_transitions = get(kPrototypeTransitionsIndex);
|
| return FixedArray::cast(prototype_transitions);
|
| }
|
| @@ -143,7 +136,7 @@ HeapObject* TransitionArray::UncheckedPrototypeTransitions() {
|
|
|
| void TransitionArray::SetPrototypeTransitions(FixedArray* transitions,
|
| WriteBarrierMode mode) {
|
| - ASSERT(IsFullTransitionArray());
|
| + ASSERT(this != NULL);
|
| ASSERT(transitions->IsFixedArray());
|
| Heap* heap = GetHeap();
|
| WRITE_FIELD(this, kPrototypeTransitionsOffset, transitions);
|
| @@ -159,7 +152,6 @@ Object** TransitionArray::GetPrototypeTransitionsSlot() {
|
|
|
|
|
| Object** TransitionArray::GetKeySlot(int transition_number) {
|
| - ASSERT(!IsSimpleTransition());
|
| ASSERT(transition_number < number_of_transitions());
|
| return HeapObject::RawField(
|
| reinterpret_cast<HeapObject*>(this),
|
| @@ -168,39 +160,24 @@ Object** TransitionArray::GetKeySlot(int transition_number) {
|
|
|
|
|
| String* TransitionArray::GetKey(int transition_number) {
|
| - if (IsSimpleTransition()) {
|
| - Map* target = GetTarget(kSimpleTransitionIndex);
|
| - int descriptor = target->LastAdded();
|
| - String* key = target->instance_descriptors()->GetKey(descriptor);
|
| - return key;
|
| - }
|
| ASSERT(transition_number < number_of_transitions());
|
| return String::cast(get(ToKeyIndex(transition_number)));
|
| }
|
|
|
|
|
| void TransitionArray::SetKey(int transition_number, String* key) {
|
| - ASSERT(!IsSimpleTransition());
|
| ASSERT(transition_number < number_of_transitions());
|
| set(ToKeyIndex(transition_number), key);
|
| }
|
|
|
|
|
| Map* TransitionArray::GetTarget(int transition_number) {
|
| - if (IsSimpleTransition()) {
|
| - ASSERT(transition_number == kSimpleTransitionIndex);
|
| - return Map::cast(get(kSimpleTransitionTarget));
|
| - }
|
| ASSERT(transition_number < number_of_transitions());
|
| return Map::cast(get(ToTargetIndex(transition_number)));
|
| }
|
|
|
|
|
| void TransitionArray::SetTarget(int transition_number, Map* value) {
|
| - if (IsSimpleTransition()) {
|
| - ASSERT(transition_number == kSimpleTransitionIndex);
|
| - return set(kSimpleTransitionTarget, value);
|
| - }
|
| ASSERT(transition_number < number_of_transitions());
|
| set(ToTargetIndex(transition_number), value);
|
| }
|
| @@ -215,17 +192,20 @@ PropertyDetails TransitionArray::GetTargetDetails(int transition_number) {
|
|
|
|
|
| int TransitionArray::Search(String* name) {
|
| - return internal::Search<ALL_ENTRIES>(this, name);
|
| + return internal::Search(this, name);
|
| }
|
|
|
|
|
| -void TransitionArray::NoIncrementalWriteBarrierSet(int transition_number,
|
| - String* key,
|
| - Map* target) {
|
| - FixedArray::NoIncrementalWriteBarrierSet(
|
| - this, ToKeyIndex(transition_number), key);
|
| - FixedArray::NoIncrementalWriteBarrierSet(
|
| - this, ToTargetIndex(transition_number), target);
|
| +void TransitionArray::Set(int transition_number,
|
| + String* key,
|
| + Map* target,
|
| + const WhitenessWitness&) {
|
| + NoIncrementalWriteBarrierSet(this,
|
| + ToKeyIndex(transition_number),
|
| + key);
|
| + NoIncrementalWriteBarrierSet(this,
|
| + ToTargetIndex(transition_number),
|
| + target);
|
| }
|
|
|
|
|
|
|