NAME
Wasm::Wasmer::Module
SYNOPSIS
my
$module
= Wasm::Wasmer::Module->new(
$wasm_bin
);
… or, to use a pre-built Wasm::Wasmer::Store instance:
my
$module
= Wasm::Wasmer::Module->new(
$wasm_bin
,
$store
);
… then:
my
$instance
=
$module
->create_instance();
… or, for WASI:
my
$wasi
=
$module
->store()->create_wasi( .. );
my
$instance
=
$module
->create_wasi_instance(
$wasi
);
You can also specify imports; see below.
DESCRIPTION
This class represents a parsed WebAssembly module.
See Wasmer’s documentation for a bit more context.
METHODS
$obj = CLASS->new( $WASM_BIN [, $STORE ] )
Parses a WebAssembly module in binary (.wasm
) format and returns a CLASS instance representing that.
(To use text/.wat
format instead, see Wasm::Wasmer’s wat2wasm()
.)
Optionally associates the parse of that module with a Wasm::Wasmer::Store instance.
$instance = OBJ->create_instance( [ \%IMPORTS ] )
Creates a Wasm::Wasmer::Instance instance from OBJ with the (optional) given %IMPORTS. (NB: %IMPORTS is given via reference.)
%IMPORTS is an optional hash-of-hashrefs that describes the set of imports to give to the new instance.
Here’s a simple example that gives a function ns
.give2
to WebAssembly that just returns the number 2:
my
$instance
=
$module
->create_instance(
{
ns
=> {
give2
=>
sub
{ 2 },
},
},
);
Other import types are rather more complex because they’re interactive; thus, you have to create them prior to calling create_instance()
and include your import objects in %IMPORTS.
my
$const
=
$module
->store()->create_i32_const( 42 );
my
$var
=
$module
->store()->create_f64_mut( 2.718281828 );
my
$memory
=
$module
->store()->create_memory(
initial
=> 3 );
(Tables are currently unsupported.)
So, if we alter our above example to import our constants and memory as well as the function, we have:
my
$instance
=
$module
->create_instance(
{
ns
=> {
give2
=>
sub
{ 2 },
# These values are all pre-created objects:
constvar
=>
$const
,
mutvar
=>
$mut
,
memory
=>
$memory
,
},
},
);
NB: Instances can share imports, even if they’re instances of different WASM modules.
$instance = OBJ->create_wasi_instance( $WASI, [ \%IMPORTS ] )
Creates a Wasm::Wasmer::Instance instance from OBJ. That object’s WebAssembly imports will include the WASI interface.
$WASI argument is either undef or a Wasm::Wasmer::WASI instance. Undef is equivalent to $self->store()->create_wasi()
.
The optional %IMPORTS reference (reference!) is as for create_instance()
. Note that you can override WASI imports with this, if you so desire.
$global = OBJ->create_global( $VALUE )
Creates a Wasm::Wasmer::Import::Global instance. See that module’s documentation for more details.
$global = OBJ->create_memory()
Creates a Wasm::Wasmer::Import::Memory instance. See that module’s documentation for more details. Currently this accepts no parameters; instead it conforms to the WASM module’s needs.
$bytes = OBJ->serialize()
Serializes the in-memory module for later use. (cf. deserialize()
below)
$store = OBJ->store()
Returns OBJ’s underlying Wasm::Wasmer::Store instance.
STATIC FUNCTIONS
$module = deserialize( $SERIALIZED_BIN [, $STORE ] )
Like this class’s new()
method but takes a serialized module rather than WASM code.
$yn = validate( $WASM_BIN [, $STORE ] )
Like this class’s new()
but just returns a boolean to indicate whether $WASM_BIN represents a valid module.