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

Access all globals. This is a non-standard API so it’s unlikely to be portable to other engines.

Instantiate a module with given external values as imports.

See new for details.

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();

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)),
);

Invoke exported function by a name using recycled stacks.

Errors

Same as invoke_export.

Find export by a name.

Returns None if there is no export with such name.

Trait Implementations

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Convert from a value of T into an equivalent instance of Option<Self>. Read more

Consume self to return Some equivalent value of Option<T>. Read more

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

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

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

Performs the conversion.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Performs the conversion.

Cast reference.

Cast reference.

Cast mutable reference.

Cast mutable reference.

Get a reference to the inner from the outer.

Get a mutable reference to the inner from the outer.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

Convert from a value of T into an equivalent instance of Self. Read more

Consume self to return an equivalent value of T. Read more

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more

Checks if self is actually part of its subset T (and can be converted to it).

Use with care! Same as self.to_subset but without any property checks. Always succeeds.

The inclusion map: converts self to the equivalent element of its superset.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The counterpart to unchecked_from.

Consume self to return an equivalent value of T.

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