mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:27:44 +00:00
LibJS: Add the FinalizationRegistry built-in object
As well as the needed functionality in VM to enqueue and run cleanup jobs for the FinalizationRegistry instances.
This commit is contained in:
parent
8c7fe8d6c8
commit
de9fa6622a
14 changed files with 365 additions and 20 deletions
|
@ -11,6 +11,7 @@
|
|||
#include <LibJS/Interpreter.h>
|
||||
#include <LibJS/Runtime/Array.h>
|
||||
#include <LibJS/Runtime/Error.h>
|
||||
#include <LibJS/Runtime/FinalizationRegistry.h>
|
||||
#include <LibJS/Runtime/GlobalObject.h>
|
||||
#include <LibJS/Runtime/IteratorOperations.h>
|
||||
#include <LibJS/Runtime/NativeFunction.h>
|
||||
|
@ -557,6 +558,20 @@ void VM::enqueue_promise_job(NativeFunction& job)
|
|||
m_promise_jobs.append(&job);
|
||||
}
|
||||
|
||||
void VM::run_queued_finalization_registry_cleanup_jobs()
|
||||
{
|
||||
while (!m_finalization_registry_cleanup_jobs.is_empty()) {
|
||||
auto* registry = m_finalization_registry_cleanup_jobs.take_first();
|
||||
registry->cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
// 9.10.4.1 HostEnqueueFinalizationRegistryCleanupJob ( finalizationRegistry ), https://tc39.es/ecma262/#sec-host-cleanup-finalization-registry
|
||||
void VM::enqueue_finalization_registry_cleanup_job(FinalizationRegistry& registry)
|
||||
{
|
||||
m_finalization_registry_cleanup_jobs.append(®istry);
|
||||
}
|
||||
|
||||
// 27.2.1.9 HostPromiseRejectionTracker ( promise, operation ), https://tc39.es/ecma262/#sec-host-promise-rejection-tracker
|
||||
void VM::promise_rejection_tracker(const Promise& promise, Promise::RejectionOperation operation) const
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue