ExtUtils-XSpp
view release on metacpan or search on metacpan
lib/ExtUtils/XSpp/Node/Function.pm view on Meta::CPAN
# special case: constructors with name different from 'new'
# need to be declared 'static' in XS
if( $this->isa( 'ExtUtils::XSpp::Node::Constructor' ) &&
$this->perl_name ne $this->cpp_name ) {
$retstr = "static $retstr";
}
my $has_ret = $ret_typemap && !$ret_typemap->type->is_void;
my $ppcode = $has_ret && $ret_typemap->output_list( '' ) ? 1 : 0;
my $code_type = $ppcode ? "PPCODE" : "CODE";
my $ccode = $this->_call_code( $call_arg_list );
if ($this->{CALL_CODE}) {
$ccode = join( "\n", @{$this->{CALL_CODE}} );
} elsif ($this->isa('ExtUtils::XSpp::Node::Destructor')) {
$ccode = 'delete THIS';
$has_ret = 0;
} elsif( $has_ret && defined $ret_typemap->call_function_code( '', '' ) ) {
$ccode = $ret_typemap->call_function_code( $ccode, 'RETVAL' );
} elsif( $has_ret ) {
if ($has_aliases) {
t/080_complex_typemap.t view on Meta::CPAN
--- expected
# XSP preamble
MODULE=Foo
MODULE=Foo PACKAGE=Foo
int
Foo::foo( int a, int b )
PPCODE:
try {
RETVAL = THIS->foo( a, b );
PUTBACK; XPUSHi( RETVAL ); SPAGAIN ;
}
catch (std::exception& e) {
croak("Caught C++ exception of type or derived from 'std::exception': %s", e.what());
}
catch (...) {
croak("Caught C++ exception of unknown type");
}
( run in 0.808 second using v1.01-cache-2.11-cpan-5511b514fd6 )