blob: 9008f6429056bde6a123bfb15820be0e4eede0d4 [file] [log] [blame]
// 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;
}