1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use super::create_handle::create_handle; use crate::trampoline::StoreInstanceHandle; use crate::Store; use crate::{TableType, ValType}; use anyhow::{bail, Result}; use wasmtime_environ::entity::PrimaryMap; use wasmtime_environ::{wasm, Module}; pub fn create_handle_with_table(store: &Store, table: &TableType) -> Result<StoreInstanceHandle> { let mut module = Module::new(); let table = wasm::Table { wasm_ty: table.element().to_wasm_type(), minimum: table.limits().min(), maximum: table.limits().max(), ty: match table.element() { ValType::FuncRef => wasm::TableElementType::Func, ValType::ExternRef => wasm::TableElementType::Val(wasmtime_runtime::ref_type()), _ => bail!("cannot support {:?} as a table element", table.element()), }, }; let tunable = Default::default(); let table_plan = wasmtime_environ::TablePlan::for_table(table, &tunable); let table_id = module.table_plans.push(table_plan); module .exports .insert(String::new(), wasm::EntityIndex::Table(table_id)); create_handle(module, store, PrimaryMap::new(), Box::new(()), &[], None) }