| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| bitfield struct FinalizationRegistryFlags extends uint31 { |
| scheduled_for_cleanup: bool: 1 bit; |
| } |
| |
| extern class JSFinalizationRegistry extends JSObject { |
| native_context: NativeContext; |
| cleanup: Callable; |
| active_cells: Undefined|WeakCell; |
| cleared_cells: Undefined|WeakCell; |
| key_map: Object; |
| // For the linked list of FinalizationRegistries that need cleanup. This |
| // link is weak. |
| next_dirty: Undefined|JSFinalizationRegistry; |
| flags: SmiTagged<FinalizationRegistryFlags>; |
| } |
| |
| @generateCppClass |
| extern class WeakCell extends HeapObject { |
| finalization_registry: Undefined|JSFinalizationRegistry; |
| target: Undefined|JSReceiver; |
| unregister_token: JSAny; |
| holdings: JSAny; |
| |
| // For storing doubly linked lists of WeakCells in JSFinalizationRegistry's |
| // "active_cells" and "cleared_cells" lists. |
| prev: Undefined|WeakCell; |
| next: Undefined|WeakCell; |
| |
| // For storing doubly linked lists of WeakCells per key in |
| // JSFinalizationRegistry's key-based hashmap. The key is the identity hash |
| // of unregister_token. WeakCell also needs to know its token, so that we |
| // can remove its corresponding key from the key_map when we remove the last |
| // WeakCell associated with it or when the unregister_token dies. The |
| // unregister token is stored above, after target, as both are weak. |
| key_list_prev: Undefined|WeakCell; |
| key_list_next: Undefined|WeakCell; |
| } |
| |
| @generateCppClass |
| extern class JSWeakRef extends JSObject { |
| target: Undefined|JSReceiver; |
| } |