Struct substrate_test_runtime_client::sc_executor::wasmi::ModuleInstance [−]
pub struct ModuleInstance { /* fields omitted */ }
Expand description
A module instance is the runtime representation of a module.
It is created by instantiating a module, and collects runtime representations of all entities that are imported or defined by the module, namely:
In order to instantiate a module you need to provide entities to satisfy every module’s imports (i.e. wasm modules don’t have optional imports).
After module is instantiated you can start invoking it’s exported functions with invoke_export
.
Implementations
impl ModuleInstance
impl ModuleInstance
Access all globals. This is a non-standard API so it’s unlikely to be portable to other engines.
pub fn with_externvals<'i, I>(
loaded_module: &'a Module,
extern_vals: I
) -> Result<NotStartedModuleRef<'a>, Error> where
I: Iterator<Item = &'i ExternVal>,
pub fn with_externvals<'i, I>(
loaded_module: &'a Module,
extern_vals: I
) -> Result<NotStartedModuleRef<'a>, Error> where
I: Iterator<Item = &'i ExternVal>,
Instantiate a module with given external values as imports.
See new for details.
pub fn new<I>(
loaded_module: &'m Module,
imports: &I
) -> Result<NotStartedModuleRef<'m>, Error> where
I: ImportResolver,
pub fn new<I>(
loaded_module: &'m Module,
imports: &I
) -> Result<NotStartedModuleRef<'m>, Error> where
I: ImportResolver,
Instantiate a module.
Note that in case of successful instantiation this function returns a reference to
a module which start
function is not called.
In order to complete instantiatiation start
function must be called. However, there are
situations where you might need to do additional setup before calling start
function.
For such sitations this separation might be useful.
See NotStartedModuleRef
for details.
Errors
Returns Err
if the module cannot be instantiated.
This can happen if one of the imports can’t
be satisfied (e.g module isn’t registered in imports
resolver) or
there is a mismatch between requested import and provided (e.g. module requested memory with no
maximum size limit, however, was provided memory with the maximum size limit).
Examples
use wasmi::{ModuleInstance, ImportsBuilder, NopExternals}; // ModuleInstance::new returns instance which `start` function isn't called. let not_started = ModuleInstance::new( &module, &ImportsBuilder::default() )?; // Call `start` function if any. let instance = not_started.run_start(&mut NopExternals)?;
If you sure that the module doesn’t have start
function you can use assert_no_start
to get
instantiated module without calling start
function.
use wasmi::{ModuleInstance, ImportsBuilder, NopExternals}; // This will panic if the module actually contain `start` function. let not_started = ModuleInstance::new( &module, &ImportsBuilder::default() )?.assert_no_start();
pub fn invoke_export<E>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E
) -> Result<Option<RuntimeValue>, Error> where
E: Externals,
pub fn invoke_export<E>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E
) -> Result<Option<RuntimeValue>, Error> where
E: Externals,
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)), );
pub fn invoke_export_with_stack<E>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E,
stack_recycler: &mut StackRecycler
) -> Result<Option<RuntimeValue>, Error> where
E: Externals,
pub fn invoke_export_with_stack<E>(
&self,
func_name: &str,
args: &[RuntimeValue],
externals: &mut E,
stack_recycler: &mut StackRecycler
) -> Result<Option<RuntimeValue>, Error> where
E: Externals,
pub 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
Auto Trait Implementations
impl !RefUnwindSafe for ModuleInstance
impl !Send for ModuleInstance
impl !Sync for ModuleInstance
impl Unpin for ModuleInstance
impl !UnwindSafe for ModuleInstance
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
Convert 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
. Read more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
type Output = T
type Output = T
Should always be Self
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
impl<T> MaybeDebug for T where
T: Debug,
impl<T> MaybeDebug for T where
T: Debug,