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_OBJECTS_VISITING_H_ | 5 #ifndef V8_OBJECTS_VISITING_H_ |
6 #define V8_OBJECTS_VISITING_H_ | 6 #define V8_OBJECTS_VISITING_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/heap/heap.h" | 9 #include "src/heap/heap.h" |
10 #include "src/heap/spaces.h" | 10 #include "src/heap/spaces.h" |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
244 | 244 |
245 INLINE(static int IterateBody(Map* map, HeapObject* obj)) { | 245 INLINE(static int IterateBody(Map* map, HeapObject* obj)) { |
246 return table_.GetVisitor(map)(map, obj); | 246 return table_.GetVisitor(map)(map, obj); |
247 } | 247 } |
248 | 248 |
249 INLINE(static void VisitPointers(Heap* heap, HeapObject* object, | 249 INLINE(static void VisitPointers(Heap* heap, HeapObject* object, |
250 Object** start, Object** end)) { | 250 Object** start, Object** end)) { |
251 for (Object** p = start; p < end; p++) StaticVisitor::VisitPointer(heap, p); | 251 for (Object** p = start; p < end; p++) StaticVisitor::VisitPointer(heap, p); |
252 } | 252 } |
253 | 253 |
254 private: | 254 // Although we are using the JSFunction body descriptor which does not |
255 INLINE(static int VisitJSFunction(Map* map, HeapObject* object)) { | 255 // visit the code entry, compiler wants it to be accessible, therefore public. |
Michael Starzinger
2015/11/10 10:40:32
nit: Let's drop the "therefore public" part of the
Igor Sheludko
2015/11/10 10:58:11
Done.
| |
256 Heap* heap = map->GetHeap(); | 256 // See JSFunction::BodyDescriptorImpl. |
257 VisitPointers(heap, object, | 257 INLINE(static void VisitCodeEntry(Heap* heap, HeapObject* object, |
258 HeapObject::RawField(object, JSFunction::kPropertiesOffset), | 258 Address entry_address)) { |
259 HeapObject::RawField(object, JSFunction::kCodeEntryOffset)); | 259 UNREACHABLE(); |
260 | |
261 // Don't visit code entry. We are using this visitor only during scavenges. | |
262 | |
263 VisitPointers( | |
264 heap, object, HeapObject::RawField( | |
265 object, JSFunction::kCodeEntryOffset + kPointerSize), | |
266 HeapObject::RawField(object, JSFunction::kNonWeakFieldsEndOffset)); | |
267 return JSFunction::kSize; | |
268 } | 260 } |
269 | 261 |
262 private: | |
270 INLINE(static int VisitByteArray(Map* map, HeapObject* object)) { | 263 INLINE(static int VisitByteArray(Map* map, HeapObject* object)) { |
271 return reinterpret_cast<ByteArray*>(object)->ByteArraySize(); | 264 return reinterpret_cast<ByteArray*>(object)->ByteArraySize(); |
272 } | 265 } |
273 | 266 |
274 INLINE(static int VisitFixedDoubleArray(Map* map, HeapObject* object)) { | 267 INLINE(static int VisitFixedDoubleArray(Map* map, HeapObject* object)) { |
275 int length = reinterpret_cast<FixedDoubleArray*>(object)->length(); | 268 int length = reinterpret_cast<FixedDoubleArray*>(object)->length(); |
276 return FixedDoubleArray::SizeFor(length); | 269 return FixedDoubleArray::SizeFor(length); |
277 } | 270 } |
278 | 271 |
279 INLINE(static int VisitFixedTypedArray(Map* map, HeapObject* object)) { | 272 INLINE(static int VisitFixedTypedArray(Map* map, HeapObject* object)) { |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
398 static void MarkOptimizedCodeMap(Heap* heap, FixedArray* code_map); | 391 static void MarkOptimizedCodeMap(Heap* heap, FixedArray* code_map); |
399 | 392 |
400 // Code flushing support. | 393 // Code flushing support. |
401 INLINE(static bool IsFlushable(Heap* heap, JSFunction* function)); | 394 INLINE(static bool IsFlushable(Heap* heap, JSFunction* function)); |
402 INLINE(static bool IsFlushable(Heap* heap, SharedFunctionInfo* shared_info)); | 395 INLINE(static bool IsFlushable(Heap* heap, SharedFunctionInfo* shared_info)); |
403 | 396 |
404 // Helpers used by code flushing support that visit pointer fields and treat | 397 // Helpers used by code flushing support that visit pointer fields and treat |
405 // references to code objects either strongly or weakly. | 398 // references to code objects either strongly or weakly. |
406 static void VisitSharedFunctionInfoStrongCode(Heap* heap, HeapObject* object); | 399 static void VisitSharedFunctionInfoStrongCode(Heap* heap, HeapObject* object); |
407 static void VisitSharedFunctionInfoWeakCode(Heap* heap, HeapObject* object); | 400 static void VisitSharedFunctionInfoWeakCode(Heap* heap, HeapObject* object); |
408 static void VisitJSFunctionStrongCode(Heap* heap, HeapObject* object); | |
Michael Starzinger
2015/11/10 10:40:32
Can we keep these two methods for readability and
Igor Sheludko
2015/11/10 10:58:11
Done.
| |
409 static void VisitJSFunctionWeakCode(Heap* heap, HeapObject* object); | |
410 | 401 |
411 class DataObjectVisitor { | 402 class DataObjectVisitor { |
412 public: | 403 public: |
413 template <int size> | 404 template <int size> |
414 static inline void VisitSpecialized(Map* map, HeapObject* object) {} | 405 static inline void VisitSpecialized(Map* map, HeapObject* object) {} |
415 | 406 |
416 INLINE(static void Visit(Map* map, HeapObject* object)) {} | 407 INLINE(static void Visit(Map* map, HeapObject* object)) {} |
417 }; | 408 }; |
418 | 409 |
419 typedef FlexibleBodyVisitor<StaticVisitor, FixedArray::BodyDescriptor, void> | 410 typedef FlexibleBodyVisitor<StaticVisitor, FixedArray::BodyDescriptor, void> |
(...skipping 23 matching lines...) Expand all Loading... | |
443 // the next element. Given the head of the list, this function removes dead | 434 // the next element. Given the head of the list, this function removes dead |
444 // elements from the list and if requested records slots for next-element | 435 // elements from the list and if requested records slots for next-element |
445 // pointers. The template parameter T is a WeakListVisitor that defines how to | 436 // pointers. The template parameter T is a WeakListVisitor that defines how to |
446 // access the next-element pointers. | 437 // access the next-element pointers. |
447 template <class T> | 438 template <class T> |
448 Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer); | 439 Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer); |
449 } // namespace internal | 440 } // namespace internal |
450 } // namespace v8 | 441 } // namespace v8 |
451 | 442 |
452 #endif // V8_OBJECTS_VISITING_H_ | 443 #endif // V8_OBJECTS_VISITING_H_ |
OLD | NEW |