diff --git a/crates/wasm-bindgen-cli-support/src/js.rs b/crates/wasm-bindgen-cli-support/src/js.rs index 774f47f3..faba08eb 100644 --- a/crates/wasm-bindgen-cli-support/src/js.rs +++ b/crates/wasm-bindgen-cli-support/src/js.rs @@ -1031,7 +1031,7 @@ impl<'a, 'b> SubContext<'a, 'b> { ", i = i, func = func, arg = name)); pass(&format!("ptr{}", i)); pass(&format!("len{}", i)); - if ty.owned { + if !ty.owned { destructors.push_str(&format!("\n\ wasm.__wbindgen_free(ptr{i}, len{i});\n\ ", i = i)); diff --git a/crates/wasm-bindgen-macro/src/lib.rs b/crates/wasm-bindgen-macro/src/lib.rs index 92bc40ef..1878bb00 100644 --- a/crates/wasm-bindgen-macro/src/lib.rs +++ b/crates/wasm-bindgen-macro/src/lib.rs @@ -148,7 +148,7 @@ fn bindgen_export(export: &ast::Export, into: &mut Tokens) { let ptr = syn::Ident::from(format!("arg{}_ptr", i)); let len = syn::Ident::from(format!("arg{}_len", i)); let abi_ty = ty.abi_element(); - args.push(my_quote! { #ptr: *const #abi_ty }); + args.push(my_quote! { #ptr: *mut #abi_ty }); args.push(my_quote! { #len: usize }); if owned { arg_conversions.push(my_quote! { @@ -159,7 +159,7 @@ fn bindgen_export(export: &ast::Export, into: &mut Tokens) { } else { arg_conversions.push(my_quote! { let #ident = unsafe { - ::std::slice::from_raw_parts(#ptr, #len) + ::std::slice::from_raw_parts(#ptr as *const #abi_ty, #len) }; }); } diff --git a/crates/wasm-bindgen-shared/src/lib.rs b/crates/wasm-bindgen-shared/src/lib.rs index d497ef18..7fe56b5d 100644 --- a/crates/wasm-bindgen-shared/src/lib.rs +++ b/crates/wasm-bindgen-shared/src/lib.rs @@ -100,7 +100,7 @@ pub const TYPE_SLICE_F64: char = '\u{71}'; pub const TYPE_JS_OWNED: char = '\u{72}'; pub const TYPE_JS_REF: char = '\u{73}'; -pub const TYPE_CUSTOM_START: u32 = 0x64; +pub const TYPE_CUSTOM_START: u32 = 0x74; pub const TYPE_CUSTOM_REF_FLAG: u32 = 1; pub fn name_to_descriptor(name: &str) -> char {