1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:07:36 +00:00

LibJS: Use IntrusiveList for keeping track of MarkedValueLists

This commit is contained in:
Andreas Kling 2021-07-21 19:51:19 +02:00
parent 746b310061
commit 3fe1be20b7
3 changed files with 13 additions and 7 deletions

View file

@ -94,8 +94,8 @@ void Heap::gather_roots(HashTable<Cell*>& roots)
for (auto& handle : m_handles) for (auto& handle : m_handles)
roots.set(handle.cell()); roots.set(handle.cell());
for (auto* list : m_marked_value_lists) { for (auto& list : m_marked_value_lists) {
for (auto& value : list->values()) { for (auto& value : list.values()) {
if (value.is_cell()) if (value.is_cell())
roots.set(&value.as_cell()); roots.set(&value.as_cell());
} }
@ -270,14 +270,14 @@ void Heap::did_destroy_handle(Badge<HandleImpl>, HandleImpl& impl)
void Heap::did_create_marked_value_list(Badge<MarkedValueList>, MarkedValueList& list) void Heap::did_create_marked_value_list(Badge<MarkedValueList>, MarkedValueList& list)
{ {
VERIFY(!m_marked_value_lists.contains(&list)); VERIFY(!m_marked_value_lists.contains(list));
m_marked_value_lists.set(&list); m_marked_value_lists.append(list);
} }
void Heap::did_destroy_marked_value_list(Badge<MarkedValueList>, MarkedValueList& list) void Heap::did_destroy_marked_value_list(Badge<MarkedValueList>, MarkedValueList& list)
{ {
VERIFY(m_marked_value_lists.contains(&list)); VERIFY(m_marked_value_lists.contains(list));
m_marked_value_lists.remove(&list); m_marked_value_lists.remove(list);
} }
void Heap::did_create_weak_container(Badge<WeakContainer>, WeakContainer& set) void Heap::did_create_weak_container(Badge<WeakContainer>, WeakContainer& set)

View file

@ -109,7 +109,7 @@ private:
HandleImpl::List m_handles; HandleImpl::List m_handles;
HashTable<MarkedValueList*> m_marked_value_lists; MarkedValueList::List m_marked_value_lists;
HashTable<WeakContainer*> m_weak_containers; HashTable<WeakContainer*> m_weak_containers;

View file

@ -6,6 +6,7 @@
#pragma once #pragma once
#include <AK/IntrusiveList.h>
#include <AK/Noncopyable.h> #include <AK/Noncopyable.h>
#include <AK/Vector.h> #include <AK/Vector.h>
#include <LibJS/Forward.h> #include <LibJS/Forward.h>
@ -34,6 +35,11 @@ public:
private: private:
Heap& m_heap; Heap& m_heap;
IntrusiveListNode<MarkedValueList> m_list_node;
public:
using List = IntrusiveList<MarkedValueList, RawPtr<MarkedValueList>, &MarkedValueList::m_list_node>;
}; };
} }