Branch Coverage

YY.xs
Criterion Covered Total %
branch 577 922 62.5


line true false branch
40 16 0 if (mg->mg_ptr)
53 0 53 if (!SvROK(self_sv))
56 0 53 if (!mg)
70 10 0 if (doc)
80 2 5010 if (doc)
113 21135 0 if (d) {
114 1033 20102 if (d->owner) {
117 20102 0 if (d->doc)
133 0 30251 if (!SvROK(sv))
136 0 30251 if (!mg)
149 1033 20102 if (owner) {
163 15076 5104 if (path_len == 0)
165 0 5104 return yyjson_mut_ptr_getn(d->root, path, path_len);
185 1 10070 if (!idoc)
190 0 10070 if (!mdoc)
195 0 10070 XPUSHs(sv_2mortal(result));
211 1 7 if (!val)
215 0 7 XPUSHs(sv_2mortal(result));
231 1 53 if (!val) {
232 0 1 XPUSHs(&PL_sv_undef);
237 0 53 XPUSHs(sv_2mortal(result));
256 15 10008 if (SvROK(value_sv) && sv_derived_from(value_sv, "JSON::YY::Doc")) {
10 5 if (SvROK(value_sv) && sv_derived_from(value_sv, "JSON::YY::Doc")) {
259 0 10 if (!new_val)
269 2 10021 if (path_len == 0) {
270 1 1 if (d->owner)
272 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
277 10021 0 bool ok = yyjson_mut_doc_ptr_setx(d->doc, path, path_len, new_val,
279 4 10017 if (!ok) {
282 4 0 ok = yyjson_mut_doc_ptr_addx(d->doc, path, path_len, new_val,
285 0 10021 if (!ok)
286 0 0 croak("jset: failed to set path %.*s: %s",
290 0 10022 XPUSHs(doc_sv);
305 1 4 if (path_len == 0)
310 4 0 yyjson_mut_val *removed = yyjson_mut_doc_ptr_removex(d->doc, path, path_len,
312 2 2 if (!removed) {
313 0 2 XPUSHs(&PL_sv_undef);
322 0 2 XPUSHs(sv_2mortal(result));
338 0 8 XPUSHs(val ? &PL_sv_yes : &PL_sv_no);
2 6 XPUSHs(val ? &PL_sv_yes : &PL_sv_no);
354 0 5003 if (!src)
358 0 5003 if (!new_doc)
362 0 5003 if (!new_root) {
369 0 5003 XPUSHs(sv_2mortal(result));
385 0 15035 if (!val)
392 15028 7 if (val == d->root && !d->owner) {
15021 7 if (val == d->root && !d->owner) {
399 0 15035 if (!json)
404 0 15035 XPUSHs(sv_2mortal(result));
417 4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
419 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
431 2 1 if (SvIOK(val_sv)) {
432 0 2 if (SvIsUV(val_sv))
433 0 0 root = yyjson_mut_uint(doc, (uint64_t)SvUVX(val_sv));
435 2 0 root = yyjson_mut_sint(doc, (int64_t)SvIVX(val_sv));
440 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
451 4 0 yyjson_mut_val *root = yyjson_mut_bool(doc, SvTRUE(val_sv));
4 0 yyjson_mut_val *root = yyjson_mut_bool(doc, SvTRUE(val_sv));
453 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
463 2 0 yyjson_mut_val *root = yyjson_mut_null(doc);
465 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
475 3 0 yyjson_mut_val *root = yyjson_mut_arr(doc);
477 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
487 2 0 yyjson_mut_val *root = yyjson_mut_obj(doc);
489 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
505 0 8 if (!val) {
506 0 0 XPUSHs(&PL_sv_undef);
520 0 8 XPUSHs(sv_2mortal(newSVpv(type, 0)));
536 1 8 if (!val)
540 5 3 if (yyjson_mut_is_arr(val))
542 2 1 else if (yyjson_mut_is_obj(val))
544 1 0 else if (yyjson_mut_is_str(val))
549 0 8 XPUSHs(sv_2mortal(newSViv((IV)len)));
565 4 0 if (!val || !yyjson_mut_is_obj(val))
1 3 if (!val || !yyjson_mut_is_obj(val))
570 3 0 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
3 0 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
0 3 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
571 3 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
3 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
3 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
5 3 yyjson_mut_obj_foreach(val, idx, max, key, v) {
572 5 0 const char *kstr = yyjson_mut_get_str(key);
575 1 4 if (!is_ascii(kstr, klen))
599 11 0 if (it) {
600 11 0 if (it->owner)
615 0 1029 if (!SvROK(sv))
618 0 1029 if (!mg)
635 0 12 if (!val)
637 3 9 if (!yyjson_mut_is_arr(val) && !yyjson_mut_is_obj(val))
1 2 if (!yyjson_mut_is_arr(val) && !yyjson_mut_is_obj(val))
645 11 0 it->cur_key = NULL;
647 2 9 if (yyjson_mut_is_obj(val)) {
649 2 0 yyjson_mut_obj_iter_init(val, &it->it.obj);
652 9 0 yyjson_mut_arr_iter_init(val, &it->it.arr);
660 0 11 XPUSHs(sv_2mortal(result));
674 5 1021 if (it->is_obj) {
675 5 0 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
3 2 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
676 3 0 it->cur_key = yyjson_mut_obj_iter_next(&it->it.obj);
677 3 0 val = yyjson_mut_obj_iter_get_val(it->cur_key);
680 1021 0 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
1014 7 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
681 1014 0 val = yyjson_mut_arr_iter_next(&it->it.arr);
685 9 1017 if (!val) {
686 0 9 XPUSHs(&PL_sv_undef);
692 0 1017 XPUSHs(sv_2mortal(result));
704 0 3 if (!it->is_obj)
706 0 3 if (!it->cur_key) {
707 0 0 XPUSHs(&PL_sv_undef);
711 3 0 const char *kstr = yyjson_mut_get_str(it->cur_key);
712 3 0 size_t klen = yyjson_mut_get_len(it->cur_key);
714 0 3 if (!is_ascii(kstr, klen))
716 0 3 XPUSHs(sv_2mortal(sv));
728 1 5 if (d->owner)
734 1 4 if (!result)
735 1 0 croak("jpatch: %s at index %zu", perr.msg ? perr.msg : "patch failed", perr.idx);
737 4 0 yyjson_mut_doc_set_root(d->doc, result);
739 0 4 XPUSHs(doc_sv);
751 1 1 if (d->owner)
756 0 1 if (!result)
759 1 0 yyjson_mut_doc_set_root(d->doc, result);
761 0 1 XPUSHs(doc_sv);
773 0 5005 if (!doc) croak("jfrom: failed to create document");
791 0 5005 XPUSHs(sv_2mortal(result));
807 1 0 if (!val || !yyjson_mut_is_obj(val))
0 1 if (!val || !yyjson_mut_is_obj(val))
812 1 0 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
1 0 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
0 1 EXTEND(SP, (SSize_t)yyjson_mut_obj_size(val));
813 1 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
1 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
1 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
3 1 yyjson_mut_obj_foreach(val, idx, max, key, v) {
829 3 0 bool eq = yyjson_mut_equals(a->root, b->root);
830 0 3 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
2 1 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
846 0 1 if (!val)
853 0 1 if (!json)
857 0 1 XPUSHs(sv_2mortal(result));
877 0 4 if (!idoc)
885 0 4 if (!new_val)
888 2 2 if (path_len == 0) {
889 1 1 if (d->owner)
891 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
895 2 0 bool ok = yyjson_mut_doc_ptr_setx(d->doc, path, path_len, new_val,
897 1 1 if (!ok) {
899 1 0 ok = yyjson_mut_doc_ptr_addx(d->doc, path, path_len, new_val,
902 0 2 if (!ok)
903 0 0 croak("jraw: failed to set path %.*s: %s",
907 0 3 XPUSHs(doc_sv);
927 2 0 static inline bool is_mut_int(yyjson_mut_val *v) {
928 1 1 return yyjson_mut_is_uint(v) || yyjson_mut_is_sint(v);
0 1 return yyjson_mut_is_uint(v) || yyjson_mut_is_sint(v);
931 0 4 PP_JIS(jis_obj, yyjson_mut_is_obj)
3 1 PP_JIS(jis_obj, yyjson_mut_is_obj)
2 1 PP_JIS(jis_obj, yyjson_mut_is_obj)
932 0 3 PP_JIS(jis_arr, yyjson_mut_is_arr)
3 0 PP_JIS(jis_arr, yyjson_mut_is_arr)
1 2 PP_JIS(jis_arr, yyjson_mut_is_arr)
933 0 3 PP_JIS(jis_str, yyjson_mut_is_str)
2 1 PP_JIS(jis_str, yyjson_mut_is_str)
1 1 PP_JIS(jis_str, yyjson_mut_is_str)
934 0 3 PP_JIS(jis_num, yyjson_mut_is_num)
3 0 PP_JIS(jis_num, yyjson_mut_is_num)
2 1 PP_JIS(jis_num, yyjson_mut_is_num)
935 0 2 PP_JIS(jis_int, is_mut_int)
2 0 PP_JIS(jis_int, is_mut_int)
1 1 PP_JIS(jis_int, is_mut_int)
936 0 2 PP_JIS(jis_real, yyjson_mut_is_real)
2 0 PP_JIS(jis_real, yyjson_mut_is_real)
1 1 PP_JIS(jis_real, yyjson_mut_is_real)
937 0 4 PP_JIS(jis_bool, yyjson_mut_is_bool)
4 0 PP_JIS(jis_bool, yyjson_mut_is_bool)
3 1 PP_JIS(jis_bool, yyjson_mut_is_bool)
938 0 2 PP_JIS(jis_null, yyjson_mut_is_null)
2 0 PP_JIS(jis_null, yyjson_mut_is_null)
1 1 PP_JIS(jis_null, yyjson_mut_is_null)
953 1 3 if (!idoc)
954 1 0 croak("jread: %s: %s", path, err.msg ? err.msg : "read failed");
958 0 3 if (!mdoc)
963 0 3 XPUSHs(sv_2mortal(result));
987 0 3 if (!ok)
988 0 0 croak("jwrite: %s: %s", path, werr.msg ? werr.msg : "write failed");
990 0 3 XPUSHs(doc_sv);
999 14 0 collect_paths(pTHX_ yyjson_mut_val *val, SV *prefix, AV *result) {
1000 9 5 if (yyjson_mut_is_obj(val)) {
1003 9 0 yyjson_mut_obj_foreach(val, idx, max, key, v) {
7 2 yyjson_mut_obj_foreach(val, idx, max, key, v) {
7 2 yyjson_mut_obj_foreach(val, idx, max, key, v) {
15 9 yyjson_mut_obj_foreach(val, idx, max, key, v) {
1004 15 0 const char *kstr = yyjson_mut_get_str(key);
1011 17 15 while (p < end) {
1013 39 15 while (special < end && *special != '~' && *special != '/')
38 1 while (special < end && *special != '~' && *special != '/')
37 1 while (special < end && *special != '~' && *special != '/')
1015 17 0 if (special > p)
1017 2 15 if (special < end) {
1018 1 1 if (*special == '~') sv_catpvs(path, "~0");
1024 11 4 if (yyjson_mut_is_obj(v) || yyjson_mut_is_arr(v)) {
4 7 if (yyjson_mut_is_obj(v) || yyjson_mut_is_arr(v)) {
1031 4 1 } else if (yyjson_mut_is_arr(val)) {
1034 4 0 yyjson_mut_arr_foreach(val, idx, max, item) {
4 0 yyjson_mut_arr_foreach(val, idx, max, item) {
4 4 yyjson_mut_arr_foreach(val, idx, max, item) {
1040 4 0 if (yyjson_mut_is_obj(item) || yyjson_mut_is_arr(item)) {
0 4 if (yyjson_mut_is_obj(item) || yyjson_mut_is_arr(item)) {
1062 0 6 if (!val)
1071 6 0 EXTEND(SP, count);
0 6 EXTEND(SP, count);
1072 12 6 for (SSize_t i = 0; i < count; i++) {
1096 8 0 if (!arr || !yyjson_mut_is_arr(arr)) {
1 7 if (!arr || !yyjson_mut_is_arr(arr)) {
1097 0 1 XPUSHs(&PL_sv_undef);
1103 7 0 yyjson_mut_arr_foreach(arr, idx, max, item) {
7 0 yyjson_mut_arr_foreach(arr, idx, max, item) {
15 1 yyjson_mut_arr_foreach(arr, idx, max, item) {
1106 2 13 if (key_len == 0)
1108 0 13 else if (yyjson_mut_is_obj(item) || yyjson_mut_is_arr(item))
0 0 else if (yyjson_mut_is_obj(item) || yyjson_mut_is_arr(item))
1109 0 13 field = yyjson_mut_ptr_getn(item, key, key_len);
1111 0 15 if (!field) continue;
1114 9 6 if (yyjson_mut_is_str(field)) {
1115 9 0 if (yyjson_mut_equals_strn(field, match, match_len)) {
3 6 if (yyjson_mut_equals_strn(field, match, match_len)) {
1117 0 3 XPUSHs(sv_2mortal(result));
1122 3 3 else if (yyjson_mut_is_num(field)) {
1125 1 2 if (match_nv == field_nv) {
1127 0 1 XPUSHs(sv_2mortal(result));
1132 3 0 else if (yyjson_mut_is_bool(field)) {
1134 2 1 if ((bval && match_len == 4 && memcmp(match, "true", 4) == 0) ||
1 1 if ((bval && match_len == 4 && memcmp(match, "true", 4) == 0) ||
0 1 if ((bval && match_len == 4 && memcmp(match, "true", 4) == 0) ||
1135 1 1 (!bval && match_len == 5 && memcmp(match, "false", 5) == 0)) {
1 0 (!bval && match_len == 5 && memcmp(match, "false", 5) == 0)) {
1 0 (!bval && match_len == 5 && memcmp(match, "false", 5) == 0)) {
1137 0 2 XPUSHs(sv_2mortal(result));
1143 0 1 XPUSHs(&PL_sv_undef);
1154 24502 4079 for (; i + 7 < len; i += 8) {
1157 0 24502 if (chunk & UINT64_C(0x8080808080808080))
1160 13065 4070 for (; i < len; i++) {
1161 9 13056 if (p[i] >= 0x80)
1179 0 1005 if (!is_ascii(str, len))
1188 11168 0 yyjson_val_to_sv(pTHX_ yyjson_val *val) {
1193 4 0 case YYJSON_TYPE_BOOL:
1196 3 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1198 11023 0 case YYJSON_TYPE_NUM: {
1200 11021 2 if (st == YYJSON_SUBTYPE_UINT)
1202 1 1 else if (st == YYJSON_SUBTYPE_SINT)
1208 10 0 case YYJSON_TYPE_STR: {
1209 10 0 const char *str = yyjson_get_str(val);
1213 6 4 if (!is_ascii(str, len))
1218 108 0 case YYJSON_TYPE_ARR: {
1221 107 1 if (count > 0)
1226 108 0 yyjson_arr_foreach(val, idx, max, item) {
108 0 yyjson_arr_foreach(val, idx, max, item) {
10115 108 yyjson_arr_foreach(val, idx, max, item) {
1232 21 0 case YYJSON_TYPE_OBJ: {
1235 21 0 if (count > 0)
1240 21 0 yyjson_obj_foreach(val, idx, max, key, value) {
21 0 yyjson_obj_foreach(val, idx, max, key, value) {
1028 21 yyjson_obj_foreach(val, idx, max, key, value) {
1241 1028 0 const char *kstr = yyjson_get_str(key);
1244 0 1028 if (!is_ascii(kstr, klen))
1260 65 0 yyjson_mut_val_to_sv(pTHX_ yyjson_mut_val *val) {
1265 2 0 case YYJSON_TYPE_BOOL:
1268 1 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1270 41 0 case YYJSON_TYPE_NUM: {
1272 34 7 if (st == YYJSON_SUBTYPE_UINT)
1274 7 0 else if (st == YYJSON_SUBTYPE_SINT)
1280 16 0 case YYJSON_TYPE_STR: {
1281 16 0 const char *str = yyjson_mut_get_str(val);
1284 2 14 if (!is_ascii(str, len))
1289 4 0 case YYJSON_TYPE_ARR: {
1292 4 0 if (count > 0)
1297 4 0 yyjson_mut_arr_foreach(val, idx, max, item) {
4 0 yyjson_mut_arr_foreach(val, idx, max, item) {
9 4 yyjson_mut_arr_foreach(val, idx, max, item) {
1303 1 0 case YYJSON_TYPE_OBJ: {
1306 1 0 if (count > 0)
1311 1 0 yyjson_mut_obj_foreach(val, idx, max, key, value) {
1 0 yyjson_mut_obj_foreach(val, idx, max, key, value) {
1 0 yyjson_mut_obj_foreach(val, idx, max, key, value) {
3 1 yyjson_mut_obj_foreach(val, idx, max, key, value) {
1312 3 0 const char *kstr = yyjson_mut_get_str(key);
1315 0 3 if (!is_ascii(kstr, klen))
1332 3023 0 yyjson_val_to_sv_ro(pTHX_ yyjson_val *val, SV *doc_sv) {
1337 3 0 case YYJSON_TYPE_BOOL:
1340 2 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1342 1006 0 case YYJSON_TYPE_NUM: {
1345 1006 0 if (st == YYJSON_SUBTYPE_UINT)
1347 0 0 else if (st == YYJSON_SUBTYPE_SINT)
1355 1005 0 case YYJSON_TYPE_STR:
1357 1005 0 return new_sv_zerocopy(aTHX_
1360 3 0 case YYJSON_TYPE_ARR: {
1363 3 0 if (count > 0)
1368 3 0 yyjson_arr_foreach(val, idx, max, item) {
3 0 yyjson_arr_foreach(val, idx, max, item) {
1004 3 yyjson_arr_foreach(val, idx, max, item) {
1375 1005 0 case YYJSON_TYPE_OBJ: {
1378 1005 0 if (count > 0)
1383 1005 0 yyjson_obj_foreach(val, idx, max, key, value) {
1005 0 yyjson_obj_foreach(val, idx, max, key, value) {
2009 1005 yyjson_obj_foreach(val, idx, max, key, value) {
1384 2009 0 const char *kstr = yyjson_get_str(key);
1387 0 2009 if (!is_ascii(kstr, klen))
1441 20 16307 if (avail < need) {
1443 20 0 SvGROW(buf, newlen);
20 0 SvGROW(buf, newlen);
1470 24533 4067 for (; i + 7 < len; i += 8) {
1475 33 24500 if ((chunk - UINT64_C(0x2020202020202020)) & ~chunk & UINT64_C(0x8080808080808080))
1482 24500 0 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
0 24500 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
1486 11112 4067 for (; i < len; i++) {
1487 0 11112 if (escape_table[p[i]])
1496 4067 33 if (!needs_escape(s, len)) {
1515 99 33 while (s < end) {
1517 0 99 if (out + 8 > out_end) {
1526 66 33 if (!esc) {
1529 366 33 while (safe < end && !escape_table[(unsigned char)*safe])
333 33 while (safe < end && !escape_table[(unsigned char)*safe])
1532 0 66 if (out + n > out_end) {
1541 5 28 } else if (esc > 1) {
1561 0 2025 if (val == 0) {
1564 5814 2025 while (val) {
1574 1 2024 if (val < 0) {
1596 2 5136 if (depth > self->max_depth)
1599 1 5135 if (!SvOK(sv)) {
1604 2067 3068 if (SvROK(sv)) {
1607 2 2065 if (SvOBJECT(deref)) {
1608 1 1 if (self->flags & F_CONVERT_BLESSED) {
1611 0 1 PUSHMARK(SP);
1612 0 1 XPUSHs(sv);
1616 1 0 if (SvTRUE(ERRSV)) {
0 1 if (SvTRUE(ERRSV)) {
1617 0 0 SV *err = ERRSV;
1618 0 0 PUTBACK; FREETMPS; LEAVE;
1621 1 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1623 1 0 PUTBACK; FREETMPS; LEAVE;
1628 1 0 if (self->flags & F_ALLOW_BLESSED) {
1637 1 2064 if (SvTYPE(deref) < SVt_PVAV) {
1638 1 0 if (SvTRUE(deref))
1645 10 2054 if (SvTYPE(deref) == SVt_PVAV) {
1649 2017 10 for (SSize_t i = 0; i < len; i++) {
1650 2008 9 if (i) buf_cat_c(aTHX_ buf, ',');
1652 2017 0 direct_encode_sv(aTHX_ buf, elem ? *elem : &PL_sv_undef,
1659 2054 0 if (SvTYPE(deref) == SVt_PVHV) {
1665 3061 2047 while ((he = hv_iternext(hv))) {
1666 1007 2054 if (!first) buf_cat_c(aTHX_ buf, ',');
1669 0 3061 const char *kstr = HePV(he, klen);
1678 0 0 if (self->flags & F_ALLOW_UNKNOWN) {
1685 2025 1043 if (SvIOK(sv)) {
1686 0 2025 if (SvIsUV(sv))
1693 4 1039 if (SvNOK(sv)) {
1695 3 1 if (Perl_isnan(nv) || Perl_isinf(nv))
2 1 if (Perl_isnan(nv) || Perl_isinf(nv))
1701 1039 0 if (SvPOK(sv)) {
1715 0 45049 if (depth > self->max_depth)
1718 1 45048 if (!SvOK(sv))
1721 15015 30033 if (SvROK(sv)) {
1725 0 15015 if (SvOBJECT(deref)) {
1727 0 0 if (self->flags & F_CONVERT_BLESSED) {
1730 0 0 PUSHMARK(SP);
1731 0 0 XPUSHs(sv);
1735 0 0 if (SvTRUE(ERRSV)) {
0 0 if (SvTRUE(ERRSV)) {
1736 0 0 SV *err = ERRSV;
1737 0 0 PUTBACK; FREETMPS; LEAVE;
1740 0 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1742 0 0 PUTBACK; FREETMPS; LEAVE;
1748 0 0 if (self->flags & F_ALLOW_BLESSED)
1755 1 15014 if (SvTYPE(deref) < SVt_PVAV) {
1758 1 0 : yyjson_mut_bool(doc, 0);
1763 5003 0 AV *av = (AV *)deref;
1766 15009 5003 for (SSize_t i = 0; i < len; i++) {
1768 15009 0 yyjson_mut_val *v = sv_to_yyjson_val(aTHX_ doc, elem ? *elem : &PL_sv_undef, self, depth + 1);
1775 10011 0 HV *hv = (HV *)deref;
1779 15015 10011 while ((he = hv_iternext(hv))) {
1781 0 15015 const char *kstr = HePV(he, klen);
1783 15015 0 yyjson_mut_val *k = yyjson_mut_strncpy(doc, kstr, klen);
1791 0 0 if (self->flags & F_ALLOW_UNKNOWN)
1799 25026 5007 if (SvIOK(sv)) {
1800 0 25026 if (SvIsUV(sv))
1801 0 0 return yyjson_mut_uint(doc, (uint64_t)SvUVX(sv));
1802 25026 0 return yyjson_mut_sint(doc, (int64_t)SvIVX(sv));
1805 2 5005 if (SvNOK(sv)) {
1807 2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
1812 5005 0 if (SvPOK(sv)) {
1815 5005 0 return yyjson_mut_strncpy(doc, str, len);
1833 3 20 if (!doc)
1837 0 20 if (!root) {
1845 0 20 XPUSHs(sv_2mortal(result));
1861 0 47 XPUSHs(sv_2mortal(result));
1875 1 10 if (!doc)
1879 0 10 if (!root) {
1891 9 1 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
7 2 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
1892 5 2 SV *anchor = SvROK(result) ? SvRV(result) : result;
1897 0 10 XPUSHs(sv_2mortal(result));
2015 3174270 73709 for (kw_entry_t *e = kw_table; e->name; e++) {
2016 260574 2913696 if (keyword_len == e->len && memcmp(keyword_ptr, e->name, e->len) == 0) {
389 260185 if (keyword_len == e->len && memcmp(keyword_ptr, e->name, e->len) == 0) {
2022 73709 389 if (!entry)
2029 0 389 if (!our_stash)
2033 389 0 if (!gvp || !GvCV(*gvp))
0 389 if (!gvp || !GvCV(*gvp))
2036 2 387 if (!CvISXSUB(cv))
2040 387 0 if (!cvgv || GvSTASH(cvgv) != our_stash)
0 387 if (!cvgv || GvSTASH(cvgv) != our_stash)
2046 7 380 if (entry->nargs == 0) {
2048 163 217 } else if (entry->nargs == 1) {
2051 0 163 if (!a) croak("Missing argument to %s", entry->name);
2053 181 36 } else if (entry->nargs == 2) {
2056 0 181 if (!a) croak("Missing first argument to %s", entry->name);
2058 0 181 if (lex_peek_unichar(0) != ',')
2063 0 181 if (!b) croak("Missing second argument to %s", entry->name);
2068 116 36 for (i = 0; i < entry->nargs && i < 4; i++) {
116 0 for (i = 0; i < entry->nargs && i < 4; i++) {
2069 80 36 if (i > 0) {
2071 0 80 if (lex_peek_unichar(0) != ',')
2077 0 116 if (!args[i]) croak("Missing argument %d to %s", i+1, entry->name);
2079 28 8 if (entry->nargs == 3)
2157 546 14 for (i = 0; i < (int)(sizeof(doc_ops)/sizeof(doc_ops[0])); i++) {
2190 16 0 if (val) get_self(aTHX_ self_sv)->flags |= F_UTF8;
2196 6 0 if (val) get_self(aTHX_ self_sv)->flags |= F_PRETTY;
2202 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CANONICAL;
2208 2 1 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_NONREF;
2214 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_UNKNOWN;
2220 1 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_BLESSED;
2226 1 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CONVERT_BLESSED;
2245 6 0 if (self->flags & F_UTF8) {
2254 0 6 if (!doc)
2258 0 6 if (!root) {
2264 1 5 if (!(self->flags & F_ALLOW_NONREF)) {
2266 1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
2286 1 0 if (self->flags & F_UTF8) {
2294 0 1 if (!idoc)
2299 0 1 if (!mdoc)
2315 1 16 if (!(self->flags & F_ALLOW_NONREF)) {
2316 0 1 if (!SvROK(data) || (SvTYPE(SvRV(data)) != SVt_PVAV && SvTYPE(SvRV(data)) != SVt_PVHV))
0 0 if (!SvROK(data) || (SvTYPE(SvRV(data)) != SVt_PVAV && SvTYPE(SvRV(data)) != SVt_PVHV))
0 0 if (!SvROK(data) || (SvTYPE(SvRV(data)) != SVt_PVAV && SvTYPE(SvRV(data)) != SVt_PVHV))
2324 9 7 if (!(self->flags & F_PRETTY)) {
2332 0 7 if (!(self->flags & F_UTF8))
2350 0 5 if (!json)
2353 5 0 if (self->flags & F_UTF8) {
2388 0 0 if (!doc)
2392 0 0 if (!root) {
2412 0 0 if (!doc)
2416 0 0 if (!root) {
2430 0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
2431 0 0 SV *anchor = SvROK(RETVAL) ? SvRV(RETVAL) : RETVAL;
2691 0 2 if (!json)
2703 2 0 if (!SvROK(b_sv) || !sv_derived_from(b_sv, "JSON::YY::Doc"))
0 2 if (!SvROK(b_sv) || !sv_derived_from(b_sv, "JSON::YY::Doc"))
2707 2 0 RETVAL = yyjson_mut_equals(a->root, b->root)
2708 1 1 ? &PL_sv_yes : &PL_sv_no;