wasmer_wasix/state/linker/
runtime_hooks.rs1use wasmer::{AsStoreMut, FunctionEnv, Imports, Instance, Memory, Module};
2
3use crate::WasiEnv;
4
5use super::LinkError;
6
7pub(super) fn instantiate_with_runtime_hooks(
8 env: &FunctionEnv<WasiEnv>,
9 store: &mut impl AsStoreMut,
10 module: &Module,
11 imports: &mut Imports,
12 imported_memory: &Memory,
13) -> Result<Instance, LinkError> {
14 let runtime = env.as_ref(store).runtime.clone();
15
16 let instantiation_state = {
17 let mut store_mut = store.as_store_mut();
18 runtime
19 .prepare_imports(module, &mut store_mut, imports)
20 .map_err(LinkError::RuntimeHookError)?
21 };
22
23 let instance = Instance::new(store, module, imports)?;
24
25 {
26 let mut store_mut = store.as_store_mut();
27 runtime
28 .configure_new_instance(
29 module,
30 &mut store_mut,
31 &instance,
32 Some(imported_memory),
33 instantiation_state,
34 )
35 .map_err(LinkError::RuntimeHookError)?;
36 }
37
38 Ok(instance)
39}