File Coverage

util.c
Criterion Covered Total %
statement 12 55 21.8
branch 4 152 2.6
condition n/a
subroutine n/a
pod n/a
total 16 207 7.7


line stmt bran cond sub pod time code
1             #define PERL_NO_GET_CONTEXT /* we want efficiency */
2              
3             #include "util.h"
4              
5 0           void dump_value(pTHX_ SV* val, Buffer* buf)
6             {
7 0 0         if (!val) {
8 0           return;
9             }
10              
11 0 0         if (SvIOK(val)) {
12             char str[50];
13 0 0         int len = sprintf(str, "%ld", (long) SvIV(val));
14 0 0         buffer_append(buf, str, len);
    0          
    0          
    0          
    0          
15 0 0         } else if (SvNOK(val)) {
16             char str[50];
17 0 0         int len = sprintf(str, "%lf", (double) SvNV(val));
18 0 0         buffer_append(buf, str, len);
    0          
    0          
    0          
    0          
19 0 0         } else if (SvPOK(val)) {
20             STRLEN len;
21 0 0         char* str = SvPV(val, len);
22 0 0         buffer_append(buf, "\"", 1);
    0          
    0          
    0          
23 0 0         buffer_append(buf, str, len);
    0          
    0          
    0          
    0          
24 0 0         buffer_append(buf, "\"", 1);
    0          
    0          
    0          
25 0 0         } else if (SvROK(val)) {
26 0           SV* rv = SvRV(val);
27 0 0         if (SvTYPE(rv) == SVt_PVAV) {
28 0           dump_array(aTHX_ (AV*) rv, buf);
29 0 0         } else if (SvTYPE(rv) == SVt_PVHV) {
30 0           dump_hash(aTHX_ (HV*) rv, buf);
31             }
32             }
33             }
34              
35 14           void dump_hash(pTHX_ HV* hash, Buffer* buf)
36             {
37 14           int count = 0;
38 14 50         if (!hash) {
39 0           return;
40             }
41              
42 14 50         buffer_append(buf, "{", 1);
    0          
    0          
    0          
43              
44 14           hv_iterinit(hash);
45             while (1) {
46 14           I32 len = 0;
47 14           char* key = 0;
48 14           SV* val = 0;
49 14           HE* entry = hv_iternext(hash);
50 14 50         if (!entry) {
51 14           break;
52             }
53              
54 0 0         if (count++) {
55 0 0         buffer_append(buf, ",", 1);
    0          
    0          
    0          
56             }
57              
58 0           key = hv_iterkey(entry, &len);
59 0           val = hv_iterval(hash, entry);
60              
61 0 0         buffer_append(buf, "\"", 1);
    0          
    0          
    0          
62 0 0         buffer_append(buf, key, len);
    0          
    0          
    0          
    0          
63 0 0         buffer_append(buf, "\":", 2);
    0          
    0          
    0          
64 0           dump_value(aTHX_ val, buf);
65 0           }
66              
67 14 50         buffer_append(buf, "}", 1);
    0          
    0          
    0          
68             }
69              
70 0           void dump_array(pTHX_ AV* array, Buffer* buf)
71             {
72 0           SSize_t top = 0;
73 0           int j = 0;
74 0 0         if (!array) {
75 0           return;
76             }
77              
78 0 0         buffer_append(buf, "[", 1);
    0          
    0          
    0          
79              
80 0           top = av_len(array);
81 0 0         for (j = 0; j <= top; ++j) {
82 0           SV** elem = av_fetch(array, j, 0);
83 0 0         if (j) {
84 0 0         buffer_append(buf, ",", 1);
    0          
    0          
    0          
85             }
86 0           dump_value(aTHX_ *elem, buf);
87             }
88              
89 0 0         buffer_append(buf, "]", 1);
    0          
    0          
    0          
90             }