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

LibJS: Don't use a Handle<Realm> in FinalizationRegistry

Instead just treat it like a normal GC cell edge.
This commit is contained in:
Andreas Kling 2022-09-01 11:38:35 +02:00
parent 63cc2650e3
commit 7fce5f102f
2 changed files with 6 additions and 4 deletions

View file

@ -12,7 +12,7 @@ namespace JS {
FinalizationRegistry::FinalizationRegistry(Realm& realm, JobCallback cleanup_callback, Object& prototype) FinalizationRegistry::FinalizationRegistry(Realm& realm, JobCallback cleanup_callback, Object& prototype)
: Object(prototype) : Object(prototype)
, WeakContainer(heap()) , WeakContainer(heap())
, m_realm(make_handle(realm)) , m_realm(realm)
, m_cleanup_callback(move(cleanup_callback)) , m_cleanup_callback(move(cleanup_callback))
{ {
} }
@ -82,6 +82,7 @@ ThrowCompletionOr<void> FinalizationRegistry::cleanup(Optional<JobCallback> call
void FinalizationRegistry::visit_edges(Cell::Visitor& visitor) void FinalizationRegistry::visit_edges(Cell::Visitor& visitor)
{ {
Base::visit_edges(visitor); Base::visit_edges(visitor);
visitor.visit(m_realm.ptr());
for (auto& record : m_records) { for (auto& record : m_records) {
visitor.visit(record.held_value); visitor.visit(record.held_value);
visitor.visit(record.unregister_token); visitor.visit(record.unregister_token);

View file

@ -7,6 +7,7 @@
#pragma once #pragma once
#include <AK/SinglyLinkedList.h> #include <AK/SinglyLinkedList.h>
#include <LibJS/Heap/GCPtr.h>
#include <LibJS/Runtime/FunctionObject.h> #include <LibJS/Runtime/FunctionObject.h>
#include <LibJS/Runtime/GlobalObject.h> #include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/JobCallback.h> #include <LibJS/Runtime/JobCallback.h>
@ -30,8 +31,8 @@ public:
virtual void remove_dead_cells(Badge<Heap>) override; virtual void remove_dead_cells(Badge<Heap>) override;
Realm& realm() { return *m_realm.cell(); } Realm& realm() { return *m_realm; }
Realm const& realm() const { return *m_realm.cell(); } Realm const& realm() const { return *m_realm; }
JobCallback& cleanup_callback() { return m_cleanup_callback; } JobCallback& cleanup_callback() { return m_cleanup_callback; }
JobCallback const& cleanup_callback() const { return m_cleanup_callback; } JobCallback const& cleanup_callback() const { return m_cleanup_callback; }
@ -41,7 +42,7 @@ private:
virtual void visit_edges(Visitor& visitor) override; virtual void visit_edges(Visitor& visitor) override;
Handle<Realm> m_realm; NonnullGCPtr<Realm> m_realm;
JobCallback m_cleanup_callback; JobCallback m_cleanup_callback;
struct FinalizationRecord { struct FinalizationRecord {