pub struct Function;
Expand description

Represents a WebAssembly function instance.

A function instance is the runtime representation of a function. It effectively is a closure of the original function (defined in either the host or the WebAssembly module) over the runtime Instance of its originating Module.

The module instance is used to resolve references to other definitions during executing of the function.

Specification: https://webassembly.github.io/spec/core/exec/runtime.html#function-instances

Note that the function can be invoked/called by the host only when it is an exported function (see Exports to see an example).

Example

To build a Function, we need its type. Function understands Symbol, Proc, and Lambda.

First, a function through a symbol:

def foo(x)
  x + 1
end

function = Wasmer::Function.new(
  Wasmer::Store.new,
  # A symbol.
  method(:foo),
  Wasmer::FunctionType.new([Wasmer::Type::I32], [])
)

Second, a function through a proc as a lambda:

function = Wasmer::Function.new(
  Wasmer::Store.new,
  # A lambda.
  -> (x) { x + 1 },
  Wasmer::FunctionType.new([Wasmer::Type::I32], [])
)

Third, a function through a proc:

function = Wasmer::Function.new(
  Wasmer::Store.new,
  # A proc.
  Proc.new { |x| x + 1 },
  Wasmer::FunctionType.new([Wasmer::Type::I32], [])
)

Implementations§

source§

impl Function

source

pub fn new(store: Store, function: Any, function_type: FunctionType) -> Self

Creates a new Function. The function can be of kind Symbol, Proc or Lambda.

source

pub fn call(x0: Any, x1: Any, x2: Any, etc: Any) -> Any

Calls the function with arguments. It returns zero or more results.

source

pub fn type(&self) -> FunctionType

Returns the function type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

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

fn in_current_span(self) -> Instrumented<Self>

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

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.