File Coverage

Shareable.xs
Criterion Covered Total %
statement 16 16 100.0
branch 7 10 70.0
condition n/a
subroutine n/a
pod n/a
total 23 26 88.4


line stmt bran cond sub pod time code
1             #include "EXTERN.h"
2             #include "perl.h"
3             #include "XSUB.h"
4              
5             MODULE = IPC::Shareable PACKAGE = IPC::Shareable
6              
7             PROTOTYPES: DISABLE
8              
9             # XS version of _is_child()
10              
11             SV *
12             _is_child_xs(sv)
13             SV *sv
14             CODE:
15 1231 50         if (!sv || !SvROK(sv)) {
    100          
16 3           RETVAL = &PL_sv_undef;
17             }
18             else {
19 1228           SV *rv = SvRV(sv);
20 1228           MAGIC *mg = NULL;
21 1228           switch (SvTYPE(rv)) {
22 1207           case SVt_PVHV:
23             case SVt_PVAV:
24 1207           mg = mg_find(rv, PERL_MAGIC_tied);
25 1207           break;
26 19           case SVt_PVMG:
27 19           mg = mg_find(rv, PERL_MAGIC_tiedscalar);
28 19           break;
29 2           default:
30 2           break;
31             }
32 1228 100         if (mg && mg->mg_obj && sv_derived_from(mg->mg_obj, "IPC::Shareable")) {
    50          
    50          
33 1223           RETVAL = SvREFCNT_inc(mg->mg_obj);
34             }
35             else {
36 5           RETVAL = &PL_sv_undef;
37             }
38             }
39             OUTPUT:
40             RETVAL