Wasm::Wasmtime::Func - Wasmtime function class
version 0.23
# Call a wasm function from Perl use Wasm::Wasmtime; my $store = Wasm::Wasmtime::Store->new; my $module = Wasm::Wasmtime::Module->new( $store->engine, wat => q{ (module (func (export "add") (param i32 i32) (result i32) local.get 0 local.get 1 i32.add) ) }); my $instance = Wasm::Wasmtime::Instance->new($module, $store); my $add = $instance->exports->add; print $add->call(1,2), "\n"; # 3 # Call Perl from Wasm use Wasm::Wasmtime; my $store = Wasm::Wasmtime::Store->new; my $module = Wasm::Wasmtime::Module->new( $store->engine, wat => q{ (module (func $hello (import "" "hello")) (func (export "run") (call $hello)) ) }); my $hello = Wasm::Wasmtime::Func->new( $store, Wasm::Wasmtime::FuncType->new([],[]), sub { print "hello world!\n" }, ); my $instance = Wasm::Wasmtime::Instance->new($module, $store, [$hello]); $instance->exports->run->call(); # hello world!
WARNING: WebAssembly and Wasmtime are a moving target and the interface for these modules is under active development. Use with caution.
This class represents a function, and can be used to either call a WebAssembly function from Perl, or to create a callback for calling a Perl function from WebAssembly.
my $func = Wasm::Wasmtime::Func->new( $store, # Wasm::Wasmtime::Store \@params, \@results, # array reference for function signature \&callback, # code reference ); my $func = Wasm::Wasmtime::Func->new( $store, # Wasm::Wasmtime::Store $functype, # Wasm::Wasmtime::FuncType \&callback, # code reference );
Creates a function instance, which can be used to call Perl from WebAssembly. See Wasm::Wasmtime::FuncType for details on how to specify the function signature.
my @results = $func->call(@params); my @results = $func->(@params);
Calls the function instance. This can be used to call either Perl functions created with new
as above, or call WebAssembly functions from Perl. As a convenience you can call the function by using the function instance like a code reference.
If there is a trap during the call it will throw an exception. In list context all of the results are returned as a list. In scalar context just the first result (if any) is returned.
$func->attach($name); $func->attach($package, $name);
Attach the function as a Perl subroutine. If $package
is not specified, then the caller's package will be used.
my $functype = $func->type;
Returns the Wasm::Wasmtime::FuncType instance which includes the function signature.
my $num = $func->param_arity;
Returns the number of arguments the function takes.
my $num = $func->param_arity;
Returns the number of results the function returns.
Graham Ollis <plicease@cpan.org>
This software is copyright (c) 2020-2022 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.