Branch Coverage

xs/Function.xs
Criterion Covered Total %
branch 84 226 37.1


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