mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-07 05:08:19 +00:00
fix(c-api) wasm_functype_new frees params and results correctly.
This commit is contained in:
@@ -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 std::mem;
|
||||||
use wasmer::{ExternType, FunctionType, ValType};
|
use wasmer::{ExternType, FunctionType, ValType};
|
||||||
|
|
||||||
@@ -98,23 +100,23 @@ pub unsafe extern "C" fn wasm_functype_new(
|
|||||||
let params = params?;
|
let params = params?;
|
||||||
let results = results?;
|
let results = results?;
|
||||||
|
|
||||||
let params: Vec<ValType> = params
|
let params_as_valtype: Vec<ValType> = params
|
||||||
.as_ref()
|
|
||||||
.into_slice()?
|
.into_slice()?
|
||||||
.iter()
|
.into_iter()
|
||||||
.map(|ptr| **ptr)
|
.map(|val| val.as_ref().into())
|
||||||
.map(Into::into)
|
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let results: Vec<ValType> = results
|
let results_as_valtype: Vec<ValType> = results
|
||||||
.as_ref()
|
|
||||||
.into_slice()?
|
.into_slice()?
|
||||||
.iter()
|
.iter()
|
||||||
.map(|ptr| **ptr)
|
.map(|val| val.as_ref().into())
|
||||||
.map(Into::into)
|
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
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(
|
Some(Box::new(wasm_functype_t::new(FunctionType::new(
|
||||||
params, results,
|
params_as_valtype,
|
||||||
|
results_as_valtype,
|
||||||
))))
|
))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user