| 23 | |
| 24 | #[unsafe(no_mangle)] |
| 25 | pub unsafe extern "C" fn wasm_instance_new( |
| 26 | store: &mut wasm_store_t, |
| 27 | wasm_module: &wasm_module_t, |
| 28 | imports: *const wasm_extern_vec_t, |
| 29 | result: Option<&mut *mut wasm_trap_t>, |
| 30 | ) -> Option<Box<wasm_instance_t>> { |
| 31 | let imports = (*imports) |
| 32 | .as_slice() |
| 33 | .iter() |
| 34 | .filter_map(|import| match import { |
| 35 | Some(i) => Some(i.which.clone()), |
| 36 | None => None, |
| 37 | }) |
| 38 | .collect::<Vec<_>>(); |
| 39 | match Instance::new(store.store.context_mut(), &wasm_module.module, &imports) { |
| 40 | Ok(instance) => Some(Box::new(wasm_instance_t::new( |
| 41 | store.store.clone(), |
| 42 | instance, |
| 43 | ))), |
| 44 | Err(e) => { |
| 45 | if let Some(ptr) = result { |
| 46 | *ptr = Box::into_raw(Box::new(wasm_trap_t::new(e))); |
| 47 | } |
| 48 | None |
| 49 | } |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | #[unsafe(no_mangle)] |
| 54 | pub unsafe extern "C" fn wasm_instance_exports( |