pub struct ModuleRef(/* private fields */);Expand description
Reference to a ModuleInstance.
This reference has a reference-counting semantics.
All ModuleInstance have strong references to it’s components (i.e.
globals, memories, funcs, tables), however, this components have
weak references to it’s containing module. This might be a problem
at execution time.
So if have to make sure that all modules which might be needed at execution time should be retained.
Methods from Deref<Target = ModuleInstance>§
Sourcepub fn globals(&self) -> Ref<'_, Vec<GlobalRef>>
pub fn globals(&self) -> Ref<'_, Vec<GlobalRef>>
Access all globals. This is a non-standard API so it’s unlikely to be portable to other engines.
Sourcepub fn invoke_export<E: Externals>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E,
) -> Result<Option<RuntimeValue>, Error>
pub fn invoke_export<E: Externals>( &self, func_name: &str, args: &[RuntimeValue], externals: &mut E, ) -> Result<Option<RuntimeValue>, Error>
Invoke exported function by a name.
This function finds exported function by a name, and calls it with provided arguments and external state.
§Errors
Returns Err if:
- there are no export with a given name or this export is not a function,
- given arguments doesn’t match to function signature,
- trap occurred at the execution time,
§Examples
Invoke a function that takes two numbers and returns sum of them.
assert_eq!(
instance.invoke_export(
"add",
&[RuntimeValue::I32(5), RuntimeValue::I32(3)],
&mut NopExternals,
).expect("failed to execute export"),
Some(RuntimeValue::I32(8)),
);Sourcepub fn invoke_export_with_stack<E: Externals>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E,
stack_recycler: &mut StackRecycler,
) -> Result<Option<RuntimeValue>, Error>
pub fn invoke_export_with_stack<E: Externals>( &self, func_name: &str, args: &[RuntimeValue], externals: &mut E, stack_recycler: &mut StackRecycler, ) -> Result<Option<RuntimeValue>, Error>
Sourcepub fn export_by_name(&self, name: &str) -> Option<ExternVal>
pub fn export_by_name(&self, name: &str) -> Option<ExternVal>
Find export by a name.
Returns None if there is no export with such name.
Trait Implementations§
Source§impl Deref for ModuleRef
impl Deref for ModuleRef
Source§type Target = ModuleInstance
type Target = ModuleInstance
Source§fn deref(&self) -> &ModuleInstance
fn deref(&self) -> &ModuleInstance
Source§impl ModuleImportResolver for ModuleRef
impl ModuleImportResolver for ModuleRef
Source§fn resolve_func(
&self,
field_name: &str,
_signature: &Signature,
) -> Result<FuncRef, Error>
fn resolve_func( &self, field_name: &str, _signature: &Signature, ) -> Result<FuncRef, Error>
Source§fn resolve_global(
&self,
field_name: &str,
_global_type: &GlobalDescriptor,
) -> Result<GlobalRef, Error>
fn resolve_global( &self, field_name: &str, _global_type: &GlobalDescriptor, ) -> Result<GlobalRef, Error>
Source§fn resolve_memory(
&self,
field_name: &str,
_memory_type: &MemoryDescriptor,
) -> Result<MemoryRef, Error>
fn resolve_memory( &self, field_name: &str, _memory_type: &MemoryDescriptor, ) -> Result<MemoryRef, Error>
Source§fn resolve_table(
&self,
field_name: &str,
_table_type: &TableDescriptor,
) -> Result<TableRef, Error>
fn resolve_table( &self, field_name: &str, _table_type: &TableDescriptor, ) -> Result<TableRef, Error>
Auto Trait Implementations§
impl Freeze for ModuleRef
impl !RefUnwindSafe for ModuleRef
impl !Send for ModuleRef
impl !Sync for ModuleRef
impl Unpin for ModuleRef
impl UnsafeUnpin for ModuleRef
impl !UnwindSafe for ModuleRef
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.