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 crate::VMTagImport;
6use wasmer_types::entity::{BoxedSlice, PrimaryMap};
7use wasmer_types::{FunctionIndex, GlobalIndex, MemoryIndex, TableIndex, TagIndex};
8
9/// Resolved import pointers.
10#[derive(Clone)]
11pub struct Imports {
12    /// Resolved addresses for imported functions.
13    pub functions: BoxedSlice<FunctionIndex, VMFunctionImport>,
14
15    /// Resolved addresses for imported tables.
16    pub tables: BoxedSlice<TableIndex, VMTableImport>,
17
18    /// Resolved addresses for imported memories.
19    pub memories: BoxedSlice<MemoryIndex, VMMemoryImport>,
20
21    /// Resolved addresses for imported memories.
22    pub tags: BoxedSlice<TagIndex, VMTagImport>,
23
24    /// Resolved addresses for imported globals.
25    pub globals: BoxedSlice<GlobalIndex, VMGlobalImport>,
26}
27
28impl Imports {
29    /// Construct a new `Imports` instance.
30    pub fn new(
31        function_imports: PrimaryMap<FunctionIndex, VMFunctionImport>,
32        table_imports: PrimaryMap<TableIndex, VMTableImport>,
33        memory_imports: PrimaryMap<MemoryIndex, VMMemoryImport>,
34        tag_imports: PrimaryMap<TagIndex, VMTagImport>,
35        global_imports: PrimaryMap<GlobalIndex, VMGlobalImport>,
36    ) -> Self {
37        Self {
38            functions: function_imports.into_boxed_slice(),
39            tables: table_imports.into_boxed_slice(),
40            memories: memory_imports.into_boxed_slice(),
41            tags: tag_imports.into_boxed_slice(),
42            globals: global_imports.into_boxed_slice(),
43        }
44    }
45
46    /// Construct a new `Imports` instance with no imports.
47    pub fn none() -> Self {
48        Self {
49            functions: PrimaryMap::new().into_boxed_slice(),
50            tables: PrimaryMap::new().into_boxed_slice(),
51            memories: PrimaryMap::new().into_boxed_slice(),
52            globals: PrimaryMap::new().into_boxed_slice(),
53            tags: PrimaryMap::new().into_boxed_slice(),
54        }
55    }
56}