diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 4c28883ab13..13a03c91c08 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -4027,7 +4027,7 @@ def finalizeHook(descriptor, hookName, context): pass else: assert descriptor.nativeIsISupports - release = """let val = JS_GetReservedSlot(obj, 0); + release = """let val = JS_GetReservedSlot(obj, dom_object_slot(obj)); let _: @mut %s = cast::transmute(RUST_JSVAL_TO_PRIVATE(val)); debug!("%s finalize: %%p", this); """ % (descriptor.concreteType, descriptor.concreteType) diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 6f931cc3290..bb405b3a473 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -121,14 +121,19 @@ pub fn is_dom_proxy(obj: *JSObject) -> bool { } #[fixed_stack_segment] -pub unsafe fn unwrap(obj: *JSObject) -> T { +pub unsafe fn dom_object_slot(obj: *JSObject) -> u32 { let clasp = JS_GetClass(obj); - let slot = if is_dom_class(clasp) { - DOM_OBJECT_SLOT + if is_dom_class(clasp) { + DOM_OBJECT_SLOT as u32 } else { assert!(is_dom_proxy(obj)); - DOM_PROXY_OBJECT_SLOT - } as u32; + DOM_PROXY_OBJECT_SLOT as u32 + } +} + +#[fixed_stack_segment] +pub unsafe fn unwrap(obj: *JSObject) -> T { + let slot = dom_object_slot(obj); let val = JS_GetReservedSlot(obj, slot); cast::transmute(RUST_JSVAL_TO_PRIVATE(val)) }