| 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_INL_H_ | 5 #ifndef V8_OBJECTS_VISITING_INL_H_ |
| 6 #define V8_OBJECTS_VISITING_INL_H_ | 6 #define V8_OBJECTS_VISITING_INL_H_ |
| 7 | 7 |
| 8 #include "src/heap/array-buffer-tracker.h" | 8 #include "src/heap/array-buffer-tracker.h" |
| 9 #include "src/heap/objects-visiting.h" | 9 #include "src/heap/objects-visiting.h" |
| 10 #include "src/ic/ic-state.h" | 10 #include "src/ic/ic-state.h" |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 StaticVisitor::VisitPointers( | 379 StaticVisitor::VisitPointers( |
| 380 heap, object, | 380 heap, object, |
| 381 HeapObject::RawField(object, AllocationSite::kPointerFieldsBeginOffset), | 381 HeapObject::RawField(object, AllocationSite::kPointerFieldsBeginOffset), |
| 382 HeapObject::RawField(object, AllocationSite::kPointerFieldsEndOffset)); | 382 HeapObject::RawField(object, AllocationSite::kPointerFieldsEndOffset)); |
| 383 } | 383 } |
| 384 | 384 |
| 385 | 385 |
| 386 template <typename StaticVisitor> | 386 template <typename StaticVisitor> |
| 387 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCollection( | 387 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCollection( |
| 388 Map* map, HeapObject* object) { | 388 Map* map, HeapObject* object) { |
| 389 typedef FlexibleBodyVisitor<StaticVisitor, |
| 390 JSWeakCollection::BodyDescriptorWeak, |
| 391 void> JSWeakCollectionBodyVisitor; |
| 389 Heap* heap = map->GetHeap(); | 392 Heap* heap = map->GetHeap(); |
| 390 JSWeakCollection* weak_collection = | 393 JSWeakCollection* weak_collection = |
| 391 reinterpret_cast<JSWeakCollection*>(object); | 394 reinterpret_cast<JSWeakCollection*>(object); |
| 392 | 395 |
| 393 // Enqueue weak collection in linked list of encountered weak collections. | 396 // Enqueue weak collection in linked list of encountered weak collections. |
| 394 if (weak_collection->next() == heap->undefined_value()) { | 397 if (weak_collection->next() == heap->undefined_value()) { |
| 395 weak_collection->set_next(heap->encountered_weak_collections()); | 398 weak_collection->set_next(heap->encountered_weak_collections()); |
| 396 heap->set_encountered_weak_collections(weak_collection); | 399 heap->set_encountered_weak_collections(weak_collection); |
| 397 } | 400 } |
| 398 | 401 |
| 399 // Skip visiting the backing hash table containing the mappings and the | 402 // Skip visiting the backing hash table containing the mappings and the |
| 400 // pointer to the other enqueued weak collections, both are post-processed. | 403 // pointer to the other enqueued weak collections, both are post-processed. |
| 401 StaticVisitor::VisitPointers( | 404 JSWeakCollectionBodyVisitor::Visit(map, object); |
| 402 heap, object, | |
| 403 HeapObject::RawField(object, JSWeakCollection::kPropertiesOffset), | |
| 404 HeapObject::RawField(object, JSWeakCollection::kTableOffset)); | |
| 405 STATIC_ASSERT(JSWeakCollection::kTableOffset + kPointerSize == | |
| 406 JSWeakCollection::kNextOffset); | |
| 407 STATIC_ASSERT(JSWeakCollection::kNextOffset + kPointerSize == | |
| 408 JSWeakCollection::kSize); | |
| 409 | 405 |
| 410 // Partially initialized weak collection is enqueued, but table is ignored. | 406 // Partially initialized weak collection is enqueued, but table is ignored. |
| 411 if (!weak_collection->table()->IsHashTable()) return; | 407 if (!weak_collection->table()->IsHashTable()) return; |
| 412 | 408 |
| 413 // Mark the backing hash table without pushing it on the marking stack. | 409 // Mark the backing hash table without pushing it on the marking stack. |
| 414 Object** slot = HeapObject::RawField(object, JSWeakCollection::kTableOffset); | 410 Object** slot = HeapObject::RawField(object, JSWeakCollection::kTableOffset); |
| 415 HeapObject* obj = HeapObject::cast(*slot); | 411 HeapObject* obj = HeapObject::cast(*slot); |
| 416 heap->mark_compact_collector()->RecordSlot(object, slot, obj); | 412 heap->mark_compact_collector()->RecordSlot(object, slot, obj); |
| 417 StaticVisitor::MarkObjectWithoutPush(heap, obj); | 413 StaticVisitor::MarkObjectWithoutPush(heap, obj); |
| 418 } | 414 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 StaticVisitor::MarkObject(heap, function->shared()->code()); | 510 StaticVisitor::MarkObject(heap, function->shared()->code()); |
| 515 } | 511 } |
| 516 } | 512 } |
| 517 VisitJSFunctionStrongCode(map, object); | 513 VisitJSFunctionStrongCode(map, object); |
| 518 } | 514 } |
| 519 | 515 |
| 520 | 516 |
| 521 template <typename StaticVisitor> | 517 template <typename StaticVisitor> |
| 522 void StaticMarkingVisitor<StaticVisitor>::VisitJSRegExp(Map* map, | 518 void StaticMarkingVisitor<StaticVisitor>::VisitJSRegExp(Map* map, |
| 523 HeapObject* object) { | 519 HeapObject* object) { |
| 524 typedef FlexibleBodyVisitor<StaticVisitor, JSRegExp::BodyDescriptor, void> | 520 JSObjectVisitor::Visit(map, object); |
| 525 JSRegExpBodyVisitor; | |
| 526 JSRegExpBodyVisitor::Visit(map, object); | |
| 527 } | 521 } |
| 528 | 522 |
| 529 | 523 |
| 530 template <typename StaticVisitor> | 524 template <typename StaticVisitor> |
| 531 void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer( | 525 void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer( |
| 532 Map* map, HeapObject* object) { | 526 Map* map, HeapObject* object) { |
| 533 Heap* heap = map->GetHeap(); | 527 Heap* heap = map->GetHeap(); |
| 534 | 528 |
| 535 typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, | 529 typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, |
| 536 void> JSArrayBufferBodyVisitor; | 530 void> JSArrayBufferBodyVisitor; |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 814 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, | 808 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, |
| 815 void> JSFunctionWeakCodeBodyVisitor; | 809 void> JSFunctionWeakCodeBodyVisitor; |
| 816 JSFunctionWeakCodeBodyVisitor::Visit(map, object); | 810 JSFunctionWeakCodeBodyVisitor::Visit(map, object); |
| 817 } | 811 } |
| 818 | 812 |
| 819 | 813 |
| 820 } // namespace internal | 814 } // namespace internal |
| 821 } // namespace v8 | 815 } // namespace v8 |
| 822 | 816 |
| 823 #endif // V8_OBJECTS_VISITING_INL_H_ | 817 #endif // V8_OBJECTS_VISITING_INL_H_ |
| OLD | NEW |