wasmtime: Refactor how imports are resolved (#2102)
This commit removes all import resolution handling from the `wasmtime-jit` crate, instead moving the logic to the `wasmtime` crate. Previously `wasmtime-jit` had a generic `Resolver` trait and would do all the import type matching itself, but with the upcoming module-linking implementation this is going to get much trickier. The goal of this commit is to centralize all meaty "preparation" logic for instantiation into one location, probably the `wasmtime` crate itself. Instantiation will soon involve recursive instantiation and management of alias definitions as well. Having everything in one location, especially with access to `Store` so we can persist instances for safety, will be quite convenient. Additionally the `Resolver` trait isn't really necessary any more since imports are, at the lowest level, provided as a list rather than a map of some kind. More generic resolution functionality is provided via `Linker` or user layers on top of `Instance::new` itself. This makes matching up provided items to expected imports much easier as well. Overall this is largely just moving code around, but most of the code in the previous `resolve_imports` phase can be deleted since a lot of it is handled by surrounding pieces of `wasmtime` as well.
This commit is contained in:
@@ -897,28 +897,36 @@ impl InstanceHandle {
|
||||
};
|
||||
let instance = handle.instance();
|
||||
|
||||
debug_assert_eq!(vmshared_signatures.len(), handle.module().signatures.len());
|
||||
ptr::copy(
|
||||
vmshared_signatures.values().as_slice().as_ptr(),
|
||||
instance.signature_ids_ptr() as *mut VMSharedSignatureIndex,
|
||||
vmshared_signatures.len(),
|
||||
);
|
||||
debug_assert_eq!(imports.functions.len(), handle.module().num_imported_funcs);
|
||||
ptr::copy(
|
||||
imports.functions.values().as_slice().as_ptr(),
|
||||
imports.functions.as_ptr(),
|
||||
instance.imported_functions_ptr() as *mut VMFunctionImport,
|
||||
imports.functions.len(),
|
||||
);
|
||||
debug_assert_eq!(imports.tables.len(), handle.module().num_imported_tables);
|
||||
ptr::copy(
|
||||
imports.tables.values().as_slice().as_ptr(),
|
||||
imports.tables.as_ptr(),
|
||||
instance.imported_tables_ptr() as *mut VMTableImport,
|
||||
imports.tables.len(),
|
||||
);
|
||||
debug_assert_eq!(
|
||||
imports.memories.len(),
|
||||
handle.module().num_imported_memories
|
||||
);
|
||||
ptr::copy(
|
||||
imports.memories.values().as_slice().as_ptr(),
|
||||
imports.memories.as_ptr(),
|
||||
instance.imported_memories_ptr() as *mut VMMemoryImport,
|
||||
imports.memories.len(),
|
||||
);
|
||||
debug_assert_eq!(imports.globals.len(), handle.module().num_imported_globals);
|
||||
ptr::copy(
|
||||
imports.globals.values().as_slice().as_ptr(),
|
||||
imports.globals.as_ptr(),
|
||||
instance.imported_globals_ptr() as *mut VMGlobalImport,
|
||||
imports.globals.len(),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user