wasmer/lib/runtime-core/src/backend.rs

74 lines
2.2 KiB
Rust
Raw Normal View History

2019-01-18 20:13:01 +00:00
use crate::{
2019-01-18 22:30:15 +00:00
backing::ImportBacking,
2019-01-18 20:13:01 +00:00
error::CompileResult,
error::RuntimeResult,
module::ModuleInner,
types::{FuncIndex, LocalFuncIndex, Value},
vm,
};
2019-01-08 17:09:47 +00:00
use std::ptr::NonNull;
pub mod sys {
pub use crate::sys::*;
}
2019-01-11 03:59:57 +00:00
pub use crate::sig_registry::SigRegistry;
2019-01-18 20:13:01 +00:00
/// This type cannot be constructed from
/// outside the runtime crate.
pub struct Token {
_private: (),
}
impl Token {
pub(crate) fn generate() -> Self {
Self { _private: () }
}
}
2019-01-08 17:09:47 +00:00
pub trait Compiler {
2019-01-18 20:13:01 +00:00
/// Compiles a `Module` from WebAssembly binary format.
/// The `CompileToken` parameter ensures that this can only
/// be called from inside the runtime.
fn compile(&self, wasm: &[u8], _: Token) -> CompileResult<ModuleInner>;
}
/// The functionality exposed by this trait is expected to be used
/// for calling functions exported by a webassembly module from
/// host code only.
pub trait ProtectedCaller {
/// This calls the exported function designated by `local_func_index`.
/// Important to note, this supports calling imported functions that are
/// then exported.
///
/// It's invalid to attempt to call a local function that isn't exported and
/// the implementation is expected to check for that. The implementation
/// is also expected to check for correct parameter types and correct
/// parameter number.
///
/// The `returns` parameter is filled with dummy values when passed in and upon function
/// return, will be filled with the return values of the wasm function, as long as the
/// call completed successfully.
///
/// The existance of the Token parameter ensures that this can only be called from
/// within the runtime crate.
fn call(
&self,
module: &ModuleInner,
func_index: FuncIndex,
params: &[Value],
import_backing: &ImportBacking,
2019-01-18 20:13:01 +00:00
vmctx: *mut vm::Ctx,
_: Token,
) -> RuntimeResult<Vec<Value>>;
2019-01-08 17:09:47 +00:00
}
pub trait FuncResolver {
2019-01-18 20:13:01 +00:00
/// This returns a pointer to the function designated by the `local_func_index`
/// parameter.
2019-01-16 18:26:10 +00:00
fn get(
&self,
module: &ModuleInner,
local_func_index: LocalFuncIndex,
) -> Option<NonNull<vm::Func>>;
2019-01-08 17:09:47 +00:00
}