Branch Coverage

xs/Function.xs
Criterion Covered Total %
branch 55 76 72.3


line true false branch
37 0 1208 ffi_abi = abi == -1 ? FFI_DEFAULT_ABI : abi;
39 1522 1207 for(i=0,extra_arguments=0; i<(items-6); i++)
43 1522 0 if(!(sv_isobject(arg) && sv_derived_from(arg, "FFI::Platypus::Type")))
0 1522 if(!(sv_isobject(arg) && sv_derived_from(arg, "FFI::Platypus::Type")))
48 1 1521 if(arg_type->type_code == FFI_PL_TYPE_VOID)
50 121 1400 if((arg_type->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_CUSTOM_PERL)
70 1520 1207 for(i=0,n=0; i<(items-6); i++,n++)
76 121 1399 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++)
90 31 1489 (self->argument_types[n]->type_code & (FFI_PL_BASE_MASK|FFI_PL_SIZE_MASK)) == FFI_PL_TYPE_LONG_DOUBLE &&
91 20 11 ((self->argument_types[n]->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_POINTER ||
92 7 13 (self->argument_types[n]->type_code & FFI_PL_SHAPE_MASK) == FFI_PL_SHAPE_ARRAY)
100 2 16 if(!MY_CXT.loaded_math_longdouble)
103 2 0 if(SvTRUE(ERRSV))
2 0 if(SvTRUE(ERRSV))
116 13 1194 (return_type->type_code & (FFI_PL_BASE_MASK|FFI_PL_SIZE_MASK)) == FFI_PL_TYPE_LONG_DOUBLE
124 1 12 if(!MY_CXT.loaded_math_longdouble)
127 1 0 if(SvTRUE(ERRSV))
1 0 if(SvTRUE(ERRSV))
138 1177 30 if(var_fixed_args == -1)
162 0 1207 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 859 0 if(!(sv_isobject(self) && sv_derived_from(self, "FFI::Platypus::Function")))
0 859 if(!(sv_isobject(self) && sv_derived_from(self, "FFI::Platypus::Function")))
210 858 1 is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) ||
211 0 858 (f->return_type->type_code == (FFI_PL_TYPE_RECORD_VALUE | FFI_PL_SHAPE_CUSTOM_PERL));
213 0 859 if(path_name == NULL)
216 743 116 if(proto == NULL)
217 1 742 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);
252 23 1 is_ret_rv = (f->return_type->type_code == FFI_PL_TYPE_RECORD_VALUE) ||
253 0 23 (f->return_type->type_code == (FFI_PL_TYPE_RECORD_VALUE | FFI_PL_SHAPE_CUSTOM_PERL));
255 1 23 cv = newXS(NULL, is_ret_rv ? ffi_pl_sub_call_rv : ffi_pl_sub_call, path_name);
273 324 883 if(!PL_dirty)
289 0 4 SvGETMAGIC(code);
0 0 SvGETMAGIC(code);