mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-11-28 05:52:21 +03:00
8ba41cce6e
This commit improves the codegen for `Closure<T>`, primarily for ZST where the closure doesn't actually capture anything. Previously `wasm-bindgen` would unconditionally allocate an `Rc` for a fat pointer, meaning that it would always hit the allocator even when the `Box<T>` didn't actually contain an allocation. Now the reference count for the closure is stored on the JS object rather than in Rust. Some more advanced tests were added along the way to ensure that functionality didn't regress, and otherwise the calling convention for `Closure` changed a good deal but should still be the same user-facing. The primary change was that the reference count reaching zero may cause JS to need to run the destructor. It simply returns this information in `Drop for Closure` and otherwise when calling it now also retains a function pointer that runs the destructor. Closes #874 |
||
---|---|---|
.. | ||
src | ||
tests | ||
Cargo.toml |