1 //! Utility module to create trampolines in/out WebAssembly module.
2 
3 mod func;
4 mod global;
5 mod memory;
6 mod table;
7 
8 pub use self::func::*;
9 pub use self::global::*;
10 pub(crate) use memory::MemoryCreatorProxy;
11 
12 use self::memory::create_memory;
13 use self::table::create_table;
14 use crate::prelude::*;
15 use crate::runtime::vm::SharedMemory;
16 use crate::store::StoreOpaque;
17 use crate::{MemoryType, TableType};
18 use wasmtime_environ::{MemoryIndex, TableIndex};
19 
20 pub fn generate_memory_export(
21     store: &mut StoreOpaque,
22     m: &MemoryType,
23     preallocation: Option<&SharedMemory>,
24 ) -> Result<crate::runtime::vm::ExportMemory> {
25     let instance = create_memory(store, m, preallocation)?;
26     Ok(store
27         .instance_mut(instance)
28         .get_exported_memory(MemoryIndex::from_u32(0)))
29 }
30 
31 pub fn generate_table_export(
32     store: &mut StoreOpaque,
33     t: &TableType,
34 ) -> Result<crate::runtime::vm::ExportTable> {
35     let instance = create_table(store, t)?;
36     Ok(store
37         .instance_mut(instance)
38         .get_exported_table(TableIndex::from_u32(0)))
39 }
40