wasmer_vm/
imports.rs

1// This file contains code from external sources.
2// Attributions: https://github.com/wasmerio/wasmer/blob/main/docs/ATTRIBUTIONS.md
3
4use crate::vmcontext::{VMFunctionImport, VMGlobalImport, VMMemoryImport, VMTableImport};
5use wasmer_types::entity::{BoxedSlice, PrimaryMap};
6use wasmer_types::{FunctionIndex, GlobalIndex, MemoryIndex, TableIndex};
7
8/// Resolved import pointers.
9#[derive(Clone)]
10pub struct Imports {
11    /// Resolved addresses for imported functions.
12    pub functions: BoxedSlice<FunctionIndex, VMFunctionImport>,
13
14    /// Resolved addresses for imported tables.
15    pub tables: BoxedSlice<TableIndex, VMTableImport>,
16
17    /// Resolved addresses for imported memories.
18    pub memories: BoxedSlice<MemoryIndex, VMMemoryImport>,
19
20    /// Resolved addresses for imported globals.
21    pub globals: BoxedSlice<GlobalIndex, VMGlobalImport>,
22}
23
24impl Imports {
25    /// Construct a new `Imports` instance.
26    pub fn new(
27        function_imports: PrimaryMap<FunctionIndex, VMFunctionImport>,
28        table_imports: PrimaryMap<TableIndex, VMTableImport>,
29        memory_imports: PrimaryMap<MemoryIndex, VMMemoryImport>,
30        global_imports: PrimaryMap<GlobalIndex, VMGlobalImport>,
31    ) -> Self {
32        Self {
33            functions: function_imports.into_boxed_slice(),
34            tables: table_imports.into_boxed_slice(),
35            memories: memory_imports.into_boxed_slice(),
36            globals: global_imports.into_boxed_slice(),
37        }
38    }
39
40    /// Construct a new `Imports` instance with no imports.
41    pub fn none() -> Self {
42        Self {
43            functions: PrimaryMap::new().into_boxed_slice(),
44            tables: PrimaryMap::new().into_boxed_slice(),
45            memories: PrimaryMap::new().into_boxed_slice(),
46            globals: PrimaryMap::new().into_boxed_slice(),
47        }
48    }
49}