1 //! Utility module to create trampolines in/out WebAssembly module. 2 3 mod global; 4 mod memory; 5 mod table; 6 mod tag; 7 8 pub use self::global::*; 9 pub(crate) use memory::MemoryCreatorProxy; 10 11 use self::memory::create_memory; 12 use self::table::create_table; 13 use self::tag::create_tag; 14 use crate::prelude::*; 15 use crate::runtime::vm::{ExportMemory, SharedMemory}; 16 use crate::store::{StoreOpaque, StoreResourceLimiter}; 17 use crate::{MemoryType, TableType, TagType}; 18 use wasmtime_environ::{MemoryIndex, TableIndex, TagIndex}; 19 20 pub async fn generate_memory_export( 21 store: &mut StoreOpaque, 22 limiter: Option<&mut StoreResourceLimiter<'_>>, 23 m: &MemoryType, 24 preallocation: Option<&SharedMemory>, 25 ) -> Result<ExportMemory> { 26 let id = store.id(); 27 let instance = create_memory(store, limiter, m, preallocation).await?; 28 Ok(store 29 .instance_mut(instance) 30 .get_exported_memory(id, MemoryIndex::from_u32(0))) 31 } 32 33 pub async fn generate_table_export( 34 store: &mut StoreOpaque, 35 limiter: Option<&mut StoreResourceLimiter<'_>>, 36 t: &TableType, 37 ) -> Result<crate::Table> { 38 let id = store.id(); 39 let instance = create_table(store, limiter, t).await?; 40 Ok(store 41 .instance_mut(instance) 42 .get_exported_table(id, TableIndex::from_u32(0))) 43 } 44 45 pub fn generate_tag_export(store: &mut StoreOpaque, t: &TagType) -> Result<crate::Tag> { 46 let id = store.id(); 47 let instance = create_tag(store, t)?; 48 Ok(store 49 .instance_mut(instance) 50 .get_exported_tag(id, TagIndex::from_u32(0))) 51 } 52