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); |
} |