diff --git a/lib/c-api/src/wasm_c_api/types/function.rs b/lib/c-api/src/wasm_c_api/types/function.rs index a79be2203..35b845481 100644 --- a/lib/c-api/src/wasm_c_api/types/function.rs +++ b/lib/c-api/src/wasm_c_api/types/function.rs @@ -1,4 +1,6 @@ -use super::{wasm_externtype_t, wasm_valtype_t, wasm_valtype_vec_t, WasmExternType}; +use super::{ + wasm_externtype_t, wasm_valtype_t, wasm_valtype_vec_delete, wasm_valtype_vec_t, WasmExternType, +}; use std::mem; use wasmer::{ExternType, FunctionType, ValType}; @@ -98,23 +100,23 @@ pub unsafe extern "C" fn wasm_functype_new( let params = params?; let results = results?; - let params: Vec = params - .as_ref() + let params_as_valtype: Vec = params .into_slice()? - .iter() - .map(|ptr| **ptr) - .map(Into::into) + .into_iter() + .map(|val| val.as_ref().into()) .collect::>(); - let results: Vec = results - .as_ref() + let results_as_valtype: Vec = results .into_slice()? .iter() - .map(|ptr| **ptr) - .map(Into::into) + .map(|val| val.as_ref().into()) .collect::>(); + wasm_valtype_vec_delete(Box::into_raw(params)); + wasm_valtype_vec_delete(Box::into_raw(results)); + Some(Box::new(wasm_functype_t::new(FunctionType::new( - params, results, + params_as_valtype, + results_as_valtype, )))) }