File Coverage

blib/lib/Wasm/Wasmtime/ExportType.pm
Criterion Covered Total %
statement 21 21 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 29 29 100.0


line stmt bran cond sub pod time code
1             package Wasm::Wasmtime::ExportType;
2              
3 22     22   226073 use strict;
  22         52  
  22         668  
4 22     22   115 use warnings;
  22         46  
  22         523  
5 22     22   353 use 5.008004;
  22         75  
6 22     22   139 use Ref::Util qw( is_blessed_ref );
  22         98  
  22         1181  
7 22     22   557 use Wasm::Wasmtime::FFI;
  22         46  
  22         2236  
8 22     22   594 use Wasm::Wasmtime::ExternType;
  22         52  
  22         9716  
9              
10             # ABSTRACT: Wasmtime export type class
11             our $VERSION = '0.21'; # VERSION
12              
13              
14             $ffi_prefix = 'wasm_exporttype_';
15             $ffi->load_custom_type('::PtrObject' => 'wasm_exporttype_t' => __PACKAGE__);
16              
17              
18             $ffi->attach( new => ['wasm_byte_vec_t*', 'opaque'] => 'wasm_exporttype_t' => sub {
19             my $xsub = shift;
20             my $class = shift;
21              
22             # not sure this is actually useful...
23             if(defined $_[1] && is_blessed_ref $_[1] && $_[1]->isa('Wasm::Wasmtime::ExternType'))
24             {
25             my $name = Wasm::Wasmtime::ByteVec->new(shift);
26             my $externtype = shift;
27             my $self = $xsub->($name, $externtype->{ptr});
28             $name->delete;
29             return $self;
30             }
31             else
32             {
33             my ($ptr,$owner) = @_;
34             return bless {
35             ptr => $ptr,
36             owner => $owner,
37             }, $class;
38             }
39             });
40              
41              
42             $ffi->attach( name => ['wasm_exporttype_t'] => 'wasm_byte_vec_t*' => sub {
43             my($xsub, $self) = @_;
44             my $name = $xsub->($self);
45             $name->get;
46             });
47              
48              
49             $ffi->attach( type => ['wasm_exporttype_t'] => 'wasm_externtype_t' => sub {
50             my($xsub, $self) = @_;
51             my $type = $xsub->($self);
52             $type->{owner} = $self->{owner} || $self;
53             $type;
54             });
55              
56              
57             sub to_string
58             {
59 3     3 1 280 my($self) = @_;
60 3         11 my $kind = $self->type->kind;
61 3         10 $kind =~ s/type$//;
62             # TODO: escape strings ?
63 3         12 sprintf '(%s (export "%s") %s)', $kind, $self->name, $self->type->to_string;
64             }
65              
66             _generate_destroy();
67             _generate_vec_class();
68              
69             1;
70              
71             __END__