File Coverage

XS.xs
Criterion Covered Total %
statement 39 39 100.0
branch 27 42 64.2
condition n/a
subroutine n/a
pod n/a
total 66 81 81.4


line stmt bran cond sub pod time code
1             #include
2             #ifdef TEST_FULL
3             # include "t/src/test.h"
4             #endif
5              
6             STATIC xs::payload_marker_t marker;
7              
8             MODULE = Panda::XS PACKAGE = Panda::XS
9             PROTOTYPES: DISABLE
10              
11             void sv_payload_attach (SV* sv, SV* payload) {
12 2           xs::sv_payload_detach(aTHX_ sv, &marker);
13 2           xs::sv_payload_attach(aTHX_ sv, payload, &marker);
14             }
15            
16             bool sv_payload_exists (SV* sv) {
17 5           RETVAL = xs::sv_payload_exists(aTHX_ sv, &marker);
18             }
19            
20             SV* sv_payload (SV* sv) {
21 3           RETVAL = xs::sv_payload_sv(aTHX_ sv, &marker);
22 3 50         if (!RETVAL) XSRETURN_UNDEF;
23 3           else SvREFCNT_inc_simple_void_NN(RETVAL);
24             }
25              
26             int sv_payload_detach (SV* sv) {
27 1           RETVAL = xs::sv_payload_detach(aTHX_ sv, &marker);
28             }
29              
30             void rv_payload_attach (SV* rv, SV* payload) {
31 2 50         if (!SvROK(rv)) croak("Panda::XS::rv_payload_attach: argument is not a reference");
32 2           xs::rv_payload_detach(aTHX_ rv, &marker);
33 2           xs::rv_payload_attach(aTHX_ rv, payload, &marker);
34             }
35            
36             bool rv_payload_exists (SV* rv) {
37 5 50         if (!SvROK(rv)) croak("Panda::XS::rv_payload_exists: argument is not a reference");
38 5           RETVAL = xs::rv_payload_exists(aTHX_ rv, &marker);
39             }
40            
41             SV* rv_payload (SV* rv) {
42 3 50         if (!SvROK(rv)) croak("Panda::XS::rv_payload: argument is not a reference");
43 3           RETVAL = xs::rv_payload_sv(aTHX_ rv, &marker);
44 3 50         if (!RETVAL) XSRETURN_UNDEF;
45 3           else SvREFCNT_inc_simple_void_NN(RETVAL);
46             }
47              
48             int rv_payload_detach (SV* rv) {
49 1 50         if (!SvROK(rv)) croak("Panda::XS::rv_payload_detach: argument is not a reference");
50 1           RETVAL = xs::rv_payload_detach(aTHX_ rv, &marker);
51             }
52              
53             void any_payload_attach (SV* sv, SV* payload) {
54 4 100         if (SvROK(sv)) {
55 2           xs::sv_payload_detach(aTHX_ SvRV(sv), &marker);
56 2           xs::sv_payload_attach(aTHX_ SvRV(sv), payload, &marker);
57             }
58             else {
59 2           xs::sv_payload_detach(aTHX_ sv, &marker);
60 2           xs::sv_payload_attach(aTHX_ sv, payload, &marker);
61             }
62             }
63            
64             bool any_payload_exists (SV* sv) {
65 10 100         if (SvROK(sv)) RETVAL = xs::sv_payload_exists(aTHX_ SvRV(sv), &marker);
66 5           else RETVAL = xs::sv_payload_exists(aTHX_ sv, &marker);
67             }
68            
69             SV* any_payload (SV* sv) {
70 3 100         if (SvROK(sv)) RETVAL = xs::sv_payload_sv(aTHX_ SvRV(sv), &marker);
71 1           else RETVAL = xs::sv_payload_sv(aTHX_ sv, &marker);
72              
73 3 50         if (!RETVAL) XSRETURN_UNDEF;
74 3           else SvREFCNT_inc_simple_void_NN(RETVAL);
75             }
76              
77             int any_payload_detach (SV* sv) {
78 2 100         if (SvROK(sv)) RETVAL = xs::sv_payload_detach(aTHX_ SvRV(sv), &marker);
79 1           else RETVAL = xs::sv_payload_detach(aTHX_ sv, &marker);
80             }
81              
82              
83             void obj2hv (SV* rv) {
84 3 50         if (!SvROK(rv)) croak("Panda::XS::obj2hv: argument is not a reference");
85 3           SV* obj = SvRV(rv);
86 3 100         if (SvOK(obj)) croak("Panda::XS::obj2hv: only references to undefs can be upgraded");
    50          
    50          
87 1 50         SvUPGRADE(obj, SVt_PVHV);
88             }
89              
90             void obj2av (SV* rv) {
91 2 50         if (!SvROK(rv)) croak("Panda::XS::obj2av: argument is not a reference");
92 2           SV* obj = SvRV(rv);
93 2 100         if (SvOK(obj)) croak("Panda::XS::obj2av: only references to undefs can be upgraded");
    50          
    50          
94 1 50         SvUPGRADE(obj, SVt_PVAV);
95             }
96              
97             #ifdef TEST_FULL
98              
99             INCLUDE: t/src/test.xsi
100              
101             #endif