Skip to main content

wasmer_wasix/state/linker/
runtime_hooks.rs

1use 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}