From 25bcc9b7fc0925b2c1a7c32b322b6df973940009 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Tue, 1 Dec 2020 15:29:41 +0100 Subject: [PATCH] fixup --- lib/c-api/src/wasm_c_api/macros.rs | 32 ++++++++++++++++-------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/c-api/src/wasm_c_api/macros.rs b/lib/c-api/src/wasm_c_api/macros.rs index 1b6fb4b88..77a7448e1 100644 --- a/lib/c-api/src/wasm_c_api/macros.rs +++ b/lib/c-api/src/wasm_c_api/macros.rs @@ -25,14 +25,17 @@ macro_rules! wasm_declare_vec { } impl<'a> From]>> for [] { - fn from(other: Vec<[]>) -> Self { - let mut boxed_slice = other.into_boxed_slice(); - let size = boxed_slice.len(); - let data = boxed_slice.as_mut_ptr(); - ::std::mem::forget(boxed_slice); + fn from(mut vec: Vec<[]>) -> Self { + vec.shrink_to_fit(); + + let length = vec.len(); + let pointer = vec.as_mut_ptr(); + + ::std::mem::forget(vec); + Self { - size, - data, + size: length, + data: pointer, } } } @@ -100,20 +103,19 @@ macro_rules! wasm_declare_vec { ::std::mem::forget(bytes); } - #[no_mangle] - pub unsafe extern "C" fn [](ptr: Option]>>) { - if ptr.is_none() { + pub unsafe extern "C" fn [](subject: Option]>>) { + if subject.is_none() { return; } - let mut vec = ptr.unwrap(); + let subject: Box<[]> = subject.unwrap(); - if !vec.data.is_null() { - let _ = Vec::from_raw_parts(vec.data, vec.size, vec.size); - vec.data = ::std::ptr::null_mut(); - vec.size = 0; + if !subject.data.is_null() { + let _ = Vec::from_raw_parts(subject.data, subject.size, subject.size); } + + ::std::ptr::drop_in_place(Box::into_raw(subject)); } }