Name Description Size
cleanup-prevented-with-reference.optional.any.js --- esid: sec-finalization-registry.prototype.cleanupSome info: | FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) 1. Let finalizationRegistry be the this value. 2. If Type(finalizationRegistry) is not Object, throw a TypeError exception. 3. If finalizationRegistry does not have a [[Cells]] internal slot, throw a TypeError exception. 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. --- 1747
cleanup-prevented-with-unregister.optional.any.js --- esid: sec-finalization-registry.prototype.cleanupSome info: | FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) 1. Let finalizationRegistry be the this value. 2. If Type(finalizationRegistry) is not Object, throw a TypeError exception. 3. If finalizationRegistry does not have a [[Cells]] internal slot, throw a TypeError exception. 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. FinalizationRegistry.prototype.unregister ( unregisterToken ) 1. Let removed be false. 2. For each Record { [[Target]], [[Holdings]], [[UnregisterToken]] } cell that is an element of finalizationRegistry.[[Cells]], do a. If SameValue(cell.[[UnregisterToken]], unregisterToken) is true, then i. Remove cell from finalizationRegistry.[[Cells]]. ii. Set removed to true. 3. Return removed. --- 2066
finalizationregistry-cleanupCallback-gets-a-microtask.optional.any.js --- esid: sec-finalization-registry-target info: | FinalizationRegistry ( cleanupCallback ) Execution At any time, if a set of objects S is not live, an ECMAScript implementation may perform the following steps atomically: For each obj of S, do For each WeakRef ref such that ref.[[WeakRefTarget]] is obj, do Set ref.[[WeakRefTarget]] to empty. For each FinalizationRegistry fg such that fg.[[Cells]] contains cell, such that cell.[[WeakRefTarget]] is obj, Set cell.[[WeakRefTarget]] to empty. Optionally, perform ! HostCleanupFinalizationRegistry(fg). HostCleanupFinalizationRegistry(finalizationRegistry) HostCleanupFinalizationRegistry is an implementation-defined abstract operation that is expected to call CleanupFinalizationRegistry(finalizationRegistry) at some point in the future, if possible. The host's responsibility is to make this call at a time which does not interrupt synchronous ECMAScript code execution. --- 2111
finalizationregistry-cleanupCallback-throws-onerror-interaction.optional.window.js --- esid: sec-finalization-registry-target info: | FinalizationRegistry ( cleanupCallback ) CleanupFinalizationRegistry ( finalizationRegistry [ , callback ] ) The following steps are performed: Assert: finalizationRegistry has [[Cells]] and [[CleanupCallback]] internal slots. If callback is not present or undefined, set callback to finalizationRegistry.[[CleanupCallback]]. While finalizationRegistry.[[Cells]] contains a Record cell such that cell.[[WeakRefTarget]] is empty, then an implementation may perform the following steps, Choose any such cell. Remove cell from finalizationRegistry.[[Cells]]. Perform ? Call(callback, undefined, « cell.[[HeldValue]] »). Return NormalCompletion(undefined). EDITOR'S NOTE When called from HostCleanupFinalizationRegistry, if calling the callback throws an error, this will be caught within the RunJobs algorithm and reported to the host. HTML does not apply the RunJobs algorithm, but will also report the error, which may call window.onerror. --- 2648
gc-has-one-chance-to-call-cleanupCallback-queueMicrotask.optional.any.js --- esid: sec-finalization-registry-target info: | FinalizationRegistry ( cleanupCallback ) FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) ... 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. Execution At any time, if an object obj is not live, an ECMAScript implementation may perform the following steps atomically: 1. For each WeakRef ref such that ref.[[Target]] is obj, a. Set ref.[[Target]] to empty. 2. For each FinalizationRegistry finalizationRegistry such that finalizationRegistry.[[Cells]] contains cell, such that cell.[[Target]] is obj, a. Set cell.[[Target]] to empty. b. Optionally, perform ! HostCleanupFinalizationRegistry(finalizationRegistry). --- 3834
gc-has-one-chance-to-call-cleanupCallback-queueMicrotaskMutationObserver.optional.window.js --- esid: sec-finalization-registry-target info: | FinalizationRegistry ( cleanupCallback ) FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) ... 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. Execution At any time, if an object obj is not live, an ECMAScript implementation may perform the following steps atomically: 1. For each WeakRef ref such that ref.[[Target]] is obj, a. Set ref.[[Target]] to empty. 2. For each FinalizationRegistry finalizationRegistry such that finalizationRegistry.[[Cells]] contains cell, such that cell.[[Target]] is obj, a. Set cell.[[Target]] to empty. b. Optionally, perform ! HostCleanupFinalizationRegistry(finalizationRegistry). --- 4095
gc-has-one-chance-to-call-cleanupCallback.optional.any.js --- esid: sec-finalization-registry-target info: | FinalizationRegistry ( cleanupCallback ) FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) ... 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. Execution At any time, if an object obj is not live, an ECMAScript implementation may perform the following steps atomically: 1. For each WeakRef ref such that ref.[[Target]] is obj, a. Set ref.[[Target]] to empty. 2. For each FinalizationRegistry finalizationRegistry such that finalizationRegistry.[[Cells]] contains cell, such that cell.[[Target]] is obj, a. Set cell.[[Target]] to empty. b. Optionally, perform ! HostCleanupFinalizationRegistry(finalizationRegistry). --- 3650
holdings-multiple-values.optional.any.js --- esid: sec-properties-of-the-finalization-registry-constructor info: | FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) 1. Let finalizationRegistry be the this value. ... 5. Perform ! CleanupFinalizationRegistry(finalizationRegistry, callback). ... CleanupFinalizationRegistry ( finalizationRegistry [ , callback ] ) ... 3. While finalizationRegistry.[[Cells]] contains a Record cell such that cell.[[WeakRefTarget]] is ~empty~, then an implementation may perform the following steps, a. Choose any such cell. b. Remove cell from finalizationRegistry.[[Cells]]. c. Perform ? Call(callback, undefined, << cell.[[HeldValue]] >>). --- 2470
reentrancy.optional.any.js --- esid: sec-properties-of-the-finalization-registry-constructor --- 1480
resources
return-undefined-with-gc.optional.any.js --- esid: sec-finalization-registry.prototype.cleanupSome info: | FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) 1. Let finalizationRegistry be the this value. 2. If Type(finalizationRegistry) is not Object, throw a TypeError exception. 3. If finalizationRegistry does not have a [[Cells]] internal slot, throw a TypeError exception. 4. If callback is not undefined and IsCallable(callback) is false, throw a TypeError exception. 5. Perform ? CleanupFinalizationRegistry(finalizationRegistry, callback). 6. Return undefined. --- 2652
unregister-cleaned-up-cell.optional.any.js --- esid: sec-finalization-registry.prototype.unregister info: | FinalizationRegistry.prototype.cleanupSome ( [ callback ] ) 1. Let finalizationRegistry be the this value. ... 5. Perform ! CleanupFinalizationRegistry(finalizationRegistry, callback). ... CleanupFinalizationRegistry ( finalizationRegistry [ , callback ] ) ... 3. While finalizationRegistry.[[Cells]] contains a Record cell such that cell.[[WeakRefTarget]] is ~empty~, then an implementation may perform the following steps, a. Choose any such cell. b. Remove cell from finalizationRegistry.[[Cells]]. c. Perform ? Call(callback, undefined, << cell.[[HeldValue]] >>). ... FinalizationRegistry.prototype.unregister ( unregisterToken ) 1. Let removed be false. 2. For each Record { [[Target]], [[Holdings]], [[UnregisterToken]] } cell that is an element of finalizationRegistry.[[Cells]], do a. If SameValue(cell.[[UnregisterToken]], unregisterToken) is true, then i. Remove cell from finalizationRegistry.[[Cells]]. ii. Set removed to true. 3. Return removed. --- 2300