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.