| line |
true |
false |
branch |
|
61
|
6142 |
1 |
while (i < len) { |
|
63
|
6139 |
3 |
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break; |
|
|
6139 |
0 |
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break; |
|
|
6136 |
3 |
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break; |
|
|
6136 |
0 |
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break; |
|
66
|
1 |
6136 |
if (i >= len) { |
|
74
|
6120 |
16 |
if (c != '[' && c != '{') { |
|
|
0 |
6120 |
if (c != '[' && c != '{') { |
|
86
|
265534 |
5 |
while (i < len) { |
|
88
|
166139 |
99395 |
if (in_string) { |
|
89
|
8 |
166131 |
if (prev_backslash) { |
|
91
|
8 |
166123 |
} else if (c == '\\') { |
|
93
|
26276 |
139847 |
} else if (c == '"') { |
|
105
|
6131 |
2032 |
if (depth == 0) { |
|
110
|
12186 |
49 |
while (i < len) { |
|
112
|
12180 |
6 |
if (w != ' ' && w != '\t' && w != '\n' && w != '\r') |
|
|
12180 |
0 |
if (w != ' ' && w != '\t' && w != '\n' && w != '\r') |
|
|
6082 |
6098 |
if (w != ' ' && w != '\t' && w != '\n' && w != '\r') |
|
|
6082 |
0 |
if (w != ' ' && w != '\t' && w != '\n' && w != '\r') |
|
155
|
0 |
50195 |
if (!val) return newSV(0); |
|
157
|
50195 |
0 |
t = yyjson_get_type(val); |
|
163
|
46713 |
3482 |
if ((t == YYJSON_TYPE_ARR || t == YYJSON_TYPE_OBJ) && depth >= max_depth) { |
|
|
9510 |
37203 |
if ((t == YYJSON_TYPE_ARR || t == YYJSON_TYPE_OBJ) && depth >= max_depth) { |
|
|
1 |
12991 |
if ((t == YYJSON_TYPE_ARR || t == YYJSON_TYPE_OBJ) && depth >= max_depth) { |
|
172
|
23 |
0 |
case YYJSON_TYPE_BOOL: { |
|
178
|
21 |
2 |
if (boolean_stash == g_frj_default_stash) { |
|
179
|
12 |
9 |
SV *s = truth ? g_frj_true_sv : g_frj_false_sv; |
|
180
|
21 |
0 |
if (s) { |
|
190
|
7812 |
0 |
case YYJSON_SUBTYPE_UINT: { |
|
192
|
7810 |
2 |
if (u <= (uint64_t)IV_MAX) return newSViv((IV)u); |
|
195
|
3 |
0 |
case YYJSON_SUBTYPE_SINT: |
|
197
|
6030 |
0 |
case YYJSON_SUBTYPE_REAL: |
|
203
|
23315 |
0 |
case YYJSON_TYPE_STR: { |
|
204
|
23315 |
0 |
const char *s = yyjson_get_str(val); |
|
211
|
3481 |
0 |
case YYJSON_TYPE_ARR: { |
|
215
|
26 |
3455 |
if (n == 0) return newRV_noinc((SV *)av); |
|
221
|
16639 |
2943 |
while ((elem = yyjson_arr_iter_next(&it))) { |
|
230
|
9510 |
0 |
case YYJSON_TYPE_OBJ: { |
|
235
|
85 |
9425 |
HV *hv = ordered ? make_ordered_hv(aTHX) : newHV(); |
|
237
|
11 |
9499 |
if (n == 0) return newRV_noinc((SV *)hv); |
|
241
|
9415 |
84 |
if (!ordered && n > 8) hv_ksplit(hv, (IV)n); |
|
|
2 |
9413 |
if (!ordered && n > 8) hv_ksplit(hv, (IV)n); |
|
246
|
27289 |
9499 |
while ((key = yyjson_obj_iter_next(&it))) { |
|
247
|
27289 |
0 |
vv = yyjson_obj_iter_get_val(key); |
|
248
|
27289 |
0 |
const char *kp = yyjson_get_str(key); |
|
253
|
414 |
26875 |
if (ordered) { |
|
260
|
0 |
26875 |
if (!hv_store(hv, kp, -(I32)kl, child, 0)) { |
|
303
|
414 |
0 |
if (!mg || !mg->mg_obj) { |
|
|
0 |
414 |
if (!mg || !mg->mg_obj) { |
|
305
|
0 |
0 |
if (!hv_store(hv, key, (I32)klen, val, 0)) { |
|
314
|
414 |
0 |
if (tie_oh_is_instance(aTHX_ tied_obj)) { |
|
322
|
0 |
0 |
PUSHMARK(SP); |
|
323
|
0 |
0 |
XPUSHs(tied_obj); |
|
324
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpvn(key, klen))); |
|
325
|
0 |
0 |
XPUSHs(sv_2mortal(val)); |
|
330
|
0 |
0 |
FREETMPS; LEAVE; |
|
336
|
0 |
2 |
if (!stash) { |
|
337
|
0 |
0 |
return newSVsv(truth ? &PL_sv_yes : &PL_sv_no); |
|
341
|
2 |
0 |
if (g_frj_default_stash && stash == g_frj_default_stash) { |
|
|
0 |
2 |
if (g_frj_default_stash && stash == g_frj_default_stash) { |
|
342
|
0 |
0 |
SV *s = truth ? g_frj_true_sv : g_frj_false_sv; |
|
343
|
0 |
0 |
if (s) { |
|
344
|
0 |
0 |
SvREFCNT_inc_simple_void(s); |
|
392
|
11189 |
6633 |
for (i = v->depth - 1; i >= 0; i--) { |
|
393
|
2 |
11187 |
if (v->stack[i] == target) return 1; |
|
395
|
0 |
6633 |
if (v->overflow) { |
|
404
|
6633 |
0 |
if (v->depth < VISITED_STACK_MAX) { |
|
409
|
0 |
0 |
if (!v->overflow) v->overflow = newHV(); |
|
411
|
0 |
0 |
if (!hv_store(v->overflow, (const char *)&target, sizeof(SV *), |
|
421
|
6631 |
0 |
if (v->depth > 0 && v->stack[v->depth - 1] == target) { |
|
|
6631 |
0 |
if (v->depth > 0 && v->stack[v->depth - 1] == target) { |
|
425
|
0 |
0 |
if (v->overflow) { |
|
444
|
0 |
1150 |
if (visited.overflow) SvREFCNT_dec((SV *)visited.overflow); |
|
454
|
32627 |
0 |
if (!sv || !SvOK(sv)) return yyjson_mut_null(doc); |
|
|
14 |
32613 |
if (!sv || !SvOK(sv)) return yyjson_mut_null(doc); |
|
456
|
6653 |
25960 |
if (SvROK(sv)) { |
|
458
|
15 |
6638 |
if (SvOBJECT(target) && sv_is_known_boolean_class(aTHX_ sv)) { |
|
|
13 |
2 |
if (SvOBJECT(target) && sv_is_known_boolean_class(aTHX_ sv)) { |
|
460
|
13 |
0 |
return yyjson_mut_bool(doc, truth); |
|
462
|
2228 |
4412 |
if (SvTYPE(target) == SVt_PVAV) { |
|
467
|
1 |
2227 |
if (visited_seen(aTHX_ visited, target)) { |
|
478
|
15330 |
2226 |
for (i = 0; i < n; i++) { |
|
481
|
15328 |
2 |
sv_to_yyjson_v(aTHX_ ep ? ep : &PL_sv_undef, |
|
488
|
4407 |
5 |
if (SvTYPE(target) == SVt_PVHV) { |
|
507
|
259 |
4148 |
int do_sort = opts->sort_keys || opts->canonical; |
|
|
18 |
241 |
int do_sort = opts->sort_keys || opts->canonical; |
|
509
|
1 |
4406 |
if (visited_seen(aTHX_ visited, target)) { |
|
517
|
4166 |
240 |
if (do_sort) { |
|
557
|
5 |
4161 |
if (tied_mg && tied_mg->mg_obj |
|
|
5 |
0 |
if (tied_mg && tied_mg->mg_obj |
|
558
|
5 |
0 |
&& tie_oh_is_instance(aTHX_ tied_mg->mg_obj)) |
|
566
|
13 |
5 |
while (tie_oh_iter_next(aTHX_ self, &it, |
|
569
|
0 |
13 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, vsv); |
|
571
|
0 |
4161 |
} else if (tied_mg && tied_mg->mg_obj) { |
|
|
0 |
0 |
} else if (tied_mg && tied_mg->mg_obj) { |
|
573
|
0 |
0 |
while ((he = hv_iternext(hv))) { |
|
580
|
0 |
0 |
PUSHMARK(SP); |
|
581
|
0 |
0 |
XPUSHs(tied_mg->mg_obj); |
|
582
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpvn(key, klen))); |
|
586
|
0 |
0 |
fetched = rc > 0 ? POPs : &PL_sv_undef; |
|
589
|
0 |
0 |
FREETMPS; LEAVE; |
|
591
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(ksv, sv_2mortal(copy)); |
|
598
|
14400 |
4161 |
while ((he = hv_iternext(hv))) { |
|
599
|
0 |
14400 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
|
0 |
0 |
FRJ_PUSH_PAIR(hv_iterkeysv(he), HeVAL(he)); |
|
609
|
10252 |
4166 |
for (a = 1; a < count; a++) { |
|
615
|
18108 |
3329 |
while (b >= 0) { |
|
620
|
6923 |
11185 |
if (rc < 0 || (rc == 0 && clen < plen)) { |
|
|
2 |
6921 |
if (rc < 0 || (rc == 0 && clen < plen)) { |
|
|
0 |
2 |
if (rc < 0 || (rc == 0 && clen < plen)) { |
|
631
|
14413 |
4166 |
for (i = 0; i < count; i++) { |
|
634
|
14413 |
0 |
yyjson_mut_val *kval = yyjson_mut_strn(doc, kp, (size_t)klen); |
|
640
|
0 |
4166 |
if (on_heap) { |
|
646
|
54 |
186 |
else if (tied_mg && tied_mg->mg_obj |
|
|
54 |
0 |
else if (tied_mg && tied_mg->mg_obj |
|
647
|
54 |
0 |
&& tie_oh_is_instance(aTHX_ tied_mg->mg_obj)) |
|
656
|
333 |
54 |
while (tie_oh_iter_next(aTHX_ self, &it, |
|
658
|
333 |
0 |
yyjson_mut_val *kval = yyjson_mut_strn( |
|
665
|
0 |
186 |
else if (tied_mg && tied_mg->mg_obj) { |
|
|
0 |
0 |
else if (tied_mg && tied_mg->mg_obj) { |
|
668
|
0 |
0 |
while ((he = hv_iternext(hv))) { |
|
676
|
0 |
0 |
PUSHMARK(SP); |
|
677
|
0 |
0 |
XPUSHs(tied_mg->mg_obj); |
|
678
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpvn(key, klen))); |
|
682
|
0 |
0 |
fetched = rc > 0 ? POPs : &PL_sv_undef; |
|
685
|
0 |
0 |
FREETMPS; LEAVE; |
|
688
|
0 |
0 |
kval = yyjson_mut_strn(doc, key, (size_t)klen); |
|
698
|
1396 |
185 |
while ((he = hv_iternext(hv))) { |
|
701
|
1396 |
0 |
yyjson_mut_val *kval = yyjson_mut_strn( |
|
715
|
1 |
4 |
if (tt == SVt_PVCV) { |
|
718
|
1 |
3 |
if (tt == SVt_PVGV) { |
|
723
|
2 |
1 |
if (SvRXOK(sv) || SvRXOK(target)) { |
|
|
0 |
2 |
if (SvRXOK(sv) || SvRXOK(target)) { |
|
735
|
2 |
0 |
if (!SvOBJECT(target)) { |
|
736
|
2 |
0 |
return yyjson_mut_bool(doc, SvTRUE(target) ? 1 : 0); |
|
744
|
0 |
0 |
return yyjson_mut_strn(doc, s, (size_t)len); |
|
748
|
5689 |
20271 |
if (SvIOK(sv) && !SvNOK(sv)) { |
|
|
1689 |
4000 |
if (SvIOK(sv) && !SvNOK(sv)) { |
|
749
|
2 |
1687 |
if (SvIsUV(sv)) return yyjson_mut_uint(doc, (uint64_t)SvUV(sv)); |
|
752
|
6019 |
18252 |
if (SvNOK(sv)) { |
|
758
|
18252 |
0 |
return yyjson_mut_strn(doc, s, (size_t)len); |
|
774
|
0 |
15 |
if (!SvROK(sv)) return 0; |
|
775
|
0 |
15 |
if (!SvOBJECT(SvRV(sv))) return 0; |
|
777
|
0 |
15 |
if (!stash) return 0; |
|
779
|
15 |
0 |
if (g_frj_default_stash && stash == g_frj_default_stash) return 1; |
|
|
11 |
4 |
if (g_frj_default_stash && stash == g_frj_default_stash) return 1; |
|
781
|
4 |
0 |
name = HvNAME_get(stash); |
|
|
4 |
0 |
name = HvNAME_get(stash); |
|
|
0 |
4 |
name = HvNAME_get(stash); |
|
|
0 |
0 |
name = HvNAME_get(stash); |
|
|
4 |
0 |
name = HvNAME_get(stash); |
|
|
0 |
4 |
name = HvNAME_get(stash); |
|
782
|
0 |
4 |
if (!name) return 0; |
|
783
|
2 |
2 |
if (strEQ(name, "JSON::PP::Boolean")) return 1; |
|
784
|
0 |
2 |
if (strEQ(name, "Types::Serialiser::Boolean")) return 1; |
|
785
|
0 |
2 |
if (strEQ(name, "Cpanel::JSON::XS::Boolean")) return 1; |
|
786
|
0 |
2 |
if (strEQ(name, "JSON::XS::Boolean")) return 1; |
|
787
|
0 |
2 |
if (strEQ(name, "boolean")) return 1; |
|
807
|
44 |
6 |
for (i = 0; i < ctx_len; i++) { |
|
808
|
43 |
1 |
if (p[i] == '\n' || p[i] == '\r' || p[i] == '\t') p[i] = ' '; |
|
|
43 |
0 |
if (p[i] == '\n' || p[i] == '\r' || p[i] == '\t') p[i] = ' '; |
|
|
0 |
43 |
if (p[i] == '\n' || p[i] == '\r' || p[i] == '\t') p[i] = ' '; |
|
810
|
6 |
0 |
croak("File::Raw::JSON: %s at byte offset %lu near \"%.*s\"", |
|
819
|
5 |
228 |
if (opts->relaxed) { |
|
823
|
1 |
232 |
if (opts->allow_nan_inf) f |= YYJSON_READ_ALLOW_INF_AND_NAN; |
|
855
|
535 |
9 |
if (aligned + size <= c->pool_size) { |
|
866
|
78 |
4 |
if (ptr >= (void *)c->pool && ptr < (void *)(c->pool + c->pool_size)) { |
|
|
78 |
0 |
if (ptr >= (void *)c->pool && ptr < (void *)(c->pool + c->pool_size)) { |
|
870
|
78 |
0 |
if (new_ptr && old_size > 0) { |
|
|
78 |
0 |
if (new_ptr && old_size > 0) { |
|
882
|
456 |
8 |
if (ptr >= (void *)c->pool && ptr < (void *)(c->pool + c->pool_size)) { |
|
|
456 |
0 |
if (ptr >= (void *)c->pool && ptr < (void *)(c->pool + c->pool_size)) { |
|
913
|
6 |
137 |
if (!doc) { |
|
918
|
1 |
136 |
if (!opts->allow_nonref && root) { |
|
|
1 |
0 |
if (!opts->allow_nonref && root) { |
|
920
|
1 |
0 |
if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) { |
|
|
1 |
0 |
if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) { |
|
951
|
92 |
36 |
while (cursor < len) { |
|
955
|
90 |
2 |
if (rc == JSONL_FOUND) { |
|
962
|
0 |
90 |
if (!doc) { |
|
967
|
90 |
0 |
av_push(result, |
|
975
|
1 |
1 |
if (rc == JSONL_NEED_MORE) { |
|
981
|
1 |
0 |
if (s >= len - cursor) break; /* trailing whitespace */ |
|
982
|
0 |
0 |
if (opts->relaxed) { cursor += s + 1; continue; } |
|
999
|
14 |
1136 |
if (opts->pretty && !opts->canonical) { |
|
|
14 |
0 |
if (opts->pretty && !opts->canonical) { |
|
1000
|
1 |
13 |
if (opts->indent == 4) { |
|
1006
|
0 |
1150 |
if (!opts->utf8) f |= YYJSON_WRITE_ESCAPE_UNICODE; |
|
1007
|
1 |
1149 |
if (opts->allow_nan_inf) f |= YYJSON_WRITE_ALLOW_INF_AND_NAN; |
|
1021
|
0 |
1155 |
if (!doc) croak("File::Raw::JSON: out of memory (mut_doc_new)"); |
|
1028
|
0 |
1150 |
if (!out) { |
|
1030
|
0 |
0 |
croak("File::Raw::JSON: encode failed: %s", |
|
1046
|
13 |
0 |
if (!payload || !SvROK(payload) || SvTYPE(SvRV(payload)) != SVt_PVAV) |
|
|
12 |
1 |
if (!payload || !SvROK(payload) || SvTYPE(SvRV(payload)) != SVt_PVAV) |
|
|
1 |
11 |
if (!payload || !SvROK(payload) || SvTYPE(SvRV(payload)) != SVt_PVAV) |
|
1053
|
1021 |
11 |
for (i = 0; i < n; i++) { |
|
1058
|
1021 |
0 |
rec_bytes = json_encode_document(aTHX_ |
|
1059
|
1021 |
0 |
(ep && *ep) ? *ep : &PL_sv_undef, opts); |