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
Notes: sideshowbarker 2024-07-17 07:32:46 +09:00
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)
: Object(prototype)
, WeakContainer(heap())
, m_realm(make_handle(realm))
, m_realm(realm)
, m_cleanup_callback(move(cleanup_callback))
{
}
@ -82,6 +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());
for (auto& record : m_records) {
visitor.visit(record.held_value);
visitor.visit(record.unregister_token);

View File

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