FFI-TinyCC
view release on metacpan or search on metacpan
lib/FFI/TinyCC.pm view on Meta::CPAN
);
$ffi->custom_type( tcc_t => {
perl_to_native => sub {
$_[0]->{handle},
},
native_to_perl => sub {
{
handle => $_[0],
relocate => 0,
error => [],
};
},
});
do {
my %output_type = qw(
memory 0
exe 1
lib/FFI/TinyCC.pm view on Meta::CPAN
};
$ffi->type('int' => 'error_t');
$ffi->type('(opaque,string)->void' => 'error_handler_t');
$ffi->attach([tcc_new => '_new'] => [] => 'tcc_t');
$ffi->attach([tcc_delete => '_delete'] => ['tcc_t'] => 'void');
$ffi->attach([tcc_set_error_func => '_set_error_func'] => ['tcc_t', 'opaque', 'error_handler_t'] => 'void');
$ffi->attach([tcc_add_symbol => '_add_symbol'] => ['tcc_t', 'string', 'opaque'] => 'int');
$ffi->attach([tcc_get_symbol => '_get_symbol'] => ['tcc_t', 'string'] => 'opaque');
$ffi->attach([tcc_relocate => '_relocate'] => ['tcc_t', 'opaque'] => 'int');
$ffi->attach([tcc_run => '_run'] => ['tcc_t', 'int', 'opaque'] => 'int');
sub _method ($;@)
{
my($name, @args) = @_;
$ffi->attach(["tcc_$name" => "_$name"] => ['tcc_t', @args] => 'error_t');
eval '# line '. __LINE__ . ' "' . __FILE__ . qq("\n) .qq{
sub $name
{
my \$r = _$name (\@_);
lib/FFI/TinyCC.pm view on Meta::CPAN
_method add_library => qw( string );
_method add_library_path => qw( string );
sub run
{
my($self, @args) = @_;
croak "unable to use run method after get_symbol" if $self->{relocate};
my $argc = scalar @args;
my @c_strings = map { "$_\0" } @args;
my $ptrs = pack 'P' x $argc, @c_strings;
my $argv = unpack('L!', pack('P', $ptrs));
my $r = _run($self, $argc, $argv);
die FFI::TinyCC::Exception->new($self) if $r == -1;
$r;
}
sub get_symbol
{
my($self, $symbol_name) = @_;
unless($self->{relocate})
{
my $size = _relocate($self, undef);
$self->{store} = malloc($size);
my $r = _relocate($self, $self->{store});
die FFI::TinyCC::Exception->new($self) if $r == -1;
$self->{relocate} = 1;
}
_get_symbol($self, $symbol_name);
}
_method output_file => qw( string );
package
FFI::TinyCC::Exception;
( run in 1.345 second using v1.01-cache-2.11-cpan-71847e10f99 )