and now funcs work again

This commit is contained in:
Pat Hickey
2020-01-27 20:28:27 -08:00
parent c780421c28
commit 373560b88a
3 changed files with 12 additions and 9 deletions

View File

@@ -74,8 +74,7 @@ pub fn define_func(names: &Names, func: &witx::InterfaceFunc) -> TokenStream {
let marshal_args = func let marshal_args = func
.params .params
.iter() .iter()
//.map(|p| marshal_arg(names, p, error_handling.clone())); .map(|p| marshal_arg(names, p, error_handling.clone()));
.map(|_p| quote!(unimplemented!(); )); // FIXME
let trait_args = func let trait_args = func
.params .params
.iter() .iter()
@@ -99,8 +98,7 @@ pub fn define_func(names: &Names, func: &witx::InterfaceFunc) -> TokenStream {
.results .results
.iter() .iter()
.skip(1) .skip(1)
//.map(|result| marshal_result(names, result, error_handling.clone())); .map(|result| marshal_result(names, result, error_handling.clone()));
.map(|_result| (quote!(unimplemented!();), quote!(unimplemented!();))); // FIXME
let marshal_rets_pre = marshal_rets.clone().map(|(pre, _post)| pre); let marshal_rets_pre = marshal_rets.clone().map(|(pre, _post)| pre);
let marshal_rets_post = marshal_rets.map(|(_pre, post)| post); let marshal_rets_post = marshal_rets.map(|(_pre, post)| post);
@@ -218,8 +216,13 @@ fn marshal_result(
// core type is given func_ptr_binding name. // core type is given func_ptr_binding name.
let ptr_name = names.func_ptr_binding(&result.name); let ptr_name = names.func_ptr_binding(&result.name);
let pre = quote! { let pre = quote! {
let #ptr_name = match memory.ptr_mut::<#pointee_type>(#ptr_name as u32) { let mut #ptr_name = match memory.ptr_mut::<#pointee_type>(#ptr_name as u32) {
Ok(p) => p, Ok(p) => match p.as_ref_mut() {
Ok(r) => r,
Err(e) => {
#error_handling
}
},
Err(e) => { Err(e) => {
#error_handling #error_handling
} }
@@ -228,8 +231,7 @@ fn marshal_result(
// trait binding returns func_param name. // trait binding returns func_param name.
let val_name = names.func_param(&result.name); let val_name = names.func_param(&result.name);
let post = quote! { let post = quote! {
use ::memory::GuestTypeCopy; *#ptr_name = #val_name;
#pointee_type::write_val(#val_name, &#ptr_name);
}; };
(pre, post) (pre, post)
}; };

View File

@@ -34,7 +34,7 @@ pub fn from_witx(args: TokenStream) -> TokenStream {
mod #modname { mod #modname {
use super::WasiCtx; use super::WasiCtx;
use super::types::*; use super::types::*;
// #(#fs)* #(#fs)*
#modtrait #modtrait
} }

View File

@@ -37,6 +37,7 @@ macro_rules! builtin_type {
Ok(()) Ok(())
} }
} }
impl GuestTypeCopy for $t {}
)* )*
}; };
} }