diff options
author | Josh Matthews <josh@joshmatthews.net> | 2024-03-08 09:15:26 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-08 14:15:26 +0000 |
commit | 19f1f2a8f4a18b17fc9c4ce80df831a339ce91f0 (patch) | |
tree | 044850b4a1914c4ed7e0ef3d67f7211f7de4846b /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 0327d4638bdb3c95315c143dfcc94d8195fb5fae (diff) | |
download | servo-19f1f2a8f4a18b17fc9c4ce80df831a339ce91f0.tar.gz servo-19f1f2a8f4a18b17fc9c4ce80df831a339ce91f0.zip |
Extract generated finalizers into generic helper functions. (#31569)
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 9a8dee594c8..1457eed4318 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -6101,38 +6101,12 @@ let this = native_from_object_static::<%s>(obj).unwrap(); def finalizeHook(descriptor, hookName, context): - release = "" if descriptor.isGlobal(): - release += """\ -finalize_global(obj); -""" + release = "finalize_global(obj, this);" elif descriptor.weakReferenceable: - release += """\ -let mut slot = UndefinedValue(); -JS_GetReservedSlot(obj, DOM_WEAK_SLOT, &mut slot); -let weak_box_ptr = slot.to_private() as *mut WeakBox<%s>; -if !weak_box_ptr.is_null() { - let count = { - let weak_box = &*weak_box_ptr; - assert!(weak_box.value.get().is_some()); - assert!(weak_box.count.get() > 0); - weak_box.value.set(None); - let count = weak_box.count.get() - 1; - weak_box.count.set(count); - count - }; - if count == 0 { - mem::drop(Box::from_raw(weak_box_ptr)); - } -} -""" % descriptor.concreteType - release += """\ -if !this.is_null() { - // The pointer can be null if the object is the unforgeable holder of that interface. - let _ = Box::from_raw(this as *mut %s); -} -debug!("%s finalize: {:p}", this);\ -""" % (descriptor.concreteType, descriptor.concreteType) + release = "finalize_weak_referenceable(obj, this);" + else: + release = "finalize_common(this);" return release @@ -6569,7 +6543,9 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'crate::dom::bindings::utils::ProtoOrIfaceArray', 'crate::dom::bindings::utils::callargs_is_constructing', 'crate::dom::bindings::utils::enumerate_global', - 'crate::dom::bindings::utils::finalize_global', + 'crate::dom::bindings::finalize::finalize_common', + 'crate::dom::bindings::finalize::finalize_global', + 'crate::dom::bindings::finalize::finalize_weak_referenceable', 'crate::dom::bindings::utils::generic_getter', 'crate::dom::bindings::utils::generic_lenient_getter', 'crate::dom::bindings::utils::generic_lenient_setter', |