Skip to main content

wasmtime/runtime/
trampoline.rs

1//! Utility module to create trampolines in/out WebAssembly module.
2
3mod global;
4mod memory;
5mod table;
6mod tag;
7
8pub use self::global::*;
9pub(crate) use memory::MemoryCreatorProxy;
10
11use self::memory::create_memory;
12use self::table::create_table;
13use self::tag::create_tag;
14use crate::prelude::*;
15use crate::runtime::vm::{ExportMemory, SharedMemory};
16use crate::store::{StoreOpaque, StoreResourceLimiter};
17use crate::{MemoryType, TableType, TagType};
18use wasmtime_environ::{MemoryIndex, TableIndex, TagIndex};
19
20pub 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
33pub 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
45pub 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}