From 3fe1be20b7ec04542947159f996b62c620dd5171 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 21 Jul 2021 19:51:19 +0200 Subject: [PATCH] LibJS: Use IntrusiveList for keeping track of MarkedValueLists --- Userland/Libraries/LibJS/Heap/Heap.cpp | 12 ++++++------ Userland/Libraries/LibJS/Heap/Heap.h | 2 +- Userland/Libraries/LibJS/Runtime/MarkedValueList.h | 6 ++++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Userland/Libraries/LibJS/Heap/Heap.cpp b/Userland/Libraries/LibJS/Heap/Heap.cpp index 16555b0a2d..0c46359a2d 100644 --- a/Userland/Libraries/LibJS/Heap/Heap.cpp +++ b/Userland/Libraries/LibJS/Heap/Heap.cpp @@ -94,8 +94,8 @@ void Heap::gather_roots(HashTable& roots) for (auto& handle : m_handles) roots.set(handle.cell()); - for (auto* list : m_marked_value_lists) { - for (auto& value : list->values()) { + for (auto& list : m_marked_value_lists) { + for (auto& value : list.values()) { if (value.is_cell()) roots.set(&value.as_cell()); } @@ -270,14 +270,14 @@ void Heap::did_destroy_handle(Badge, HandleImpl& impl) void Heap::did_create_marked_value_list(Badge, MarkedValueList& list) { - VERIFY(!m_marked_value_lists.contains(&list)); - m_marked_value_lists.set(&list); + VERIFY(!m_marked_value_lists.contains(list)); + m_marked_value_lists.append(list); } void Heap::did_destroy_marked_value_list(Badge, MarkedValueList& list) { - VERIFY(m_marked_value_lists.contains(&list)); - m_marked_value_lists.remove(&list); + VERIFY(m_marked_value_lists.contains(list)); + m_marked_value_lists.remove(list); } void Heap::did_create_weak_container(Badge, WeakContainer& set) diff --git a/Userland/Libraries/LibJS/Heap/Heap.h b/Userland/Libraries/LibJS/Heap/Heap.h index 362639d96f..4dbbc73a8c 100644 --- a/Userland/Libraries/LibJS/Heap/Heap.h +++ b/Userland/Libraries/LibJS/Heap/Heap.h @@ -109,7 +109,7 @@ private: HandleImpl::List m_handles; - HashTable m_marked_value_lists; + MarkedValueList::List m_marked_value_lists; HashTable m_weak_containers; diff --git a/Userland/Libraries/LibJS/Runtime/MarkedValueList.h b/Userland/Libraries/LibJS/Runtime/MarkedValueList.h index cd73edb952..86419255b1 100644 --- a/Userland/Libraries/LibJS/Runtime/MarkedValueList.h +++ b/Userland/Libraries/LibJS/Runtime/MarkedValueList.h @@ -6,6 +6,7 @@ #pragma once +#include #include #include #include @@ -34,6 +35,11 @@ public: private: Heap& m_heap; + + IntrusiveListNode m_list_node; + +public: + using List = IntrusiveList, &MarkedValueList::m_list_node>; }; }