From 9c9c5a4979060440e7b011da0f2fcbddae627d65 Mon Sep 17 00:00:00 2001 From: Wen Yuxiang Date: Tue, 29 Sep 2026 22:46:41 +0800 Subject: [PATCH] fix(js): use FixedArray at the JS FFI boundary --- webapi/intersection_observer_callback_callback.mbt | 10 ++++++++-- webapi/mutation_callback_callback.mbt | 10 ++++++++-- webapi/resize_observer_callback_callback.mbt | 10 ++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/webapi/intersection_observer_callback_callback.mbt b/webapi/intersection_observer_callback_callback.mbt index 80e540d5..ca395263 100644 --- a/webapi/intersection_observer_callback_callback.mbt +++ b/webapi/intersection_observer_callback_callback.mbt @@ -26,10 +26,16 @@ pub fn IntersectionObserverCallback::new( ///| #cfg(target="js") -extern "js" fn intersection_observer_callback_ffi( - callback : (Array[IntersectionObserverEntry], IntersectionObserver) -> Unit, +extern "js" fn intersection_observer_callback_ffi_fixed( + callback : (FixedArray[IntersectionObserverEntry], IntersectionObserver) -> Unit, ) -> IntersectionObserverCallback = "(callback) => callback" +fn intersection_observer_callback_ffi( + callback : (Array[IntersectionObserverEntry], IntersectionObserver) -> Unit, +) -> IntersectionObserverCallback { + intersection_observer_callback_ffi_fixed(fn(__a1, __a2) { callback(Array::from_fixed_array(__a1), __a2) }) +} + ///| #cfg(target="wasm-gc") fn intersection_observer_callback_ffi_raw( diff --git a/webapi/mutation_callback_callback.mbt b/webapi/mutation_callback_callback.mbt index 538a2344..9c3dede5 100644 --- a/webapi/mutation_callback_callback.mbt +++ b/webapi/mutation_callback_callback.mbt @@ -22,10 +22,16 @@ pub fn MutationCallback::new( ///| #cfg(target="js") -extern "js" fn mutation_callback_ffi( - callback : (Array[MutationRecord], MutationObserver) -> Unit, +extern "js" fn mutation_callback_ffi_fixed( + callback : (FixedArray[MutationRecord], MutationObserver) -> Unit, ) -> MutationCallback = "(callback) => callback" +fn mutation_callback_ffi( + callback : (Array[MutationRecord], MutationObserver) -> Unit, +) -> MutationCallback { + mutation_callback_ffi_fixed(fn(__a1, __a2) { callback(Array::from_fixed_array(__a1), __a2) }) +} + ///| #cfg(target="wasm-gc") fn mutation_callback_ffi_raw( diff --git a/webapi/resize_observer_callback_callback.mbt b/webapi/resize_observer_callback_callback.mbt index 5da7836c..c3dda31d 100644 --- a/webapi/resize_observer_callback_callback.mbt +++ b/webapi/resize_observer_callback_callback.mbt @@ -24,10 +24,16 @@ pub fn ResizeObserverCallback::new( ///| #cfg(target="js") -extern "js" fn resize_observer_callback_ffi( - callback : (Array[ResizeObserverEntry], ResizeObserver) -> Unit, +extern "js" fn resize_observer_callback_ffi_fixed( + callback : (FixedArray[ResizeObserverEntry], ResizeObserver) -> Unit, ) -> ResizeObserverCallback = "(callback) => callback" +fn resize_observer_callback_ffi( + callback : (Array[ResizeObserverEntry], ResizeObserver) -> Unit, +) -> ResizeObserverCallback { + resize_observer_callback_ffi_fixed(fn(__a1, __a2) { callback(Array::from_fixed_array(__a1), __a2) }) +} + ///| #cfg(target="wasm-gc") fn resize_observer_callback_ffi_raw(