| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_TRANSITIONS_INL_H_ | 5 #ifndef V8_TRANSITIONS_INL_H_ |
| 6 #define V8_TRANSITIONS_INL_H_ | 6 #define V8_TRANSITIONS_INL_H_ |
| 7 | 7 |
| 8 #include "src/transitions.h" | 8 #include "src/transitions.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 if (mode == UPDATE_WRITE_BARRIER) { \ | 21 if (mode == UPDATE_WRITE_BARRIER) { \ |
| 22 heap->incremental_marking()->RecordWrite( \ | 22 heap->incremental_marking()->RecordWrite( \ |
| 23 object, HeapObject::RawField(object, offset), value); \ | 23 object, HeapObject::RawField(object, offset), value); \ |
| 24 if (heap->InNewSpace(value)) { \ | 24 if (heap->InNewSpace(value)) { \ |
| 25 heap->RecordWrite(object->address(), offset); \ | 25 heap->RecordWrite(object->address(), offset); \ |
| 26 } \ | 26 } \ |
| 27 } | 27 } |
| 28 | 28 |
| 29 | 29 |
| 30 TransitionArray* TransitionArray::cast(Object* object) { | 30 TransitionArray* TransitionArray::cast(Object* object) { |
| 31 ASSERT(object->IsTransitionArray()); | 31 DCHECK(object->IsTransitionArray()); |
| 32 return reinterpret_cast<TransitionArray*>(object); | 32 return reinterpret_cast<TransitionArray*>(object); |
| 33 } | 33 } |
| 34 | 34 |
| 35 | 35 |
| 36 bool TransitionArray::HasElementsTransition() { | 36 bool TransitionArray::HasElementsTransition() { |
| 37 return Search(GetHeap()->elements_transition_symbol()) != kNotFound; | 37 return Search(GetHeap()->elements_transition_symbol()) != kNotFound; |
| 38 } | 38 } |
| 39 | 39 |
| 40 | 40 |
| 41 Object* TransitionArray::back_pointer_storage() { | 41 Object* TransitionArray::back_pointer_storage() { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 52 } | 52 } |
| 53 | 53 |
| 54 | 54 |
| 55 bool TransitionArray::HasPrototypeTransitions() { | 55 bool TransitionArray::HasPrototypeTransitions() { |
| 56 return IsFullTransitionArray() && | 56 return IsFullTransitionArray() && |
| 57 get(kPrototypeTransitionsIndex) != Smi::FromInt(0); | 57 get(kPrototypeTransitionsIndex) != Smi::FromInt(0); |
| 58 } | 58 } |
| 59 | 59 |
| 60 | 60 |
| 61 FixedArray* TransitionArray::GetPrototypeTransitions() { | 61 FixedArray* TransitionArray::GetPrototypeTransitions() { |
| 62 ASSERT(IsFullTransitionArray()); | 62 DCHECK(IsFullTransitionArray()); |
| 63 Object* prototype_transitions = get(kPrototypeTransitionsIndex); | 63 Object* prototype_transitions = get(kPrototypeTransitionsIndex); |
| 64 return FixedArray::cast(prototype_transitions); | 64 return FixedArray::cast(prototype_transitions); |
| 65 } | 65 } |
| 66 | 66 |
| 67 | 67 |
| 68 void TransitionArray::SetPrototypeTransitions(FixedArray* transitions, | 68 void TransitionArray::SetPrototypeTransitions(FixedArray* transitions, |
| 69 WriteBarrierMode mode) { | 69 WriteBarrierMode mode) { |
| 70 ASSERT(IsFullTransitionArray()); | 70 DCHECK(IsFullTransitionArray()); |
| 71 ASSERT(transitions->IsFixedArray()); | 71 DCHECK(transitions->IsFixedArray()); |
| 72 Heap* heap = GetHeap(); | 72 Heap* heap = GetHeap(); |
| 73 WRITE_FIELD(this, kPrototypeTransitionsOffset, transitions); | 73 WRITE_FIELD(this, kPrototypeTransitionsOffset, transitions); |
| 74 CONDITIONAL_WRITE_BARRIER( | 74 CONDITIONAL_WRITE_BARRIER( |
| 75 heap, this, kPrototypeTransitionsOffset, transitions, mode); | 75 heap, this, kPrototypeTransitionsOffset, transitions, mode); |
| 76 } | 76 } |
| 77 | 77 |
| 78 | 78 |
| 79 Object** TransitionArray::GetPrototypeTransitionsSlot() { | 79 Object** TransitionArray::GetPrototypeTransitionsSlot() { |
| 80 return HeapObject::RawField(reinterpret_cast<HeapObject*>(this), | 80 return HeapObject::RawField(reinterpret_cast<HeapObject*>(this), |
| 81 kPrototypeTransitionsOffset); | 81 kPrototypeTransitionsOffset); |
| 82 } | 82 } |
| 83 | 83 |
| 84 | 84 |
| 85 Object** TransitionArray::GetKeySlot(int transition_number) { | 85 Object** TransitionArray::GetKeySlot(int transition_number) { |
| 86 ASSERT(!IsSimpleTransition()); | 86 DCHECK(!IsSimpleTransition()); |
| 87 ASSERT(transition_number < number_of_transitions()); | 87 DCHECK(transition_number < number_of_transitions()); |
| 88 return RawFieldOfElementAt(ToKeyIndex(transition_number)); | 88 return RawFieldOfElementAt(ToKeyIndex(transition_number)); |
| 89 } | 89 } |
| 90 | 90 |
| 91 | 91 |
| 92 Name* TransitionArray::GetKey(int transition_number) { | 92 Name* TransitionArray::GetKey(int transition_number) { |
| 93 if (IsSimpleTransition()) { | 93 if (IsSimpleTransition()) { |
| 94 Map* target = GetTarget(kSimpleTransitionIndex); | 94 Map* target = GetTarget(kSimpleTransitionIndex); |
| 95 int descriptor = target->LastAdded(); | 95 int descriptor = target->LastAdded(); |
| 96 Name* key = target->instance_descriptors()->GetKey(descriptor); | 96 Name* key = target->instance_descriptors()->GetKey(descriptor); |
| 97 return key; | 97 return key; |
| 98 } | 98 } |
| 99 ASSERT(transition_number < number_of_transitions()); | 99 DCHECK(transition_number < number_of_transitions()); |
| 100 return Name::cast(get(ToKeyIndex(transition_number))); | 100 return Name::cast(get(ToKeyIndex(transition_number))); |
| 101 } | 101 } |
| 102 | 102 |
| 103 | 103 |
| 104 void TransitionArray::SetKey(int transition_number, Name* key) { | 104 void TransitionArray::SetKey(int transition_number, Name* key) { |
| 105 ASSERT(!IsSimpleTransition()); | 105 DCHECK(!IsSimpleTransition()); |
| 106 ASSERT(transition_number < number_of_transitions()); | 106 DCHECK(transition_number < number_of_transitions()); |
| 107 set(ToKeyIndex(transition_number), key); | 107 set(ToKeyIndex(transition_number), key); |
| 108 } | 108 } |
| 109 | 109 |
| 110 | 110 |
| 111 Map* TransitionArray::GetTarget(int transition_number) { | 111 Map* TransitionArray::GetTarget(int transition_number) { |
| 112 if (IsSimpleTransition()) { | 112 if (IsSimpleTransition()) { |
| 113 ASSERT(transition_number == kSimpleTransitionIndex); | 113 DCHECK(transition_number == kSimpleTransitionIndex); |
| 114 return Map::cast(get(kSimpleTransitionTarget)); | 114 return Map::cast(get(kSimpleTransitionTarget)); |
| 115 } | 115 } |
| 116 ASSERT(transition_number < number_of_transitions()); | 116 DCHECK(transition_number < number_of_transitions()); |
| 117 return Map::cast(get(ToTargetIndex(transition_number))); | 117 return Map::cast(get(ToTargetIndex(transition_number))); |
| 118 } | 118 } |
| 119 | 119 |
| 120 | 120 |
| 121 void TransitionArray::SetTarget(int transition_number, Map* value) { | 121 void TransitionArray::SetTarget(int transition_number, Map* value) { |
| 122 if (IsSimpleTransition()) { | 122 if (IsSimpleTransition()) { |
| 123 ASSERT(transition_number == kSimpleTransitionIndex); | 123 DCHECK(transition_number == kSimpleTransitionIndex); |
| 124 return set(kSimpleTransitionTarget, value); | 124 return set(kSimpleTransitionTarget, value); |
| 125 } | 125 } |
| 126 ASSERT(transition_number < number_of_transitions()); | 126 DCHECK(transition_number < number_of_transitions()); |
| 127 set(ToTargetIndex(transition_number), value); | 127 set(ToTargetIndex(transition_number), value); |
| 128 } | 128 } |
| 129 | 129 |
| 130 | 130 |
| 131 PropertyDetails TransitionArray::GetTargetDetails(int transition_number) { | 131 PropertyDetails TransitionArray::GetTargetDetails(int transition_number) { |
| 132 Map* map = GetTarget(transition_number); | 132 Map* map = GetTarget(transition_number); |
| 133 return map->GetLastDescriptorDetails(); | 133 return map->GetLastDescriptorDetails(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 | 136 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 155 | 155 |
| 156 | 156 |
| 157 #undef FIELD_ADDR | 157 #undef FIELD_ADDR |
| 158 #undef WRITE_FIELD | 158 #undef WRITE_FIELD |
| 159 #undef CONDITIONAL_WRITE_BARRIER | 159 #undef CONDITIONAL_WRITE_BARRIER |
| 160 | 160 |
| 161 | 161 |
| 162 } } // namespace v8::internal | 162 } } // namespace v8::internal |
| 163 | 163 |
| 164 #endif // V8_TRANSITIONS_INL_H_ | 164 #endif // V8_TRANSITIONS_INL_H_ |
| OLD | NEW |