🌻 📖 Wasm::Wasmtime::Caller

NAME

Wasm::Wasmtime::Caller - Wasmtime caller interface

VERSION

version 0.24

SYNOPSIS

 use Wasm::Wasmtime;
 use Wasm::Wasmtime::Caller qw( wasmtime_caller );
 
 {
   # this just uses Platypus to create a utility function
   # to convert a pointer to a C string into a Perl string.
   use FFI::Platypus 2.00;
   my $ffi = FFI::Platypus->new( api => 2 );
   $ffi->attach_cast( 'cstring' => 'opaque' => 'string' );
 }
 
 sub print_wasm_string
 {
   my $ptr = shift;
   my $caller = wasmtime_caller;
   my $memory = $caller->export_get('memory');
   print cstring($ptr + $memory->data);
 }
 
 my $store = Wasm::Wasmtime::Store->new;
 my $instance = Wasm::Wasmtime::Instance->new(
   Wasm::Wasmtime::Module->new($store->engine, wat => q{
     (module
       (import "" "print_wasm_string" (func $print_wasm_string (param i32)))
       (func (export "run")
         i32.const 0
         call $print_wasm_string
       )
       (memory (export "memory") 1)
       (data (i32.const 0) "Hello, world!\n\00")
     )
   }),
   $store,
   [\&print_wasm_string],
 );
 
 $instance->exports->run->();

DESCRIPTION

This class represents the caller's context when calling a Perl Wasm::Wasmtime::Func from WebAssembly. The primary purpose of this structure is to provide access to the caller's exported memory.

FUNCTIONS

wasmtime_caller

 my $caller = wasmtime_caller;
 my $caller = wasmtime_caller $index;

Returns the current caller context (an instance of Wasm::Wasmtime::Caller), or undef if the current Perl code wasn't called from WebAssembly. $index indicates how many WebAssembly call frames to go back.

This function is exported by default.

METHODS

export_get

 my $extern = $caller->export_get($name);

Returns the Wasm::Wasmtime::Extern for the named export $name. As of this writing only Wasm::Wasmtime::Memory exports are supported by Wasmtime here.

store

 my $store = $caller->store;

Returns the Wasm::Wasmtime::Store the caller belongs to.

SEE ALSO

Wasm
Wasm::Wasmtime

AUTHOR

Graham Ollis <plicease@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2020-2026 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.