mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-07 13:18:20 +00:00
feat(c-api) Update wasi_get_imports to use a wasm_extern_vec_t…
… so that it matches the definition of `wasm_instance_new`, which is much simpler and consistent.
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
mod capture_files;
|
mod capture_files;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
externals::{wasm_extern_t, wasm_func_t, wasm_memory_t},
|
externals::{wasm_extern_t, wasm_extern_vec_t, wasm_func_t, wasm_memory_t},
|
||||||
instance::wasm_instance_t,
|
instance::wasm_instance_t,
|
||||||
module::wasm_module_t,
|
module::wasm_module_t,
|
||||||
store::wasm_store_t,
|
store::wasm_store_t,
|
||||||
@@ -243,7 +243,7 @@ pub unsafe extern "C" fn wasi_get_imports(
|
|||||||
store: &wasm_store_t,
|
store: &wasm_store_t,
|
||||||
module: &wasm_module_t,
|
module: &wasm_module_t,
|
||||||
wasi_env: &wasi_env_t,
|
wasi_env: &wasi_env_t,
|
||||||
imports: *mut *mut wasm_extern_t,
|
imports: &mut wasm_extern_vec_t,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
wasi_get_imports_inner(store, module, wasi_env, imports).is_some()
|
wasi_get_imports_inner(store, module, wasi_env, imports).is_some()
|
||||||
}
|
}
|
||||||
@@ -253,7 +253,7 @@ unsafe fn wasi_get_imports_inner(
|
|||||||
store: &wasm_store_t,
|
store: &wasm_store_t,
|
||||||
module: &wasm_module_t,
|
module: &wasm_module_t,
|
||||||
wasi_env: &wasi_env_t,
|
wasi_env: &wasi_env_t,
|
||||||
imports: *mut *mut wasm_extern_t,
|
imports: &mut wasm_extern_vec_t,
|
||||||
) -> Option<()> {
|
) -> Option<()> {
|
||||||
let store = &store.inner;
|
let store = &store.inner;
|
||||||
|
|
||||||
@@ -265,22 +265,28 @@ unsafe fn wasi_get_imports_inner(
|
|||||||
|
|
||||||
let import_object = generate_import_object_from_env(store, wasi_env.inner.clone(), version);
|
let import_object = generate_import_object_from_env(store, wasi_env.inner.clone(), version);
|
||||||
|
|
||||||
for (i, it) in module.inner.imports().enumerate() {
|
*imports = module
|
||||||
let export = c_try!(import_object
|
.inner
|
||||||
.resolve_by_name(it.module(), it.name())
|
.imports()
|
||||||
.ok_or_else(|| CApiError {
|
.map(|import_type| {
|
||||||
msg: format!(
|
let export = c_try!(import_object
|
||||||
"Failed to resolve import \"{}\" \"{}\"",
|
.resolve_by_name(import_type.module(), import_type.name())
|
||||||
it.module(),
|
.ok_or_else(|| CApiError {
|
||||||
it.name()
|
msg: format!(
|
||||||
),
|
"Failed to resolve import \"{}\" \"{}\"",
|
||||||
}));
|
import_type.module(),
|
||||||
let inner = Extern::from_export(store, export);
|
import_type.name()
|
||||||
*imports.add(i) = Box::into_raw(Box::new(wasm_extern_t {
|
),
|
||||||
instance: None,
|
}));
|
||||||
inner,
|
let inner = Extern::from_export(store, export);
|
||||||
}));
|
|
||||||
}
|
Some(Box::new(wasm_extern_t {
|
||||||
|
instance: None,
|
||||||
|
inner,
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
.collect::<Option<Vec<_>>>()?
|
||||||
|
.into();
|
||||||
|
|
||||||
Some(())
|
Some(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user