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 |