use crate::instance::InstanceHandle; use crate::vmcontext::{VMFunctionImport, VMGlobalImport, VMMemoryImport, VMTableImport}; use cranelift_entity::{BoxedSlice, PrimaryMap}; use cranelift_wasm::{FuncIndex, GlobalIndex, MemoryIndex, TableIndex}; use std::collections::HashSet; /// Resolved import pointers. #[derive(Clone)] pub struct Imports { /// The set of instances that the imports depend on. pub dependencies: HashSet, /// Resolved addresses for imported functions. pub functions: BoxedSlice, /// Resolved addresses for imported tables. pub tables: BoxedSlice, /// Resolved addresses for imported memories. pub memories: BoxedSlice, /// Resolved addresses for imported globals. pub globals: BoxedSlice, } impl Imports { /// Construct a new `Imports` instance. pub fn new( dependencies: HashSet, function_imports: PrimaryMap, table_imports: PrimaryMap, memory_imports: PrimaryMap, global_imports: PrimaryMap, ) -> Self { Self { dependencies, functions: function_imports.into_boxed_slice(), tables: table_imports.into_boxed_slice(), memories: memory_imports.into_boxed_slice(), globals: global_imports.into_boxed_slice(), } } /// Construct a new `Imports` instance with no imports. pub fn none() -> Self { Self { dependencies: HashSet::new(), functions: PrimaryMap::new().into_boxed_slice(), tables: PrimaryMap::new().into_boxed_slice(), memories: PrimaryMap::new().into_boxed_slice(), globals: PrimaryMap::new().into_boxed_slice(), } } }