diff options
Diffstat (limited to 'deps/v8/src/heap/objects-visiting.cc')
-rw-r--r-- | deps/v8/src/heap/objects-visiting.cc | 119 |
1 files changed, 5 insertions, 114 deletions
diff --git a/deps/v8/src/heap/objects-visiting.cc b/deps/v8/src/heap/objects-visiting.cc index 520e539c7c..de2cfddb28 100644 --- a/deps/v8/src/heap/objects-visiting.cc +++ b/deps/v8/src/heap/objects-visiting.cc @@ -191,8 +191,7 @@ struct WeakListVisitor; template <class T> -Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer, - bool stop_after_young) { +Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer) { Object* undefined = heap->undefined_value(); Object* head = undefined; T* tail = NULL; @@ -235,59 +234,7 @@ Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer, } // Terminate the list if there is one or more elements. - if (tail != NULL) { - WeakListVisitor<T>::SetWeakNext(tail, undefined); - } - return head; -} - - -Object* VisitNewArrayBufferViewsWeakList(Heap* heap, Object* list, - WeakObjectRetainer* retainer) { - Object* undefined = heap->undefined_value(); - Object* previous = undefined; - Object* head = undefined; - Object* next; - MarkCompactCollector* collector = heap->mark_compact_collector(); - bool record_slots = MustRecordSlots(heap); - - for (Object* o = list; o != undefined;) { - JSArrayBufferView* view = JSArrayBufferView::cast(o); - next = view->weak_next(); - if (!heap->InNewSpace(view)) { - if (previous != undefined) { - // We are in the middle of the list, skip the old space element. - JSArrayBufferView* previous_view = JSArrayBufferView::cast(previous); - previous_view->set_weak_next(next); - if (record_slots) { - Object** next_slot = HeapObject::RawField( - previous_view, JSArrayBufferView::kWeakNextOffset); - collector->RecordSlot(next_slot, next_slot, next); - } - } - JSArrayBuffer* buffer = JSArrayBuffer::cast(view->buffer()); - view->set_weak_next(buffer->weak_first_view()); - if (record_slots) { - Object** next_slot = - HeapObject::RawField(view, JSArrayBufferView::kWeakNextOffset); - collector->RecordSlot(next_slot, next_slot, buffer->weak_first_view()); - } - buffer->set_weak_first_view(view); - if (record_slots) { - Object** slot = - HeapObject::RawField(buffer, JSArrayBuffer::kWeakFirstViewOffset); - heap->mark_compact_collector()->RecordSlot(slot, slot, view); - } - } else { - // We found a valid new space view, remember it. - previous = view; - if (head == undefined) { - // We are at the list head. - head = view; - } - } - o = next; - } + if (tail != NULL) WeakListVisitor<T>::SetWeakNext(tail, undefined); return head; } @@ -369,8 +316,7 @@ struct WeakListVisitor<Context> { static void DoWeakList(Heap* heap, Context* context, WeakObjectRetainer* retainer, int index) { // Visit the weak list, removing dead intermediate elements. - Object* list_head = - VisitWeakList<T>(heap, context->get(index), retainer, false); + Object* list_head = VisitWeakList<T>(heap, context->get(index), retainer); // Update the list head. context->set(index, list_head, UPDATE_WRITE_BARRIER); @@ -394,50 +340,6 @@ struct WeakListVisitor<Context> { template <> -struct WeakListVisitor<JSArrayBufferView> { - static void SetWeakNext(JSArrayBufferView* obj, Object* next) { - obj->set_weak_next(next); - } - - static Object* WeakNext(JSArrayBufferView* obj) { return obj->weak_next(); } - - static int WeakNextOffset() { return JSArrayBufferView::kWeakNextOffset; } - - static void VisitLiveObject(Heap*, JSArrayBufferView*, WeakObjectRetainer*) {} - - static void VisitPhantomObject(Heap*, JSArrayBufferView*) {} -}; - - -template <> -struct WeakListVisitor<JSArrayBuffer> { - static void SetWeakNext(JSArrayBuffer* obj, Object* next) { - obj->set_weak_next(next); - } - - static Object* WeakNext(JSArrayBuffer* obj) { return obj->weak_next(); } - - static int WeakNextOffset() { return JSArrayBuffer::kWeakNextOffset; } - - static void VisitLiveObject(Heap* heap, JSArrayBuffer* array_buffer, - WeakObjectRetainer* retainer) { - Object* typed_array_obj = VisitWeakList<JSArrayBufferView>( - heap, array_buffer->weak_first_view(), retainer, false); - array_buffer->set_weak_first_view(typed_array_obj); - if (typed_array_obj != heap->undefined_value() && MustRecordSlots(heap)) { - Object** slot = HeapObject::RawField(array_buffer, - JSArrayBuffer::kWeakFirstViewOffset); - heap->mark_compact_collector()->RecordSlot(slot, slot, typed_array_obj); - } - } - - static void VisitPhantomObject(Heap* heap, JSArrayBuffer* phantom) { - Runtime::FreeArrayBuffer(heap->isolate(), phantom); - } -}; - - -template <> struct WeakListVisitor<AllocationSite> { static void SetWeakNext(AllocationSite* obj, Object* next) { obj->set_weak_next(next); @@ -454,20 +356,9 @@ struct WeakListVisitor<AllocationSite> { template Object* VisitWeakList<Context>(Heap* heap, Object* list, - WeakObjectRetainer* retainer, - bool stop_after_young); - - -template Object* VisitWeakList<JSArrayBuffer>(Heap* heap, Object* list, - WeakObjectRetainer* retainer, - bool stop_after_young); - -template Object* VisitWeakList<JSArrayBufferView>(Heap* heap, Object* list, - WeakObjectRetainer* retainer, - bool stop_after_young); + WeakObjectRetainer* retainer); template Object* VisitWeakList<AllocationSite>(Heap* heap, Object* list, - WeakObjectRetainer* retainer, - bool stop_after_young); + WeakObjectRetainer* retainer); } } // namespace v8::internal |