Add typed functions and weird type parameter things

This commit is contained in:
Lachlan Sneff
2019-02-02 15:28:50 -08:00
parent 6c33aa5803
commit eba66f3b33
24 changed files with 706 additions and 463 deletions

View File

@ -14,21 +14,8 @@ macro_rules! debug {
#[macro_export]
macro_rules! func {
($func:path, [ $( $params:ident ),* ] -> [ $( $returns:ident ),* ] ) => {{
use $crate::{
export::{Context, Export, FuncPointer},
types::{FuncSig, Type, WasmExternType},
vm,
};
let func: extern fn( $( $params, )* &mut vm::Ctx) -> ($( $returns )*) = $func;
Export::Function {
func: unsafe { FuncPointer::new(func as _) },
ctx: Context::Internal,
signature: FuncSig::new(
&[ $( <$params as WasmExternType>::TYPE, )* ] as &[Type],
&[ $( <$returns as WasmExternType>::TYPE, )* ] as &[Type],
).into(),
}
($func:path) => {{
$crate::Func::new($func)
}};
}
@ -47,11 +34,11 @@ macro_rules! func {
/// # use wasmer_runtime_core::vm::Ctx;
/// let import_object = imports! {
/// "env" => {
/// "foo" => func!(foo, [i32] -> [i32]),
/// "foo" => func!(foo),
/// },
/// };
///
/// extern fn foo(n: i32, _: &mut Ctx) -> i32 {
/// fn foo(n: i32, _: &mut Ctx) -> i32 {
/// n
/// }
/// ```