summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2022-10-02 11:40:34 +0100
committerLinus Groh <mail@linusgroh.de>2022-10-02 23:02:27 +0100
commit0585029c30ce20da06f26d19149d3feccb56ed08 (patch)
tree51e4f24bb8ba82ed53f11e2d0eb0560328093774
parentd3b7c06712f5fce11571f29578087695e5016836 (diff)
downloadserenity-0585029c30ce20da06f26d19149d3feccb56ed08.zip
LibJS: Add Visitor::visit(GCPtr<T>) and Visitor::visit(NonnullGCPtr<T>)
Let's avoid reaching for ptr() as much as possible.
-rw-r--r--Userland/Libraries/LibJS/Heap/Cell.h12
-rw-r--r--Userland/Libraries/LibJS/Runtime/FinalizationRegistry.cpp2
2 files changed, 13 insertions, 1 deletions
diff --git a/Userland/Libraries/LibJS/Heap/Cell.h b/Userland/Libraries/LibJS/Heap/Cell.h
index fc266b4ccb..c870a998ee 100644
--- a/Userland/Libraries/LibJS/Heap/Cell.h
+++ b/Userland/Libraries/LibJS/Heap/Cell.h
@@ -11,6 +11,7 @@
#include <AK/Noncopyable.h>
#include <AK/StringView.h>
#include <LibJS/Forward.h>
+#include <LibJS/Heap/GCPtr.h>
namespace JS {
@@ -55,6 +56,17 @@ public:
{
visit_impl(cell);
}
+ template<typename T>
+ void visit(GCPtr<T> cell)
+ {
+ if (cell)
+ visit_impl(*cell.ptr());
+ }
+ template<typename T>
+ void visit(NonnullGCPtr<T> cell)
+ {
+ visit_impl(*cell.ptr());
+ }
void visit(Value);
protected:
diff --git a/Userland/Libraries/LibJS/Runtime/FinalizationRegistry.cpp b/Userland/Libraries/LibJS/Runtime/FinalizationRegistry.cpp
index ee63d93006..a11ba51d45 100644
--- a/Userland/Libraries/LibJS/Runtime/FinalizationRegistry.cpp
+++ b/Userland/Libraries/LibJS/Runtime/FinalizationRegistry.cpp
@@ -82,7 +82,7 @@ ThrowCompletionOr<void> FinalizationRegistry::cleanup(Optional<JobCallback> call
void FinalizationRegistry::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
- visitor.visit(m_realm.ptr());
+ visitor.visit(m_realm);
for (auto& record : m_records) {
visitor.visit(record.held_value);
visitor.visit(record.unregister_token);