| 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_H_ | 5 #ifndef V8_TRANSITIONS_H_ |
| 6 #define V8_TRANSITIONS_H_ | 6 #define V8_TRANSITIONS_H_ |
| 7 | 7 |
| 8 #include "src/checks.h" | 8 #include "src/checks.h" |
| 9 #include "src/elements-kind.h" | 9 #include "src/elements-kind.h" |
| 10 #include "src/heap/heap.h" | 10 #include "src/heap/heap.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 WeakCell::cast(raw_transition)->cleared() || | 64 WeakCell::cast(raw_transition)->cleared() || |
| 65 WeakCell::cast(raw_transition)->value()->IsMap()); | 65 WeakCell::cast(raw_transition)->value()->IsMap()); |
| 66 return raw_transition->IsWeakCell() && | 66 return raw_transition->IsWeakCell() && |
| 67 !WeakCell::cast(raw_transition)->cleared(); | 67 !WeakCell::cast(raw_transition)->cleared(); |
| 68 } | 68 } |
| 69 static inline Map* GetSimpleTransition(Object* raw_transition) { | 69 static inline Map* GetSimpleTransition(Object* raw_transition) { |
| 70 DCHECK(IsSimpleTransition(raw_transition)); | 70 DCHECK(IsSimpleTransition(raw_transition)); |
| 71 DCHECK(raw_transition->IsWeakCell()); | 71 DCHECK(raw_transition->IsWeakCell()); |
| 72 return Map::cast(WeakCell::cast(raw_transition)->value()); | 72 return Map::cast(WeakCell::cast(raw_transition)->value()); |
| 73 } | 73 } |
| 74 static inline WeakCell* GetSimpleTransitionCell(Object* raw_transition) { | |
| 75 DCHECK(IsSimpleTransition(raw_transition)); | |
| 76 DCHECK(raw_transition->IsWeakCell()); | |
| 77 return WeakCell::cast(raw_transition); | |
| 78 } | |
| 79 static inline bool IsFullTransitionArray(Object* raw_transitions) { | 74 static inline bool IsFullTransitionArray(Object* raw_transitions) { |
| 80 return raw_transitions->IsTransitionArray(); | 75 return raw_transitions->IsTransitionArray(); |
| 81 } | 76 } |
| 82 | 77 |
| 83 // The size of transition arrays are limited so they do not end up in large | 78 // The size of transition arrays are limited so they do not end up in large |
| 84 // object space. Otherwise ClearNonLiveReferences would leak memory while | 79 // object space. Otherwise ClearNonLiveReferences would leak memory while |
| 85 // applying in-place right trimming. | 80 // applying in-place right trimming. |
| 86 static bool CanHaveMoreTransitions(Handle<Map> map); | 81 static bool CanHaveMoreTransitions(Handle<Map> map); |
| 87 | 82 |
| 88 // ===== PROTOTYPE TRANSITIONS ===== | 83 // ===== PROTOTYPE TRANSITIONS ===== |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 TraverseTransitionTreeInternal(map, callback, data); | 128 TraverseTransitionTreeInternal(map, callback, data); |
| 134 } | 129 } |
| 135 | 130 |
| 136 // ===== LOW-LEVEL ACCESSORS ===== | 131 // ===== LOW-LEVEL ACCESSORS ===== |
| 137 | 132 |
| 138 // Accessors for fetching instance transition at transition number. | 133 // Accessors for fetching instance transition at transition number. |
| 139 static inline Name* GetKey(Object* raw_transitions, int transition_number); | 134 static inline Name* GetKey(Object* raw_transitions, int transition_number); |
| 140 inline Name* GetKey(int transition_number); | 135 inline Name* GetKey(int transition_number); |
| 141 inline void SetKey(int transition_number, Name* value); | 136 inline void SetKey(int transition_number, Name* value); |
| 142 inline Object** GetKeySlot(int transition_number); | 137 inline Object** GetKeySlot(int transition_number); |
| 143 inline Object** GetTargetSlot(int transition_number); | |
| 144 int GetSortedKeyIndex(int transition_number) { return transition_number; } | 138 int GetSortedKeyIndex(int transition_number) { return transition_number; } |
| 145 | 139 |
| 146 Name* GetSortedKey(int transition_number) { | 140 Name* GetSortedKey(int transition_number) { |
| 147 return GetKey(transition_number); | 141 return GetKey(transition_number); |
| 148 } | 142 } |
| 149 | 143 |
| 150 static inline Map* GetTarget(Object* raw_transitions, int transition_number); | 144 static inline Map* GetTarget(Object* raw_transitions, int transition_number); |
| 151 inline Map* GetTarget(int transition_number); | 145 inline Map* GetTarget(int transition_number); |
| 152 | 146 inline void SetTarget(int transition_number, Map* target); |
| 153 inline WeakCell* GetTargetCell(int transition_number); | |
| 154 inline void SetTargetCell(int transition_number, WeakCell* target); | |
| 155 | 147 |
| 156 static inline PropertyDetails GetTargetDetails(Name* name, Map* target); | 148 static inline PropertyDetails GetTargetDetails(Name* name, Map* target); |
| 157 | 149 |
| 158 // Returns the number of transitions in the array. | 150 // Returns the number of transitions in the array. |
| 159 static int NumberOfTransitions(Object* raw_transitions); | 151 static int NumberOfTransitions(Object* raw_transitions); |
| 160 // Required for templatized Search interface. | 152 // Required for templatized Search interface. |
| 161 inline int number_of_entries() { return number_of_transitions(); } | 153 inline int number_of_entries() { return number_of_transitions(); } |
| 162 | 154 |
| 163 inline void SetNumberOfTransitions(int number_of_transitions); | 155 inline void SetNumberOfTransitions(int number_of_transitions); |
| 164 | 156 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 static inline int CompareNames(Name* key1, uint32_t hash1, Name* key2, | 276 static inline int CompareNames(Name* key1, uint32_t hash1, Name* key2, |
| 285 uint32_t hash2); | 277 uint32_t hash2); |
| 286 | 278 |
| 287 // Compares two details, returns -1 if details1 is "less" than details2, | 279 // Compares two details, returns -1 if details1 is "less" than details2, |
| 288 // 0 if details1 equal to details2 and 1 otherwise. | 280 // 0 if details1 equal to details2 and 1 otherwise. |
| 289 static inline int CompareDetails(PropertyKind kind1, | 281 static inline int CompareDetails(PropertyKind kind1, |
| 290 PropertyAttributes attributes1, | 282 PropertyAttributes attributes1, |
| 291 PropertyKind kind2, | 283 PropertyKind kind2, |
| 292 PropertyAttributes attributes2); | 284 PropertyAttributes attributes2); |
| 293 | 285 |
| 294 inline void Set(int transition_number, Name* key, WeakCell* target_cell); | 286 inline void NoIncrementalWriteBarrierSet(int transition_number, |
| 287 Name* key, |
| 288 Map* target); |
| 295 | 289 |
| 296 // Copy a single transition from the origin array. | 290 // Copy a single transition from the origin array. |
| 297 inline void CopyFrom(TransitionArray* origin, int origin_transition, | 291 inline void NoIncrementalWriteBarrierCopyFrom(TransitionArray* origin, |
| 298 int target_transition); | 292 int origin_transition, |
| 293 int target_transition); |
| 299 | 294 |
| 300 #ifdef DEBUG | 295 #ifdef DEBUG |
| 301 static void CheckNewTransitionsAreConsistent(Handle<Map> map, | 296 static void CheckNewTransitionsAreConsistent(Handle<Map> map, |
| 302 TransitionArray* old_transitions, | 297 TransitionArray* old_transitions, |
| 303 Object* transitions); | 298 Object* transitions); |
| 304 #endif | 299 #endif |
| 305 | 300 |
| 306 DISALLOW_IMPLICIT_CONSTRUCTORS(TransitionArray); | 301 DISALLOW_IMPLICIT_CONSTRUCTORS(TransitionArray); |
| 307 }; | 302 }; |
| 308 | 303 |
| 309 | 304 |
| 310 } } // namespace v8::internal | 305 } } // namespace v8::internal |
| 311 | 306 |
| 312 #endif // V8_TRANSITIONS_H_ | 307 #endif // V8_TRANSITIONS_H_ |
| OLD | NEW |