Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/c-api/src/component/func.rs
1692 views
1
use wasmtime::component::{Func, Val};
2
3
use crate::{WasmtimeStoreContextMut, wasmtime_error_t};
4
5
use super::wasmtime_component_val_t;
6
7
#[unsafe(no_mangle)]
8
pub unsafe extern "C" fn wasmtime_component_func_call(
9
func: &Func,
10
mut context: WasmtimeStoreContextMut<'_>,
11
args: *const wasmtime_component_val_t,
12
args_len: usize,
13
results: *mut wasmtime_component_val_t,
14
results_len: usize,
15
) -> Option<Box<wasmtime_error_t>> {
16
let c_args = unsafe { std::slice::from_raw_parts(args, args_len) };
17
let c_results = unsafe { std::slice::from_raw_parts_mut(results, results_len) };
18
19
let args = c_args.iter().map(Val::from).collect::<Vec<_>>();
20
let mut results = vec![Val::Bool(false); results_len];
21
22
let result = func.call(&mut context, &args, &mut results);
23
24
crate::handle_result(result, |_| {
25
for (c_val, rust_val) in std::iter::zip(c_results, results) {
26
*c_val = wasmtime_component_val_t::from(&rust_val);
27
}
28
})
29
}
30
31
#[unsafe(no_mangle)]
32
pub unsafe extern "C" fn wasmtime_component_func_post_return(
33
func: &Func,
34
mut context: WasmtimeStoreContextMut<'_>,
35
) -> Option<Box<wasmtime_error_t>> {
36
let result = func.post_return(&mut context);
37
38
crate::handle_result(result, |_| {})
39
}
40
41