| line |
true |
false |
branch |
|
37
|
0 |
1221 |
ffi_abi = abi == -1 ? FFI_DEFAULT_ABI : abi; |
|
39
|
1534 |
1220 |
for(i=0,extra_arguments=0; i<(items-6); i++) |
|
43
|
1534 |
0 |
if(!(sv_isobject(arg) && sv_derived_from(arg, "FFI::Platypus::Type"))) |
|
|
0 |
1534 |
if(!(sv_isobject(arg) && sv_derived_from(arg, "FFI::Platypus::Type"))) |
|
47
|
1534 |
0 |
arg_type = INT2PTR(ffi_pl_type*, SvIV((SV*) SvRV(arg))); |
|
48
|
1 |
1533 |
if(arg_type->type_code == FFI_PL_TYPE_VOID) |
|
50
|
121 |
1412 |
if((arg_type->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_CUSTOM_PERL) |
|
56
|
0 |
1220 |
Newx(ffi_argument_types, items-6+extra_arguments, ffi_type*); |
|
63
|
1220 |
0 |
self->platypus_api = SvIV(*sv); |
|
70
|
1532 |
1220 |
for(i=0,n=0; i<(items-6); i++,n++) |
|
73
|
1532 |
0 |
self->argument_types[n] = INT2PTR(ffi_pl_type*, SvIV((SV*) SvRV(arg))); |
|
76
|
121 |
1411 |
if((self->argument_types[n]->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_CUSTOM_PERL |
|
77
|
4 |
117 |
&& self->argument_types[n]->extra[0].custom_perl.argument_count > 0) |
|
79
|
4 |
4 |
for(j=1; j-1 < self->argument_types[n]->extra[0].custom_perl.argument_count; j++) |
|
89
|
41 |
1491 |
if( |
|
90
|
27 |
14 |
(self->argument_types[n]->type_code & (FFI_PL_BASE_MASK|FFI_PL_SIZE_MASK)) == FFI_PL_TYPE_LONG_DOUBLE && |
|
91
|
9 |
18 |
((self->argument_types[n]->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_POINTER || |
|
100
|
2 |
21 |
if(!MY_CXT.loaded_math_longdouble) |
|
103
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
115
|
18 |
1202 |
if( |
|
124
|
2 |
16 |
if(!MY_CXT.loaded_math_longdouble) |
|
127
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
2 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
2 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
|
0 |
0 |
if(SvTRUE(ERRSV)) |
|
138
|
1190 |
30 |
if(var_fixed_args == -1) |
|
162
|
0 |
1220 |
if(ffi_status != FFI_OK) |
|
166
|
0 |
0 |
if(ffi_status == FFI_BAD_TYPEDEF) |
|
168
|
0 |
0 |
else if(ffi_status == FFI_BAD_ABI) |
|
206
|
867 |
0 |
if(!(sv_isobject(self) && sv_derived_from(self, "FFI::Platypus::Function"))) |
|
|
0 |
867 |
if(!(sv_isobject(self) && sv_derived_from(self, "FFI::Platypus::Function"))) |
|
209
|
867 |
0 |
f = INT2PTR(ffi_pl_function*, SvIV((SV*) SvRV(self))); |
|
210
|
866 |
1 |
is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) || |
|
|
0 |
866 |
is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) || |
|
213
|
0 |
867 |
if(path_name == NULL) |
|
216
|
751 |
116 |
if(proto == NULL) |
|
217
|
1 |
750 |
cv = newXS(perl_name, is_ret_rv ? ffi_pl_sub_call_rv : ffi_pl_sub_call, path_name); |
|
226
|
0 |
116 |
cv = newXSproto(perl_name, is_ret_rv ? ffi_pl_sub_call_rv : ffi_pl_sub_call, path_name, proto); |
|
250
|
24 |
0 |
f = INT2PTR(ffi_pl_function*, SvIV((SV*) SvRV(self))); |
|
252
|
23 |
1 |
is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) || |
|
|
0 |
23 |
is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) || |
|
255
|
1 |
23 |
cv = newXS(NULL, is_ret_rv ? ffi_pl_sub_call_rv : ffi_pl_sub_call, path_name); |
|
256
|
24 |
0 |
CvXSUBANY(cv).any_ptr = (void *) INT2PTR(ffi_pl_function*, SvIV((SV*) SvRV(self))); |
|
273
|
329 |
891 |
if(!PL_dirty) |
|
289
|
0 |
4 |
SvGETMAGIC(code); |
|
|
0 |
0 |
SvGETMAGIC(code); |