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); |