Branch Coverage

YY.xs
Criterion Covered Total %
branch 541 874 61.9


line true false branch
31 16 0 if (mg->mg_ptr)
44 0 53 if (!SvROK(self_sv))
47 0 53 if (!mg)
61 10 0 if (doc)
71 2 5010 if (doc)
104 21135 0 if (d) {
105 1033 20102 if (d->owner) {
108 20102 0 if (d->doc)
124 0 30251 if (!SvROK(sv))
127 0 30251 if (!mg)
140 1033 20102 if (owner) {
154 15076 5104 if (path_len == 0)
156 0 5104 return yyjson_mut_ptr_getn(d->root, path, path_len);
174 1 10070 if (!idoc)
179 0 10070 if (!mdoc)
184 0 10070 XPUSHs(sv_2mortal(result));
198 1 7 if (!val)
202 0 7 XPUSHs(sv_2mortal(result));
216 1 53 if (!val) {
217 0 1 XPUSHs(&PL_sv_undef);
222 0 53 XPUSHs(sv_2mortal(result));
239 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")) {
242 0 10 if (!new_val)
252 2 10021 if (path_len == 0) {
253 1 1 if (d->owner)
255 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
260 10021 0 bool ok = yyjson_mut_doc_ptr_setx(d->doc, path, path_len, new_val,
262 4 10017 if (!ok) {
265 4 0 ok = yyjson_mut_doc_ptr_addx(d->doc, path, path_len, new_val,
268 0 10021 if (!ok)
269 0 0 croak("jset: failed to set path %.*s: %s",
273 0 10022 XPUSHs(doc_sv);
286 1 4 if (path_len == 0)
291 4 0 yyjson_mut_val *removed = yyjson_mut_doc_ptr_removex(d->doc, path, path_len,
293 2 2 if (!removed) {
294 0 2 XPUSHs(&PL_sv_undef);
303 0 2 XPUSHs(sv_2mortal(result));
317 0 8 XPUSHs(val ? &PL_sv_yes : &PL_sv_no);
2 6 XPUSHs(val ? &PL_sv_yes : &PL_sv_no);
331 0 5003 if (!src)
335 0 5003 if (!new_doc)
339 0 5003 if (!new_root) {
346 0 5003 XPUSHs(sv_2mortal(result));
360 0 15035 if (!val)
367 15028 7 if (val == d->root && !d->owner) {
15021 7 if (val == d->root && !d->owner) {
374 0 15035 if (!json)
379 0 15035 XPUSHs(sv_2mortal(result));
390 4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
392 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
402 2 1 if (SvIOK(val_sv)) {
403 0 2 if (SvIsUV(val_sv))
404 0 0 root = yyjson_mut_uint(doc, (uint64_t)SvUVX(val_sv));
406 2 0 root = yyjson_mut_sint(doc, (int64_t)SvIVX(val_sv));
411 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
420 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));
422 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
430 2 0 yyjson_mut_val *root = yyjson_mut_null(doc);
432 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
440 3 0 yyjson_mut_val *root = yyjson_mut_arr(doc);
442 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
450 2 0 yyjson_mut_val *root = yyjson_mut_obj(doc);
452 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
466 0 8 if (!val) {
467 0 0 XPUSHs(&PL_sv_undef);
481 0 8 XPUSHs(sv_2mortal(newSVpv(type, 0)));
495 1 8 if (!val)
499 5 3 if (yyjson_mut_is_arr(val))
501 2 1 else if (yyjson_mut_is_obj(val))
503 1 0 else if (yyjson_mut_is_str(val))
508 0 8 XPUSHs(sv_2mortal(newSViv((IV)len)));
522 4 0 if (!val || !yyjson_mut_is_obj(val))
1 3 if (!val || !yyjson_mut_is_obj(val))
527 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));
528 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) {
529 5 0 const char *kstr = yyjson_mut_get_str(key);
532 1 4 if (!is_ascii(kstr, klen))
556 11 0 if (it) {
557 11 0 if (it->owner)
572 0 1029 if (!SvROK(sv))
575 0 1029 if (!mg)
590 0 12 if (!val)
592 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))
600 11 0 it->cur_key = NULL;
602 2 9 if (yyjson_mut_is_obj(val)) {
604 2 0 yyjson_mut_obj_iter_init(val, &it->it.obj);
607 9 0 yyjson_mut_arr_iter_init(val, &it->it.arr);
615 0 11 XPUSHs(sv_2mortal(result));
627 5 1021 if (it->is_obj) {
628 5 0 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
3 2 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
629 3 0 it->cur_key = yyjson_mut_obj_iter_next(&it->it.obj);
630 3 0 val = yyjson_mut_obj_iter_get_val(it->cur_key);
633 1021 0 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
1014 7 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
634 1014 0 val = yyjson_mut_arr_iter_next(&it->it.arr);
638 9 1017 if (!val) {
639 0 9 XPUSHs(&PL_sv_undef);
645 0 1017 XPUSHs(sv_2mortal(result));
655 0 3 if (!it->is_obj)
657 0 3 if (!it->cur_key) {
658 0 0 XPUSHs(&PL_sv_undef);
662 3 0 const char *kstr = yyjson_mut_get_str(it->cur_key);
663 3 0 size_t klen = yyjson_mut_get_len(it->cur_key);
665 0 3 if (!is_ascii(kstr, klen))
667 0 3 XPUSHs(sv_2mortal(sv));
677 1 5 if (d->owner)
683 1 4 if (!result)
684 1 0 croak("jpatch: %s at index %zu", perr.msg ? perr.msg : "patch failed", perr.idx);
686 4 0 yyjson_mut_doc_set_root(d->doc, result);
688 0 4 XPUSHs(doc_sv);
698 1 1 if (d->owner)
703 0 1 if (!result)
706 1 0 yyjson_mut_doc_set_root(d->doc, result);
708 0 1 XPUSHs(doc_sv);
718 0 5005 if (!doc) croak("jfrom: failed to create document");
736 0 5005 XPUSHs(sv_2mortal(result));
750 1 0 if (!val || !yyjson_mut_is_obj(val))
0 1 if (!val || !yyjson_mut_is_obj(val))
755 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));
756 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) {
770 3 0 bool eq = yyjson_mut_equals(a->root, b->root);
771 0 3 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
2 1 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
785 0 1 if (!val)
792 0 1 if (!json)
796 0 1 XPUSHs(sv_2mortal(result));
814 0 4 if (!idoc)
822 0 4 if (!new_val)
825 2 2 if (path_len == 0) {
826 1 1 if (d->owner)
828 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
832 2 0 bool ok = yyjson_mut_doc_ptr_setx(d->doc, path, path_len, new_val,
834 1 1 if (!ok) {
836 1 0 ok = yyjson_mut_doc_ptr_addx(d->doc, path, path_len, new_val,
839 0 2 if (!ok)
840 0 0 croak("jraw: failed to set path %.*s: %s",
844 0 3 XPUSHs(doc_sv);
862 2 0 static inline bool is_mut_int(yyjson_mut_val *v) {
863 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);
866 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)
867 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)
868 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)
869 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)
870 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)
871 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)
872 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)
873 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)
886 1 3 if (!idoc)
887 1 0 croak("jread: %s: %s", path, err.msg ? err.msg : "read failed");
891 0 3 if (!mdoc)
896 0 3 XPUSHs(sv_2mortal(result));
918 0 3 if (!ok)
919 0 0 croak("jwrite: %s: %s", path, werr.msg ? werr.msg : "write failed");
921 0 3 XPUSHs(doc_sv);
928 14 0 collect_paths(pTHX_ yyjson_mut_val *val, SV *prefix, AV *result) {
929 9 5 if (yyjson_mut_is_obj(val)) {
932 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) {
933 15 0 const char *kstr = yyjson_mut_get_str(key);
940 17 15 while (p < end) {
942 39 15 while (special < end && *special != '~' && *special != '/')
38 1 while (special < end && *special != '~' && *special != '/')
37 1 while (special < end && *special != '~' && *special != '/')
944 17 0 if (special > p)
946 2 15 if (special < end) {
947 1 1 if (*special == '~') sv_catpvs(path, "~0");
953 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)) {
960 4 1 } else if (yyjson_mut_is_arr(val)) {
963 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) {
969 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)) {
991 0 6 if (!val)
1000 6 0 EXTEND(SP, count);
0 6 EXTEND(SP, count);
1001 12 6 for (SSize_t i = 0; i < count; i++) {
1023 8 0 if (!arr || !yyjson_mut_is_arr(arr)) {
1 7 if (!arr || !yyjson_mut_is_arr(arr)) {
1024 0 1 XPUSHs(&PL_sv_undef);
1030 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) {
1033 2 13 if (key_len == 0)
1035 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))
1036 0 13 field = yyjson_mut_ptr_getn(item, key, key_len);
1038 0 15 if (!field) continue;
1041 9 6 if (yyjson_mut_is_str(field)) {
1042 9 0 if (yyjson_mut_equals_strn(field, match, match_len)) {
3 6 if (yyjson_mut_equals_strn(field, match, match_len)) {
1044 0 3 XPUSHs(sv_2mortal(result));
1049 3 3 else if (yyjson_mut_is_num(field)) {
1052 1 2 if (match_nv == field_nv) {
1054 0 1 XPUSHs(sv_2mortal(result));
1059 3 0 else if (yyjson_mut_is_bool(field)) {
1061 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) ||
1062 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)) {
1064 0 2 XPUSHs(sv_2mortal(result));
1070 0 1 XPUSHs(&PL_sv_undef);
1081 24502 4079 for (; i + 7 < len; i += 8) {
1084 0 24502 if (chunk & UINT64_C(0x8080808080808080))
1087 13065 4070 for (; i < len; i++) {
1088 9 13056 if (p[i] >= 0x80)
1106 0 1005 if (!is_ascii(str, len))
1115 11168 0 yyjson_val_to_sv(pTHX_ yyjson_val *val) {
1120 4 0 case YYJSON_TYPE_BOOL:
1123 3 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1125 11023 0 case YYJSON_TYPE_NUM: {
1127 11021 2 if (st == YYJSON_SUBTYPE_UINT)
1129 1 1 else if (st == YYJSON_SUBTYPE_SINT)
1135 10 0 case YYJSON_TYPE_STR: {
1136 10 0 const char *str = yyjson_get_str(val);
1140 6 4 if (!is_ascii(str, len))
1145 108 0 case YYJSON_TYPE_ARR: {
1148 107 1 if (count > 0)
1153 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) {
1159 21 0 case YYJSON_TYPE_OBJ: {
1162 21 0 if (count > 0)
1167 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) {
1168 1028 0 const char *kstr = yyjson_get_str(key);
1171 0 1028 if (!is_ascii(kstr, klen))
1187 65 0 yyjson_mut_val_to_sv(pTHX_ yyjson_mut_val *val) {
1192 2 0 case YYJSON_TYPE_BOOL:
1195 1 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1197 41 0 case YYJSON_TYPE_NUM: {
1199 34 7 if (st == YYJSON_SUBTYPE_UINT)
1201 7 0 else if (st == YYJSON_SUBTYPE_SINT)
1207 16 0 case YYJSON_TYPE_STR: {
1208 16 0 const char *str = yyjson_mut_get_str(val);
1211 2 14 if (!is_ascii(str, len))
1216 4 0 case YYJSON_TYPE_ARR: {
1219 4 0 if (count > 0)
1224 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) {
1230 1 0 case YYJSON_TYPE_OBJ: {
1233 1 0 if (count > 0)
1238 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) {
1239 3 0 const char *kstr = yyjson_mut_get_str(key);
1242 0 3 if (!is_ascii(kstr, klen))
1259 3023 0 yyjson_val_to_sv_ro(pTHX_ yyjson_val *val, SV *doc_sv) {
1264 3 0 case YYJSON_TYPE_BOOL:
1267 2 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1269 1006 0 case YYJSON_TYPE_NUM: {
1272 1006 0 if (st == YYJSON_SUBTYPE_UINT)
1274 0 0 else if (st == YYJSON_SUBTYPE_SINT)
1282 1005 0 case YYJSON_TYPE_STR:
1284 1005 0 return new_sv_zerocopy(aTHX_
1287 3 0 case YYJSON_TYPE_ARR: {
1290 3 0 if (count > 0)
1295 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) {
1302 1005 0 case YYJSON_TYPE_OBJ: {
1305 1005 0 if (count > 0)
1310 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) {
1311 2009 0 const char *kstr = yyjson_get_str(key);
1314 0 2009 if (!is_ascii(kstr, klen))
1368 20 16307 if (avail < need) {
1370 20 0 SvGROW(buf, newlen);
20 0 SvGROW(buf, newlen);
1397 24533 4067 for (; i + 7 < len; i += 8) {
1402 33 24500 if ((chunk - UINT64_C(0x2020202020202020)) & ~chunk & UINT64_C(0x8080808080808080))
1409 24500 0 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
0 24500 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
1413 11112 4067 for (; i < len; i++) {
1414 0 11112 if (escape_table[p[i]])
1423 4067 33 if (!needs_escape(s, len)) {
1442 99 33 while (s < end) {
1444 0 99 if (out + 8 > out_end) {
1453 66 33 if (!esc) {
1456 366 33 while (safe < end && !escape_table[(unsigned char)*safe])
333 33 while (safe < end && !escape_table[(unsigned char)*safe])
1459 0 66 if (out + n > out_end) {
1468 5 28 } else if (esc > 1) {
1488 0 2025 if (val == 0) {
1491 5814 2025 while (val) {
1501 1 2024 if (val < 0) {
1523 2 5136 if (depth > self->max_depth)
1526 1 5135 if (!SvOK(sv)) {
1531 2067 3068 if (SvROK(sv)) {
1534 2 2065 if (SvOBJECT(deref)) {
1535 1 1 if (self->flags & F_CONVERT_BLESSED) {
1538 0 1 PUSHMARK(SP);
1539 0 1 XPUSHs(sv);
1543 1 0 if (SvTRUE(ERRSV)) {
0 1 if (SvTRUE(ERRSV)) {
1544 0 0 SV *err = ERRSV;
1545 0 0 PUTBACK; FREETMPS; LEAVE;
1548 1 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1550 1 0 PUTBACK; FREETMPS; LEAVE;
1555 1 0 if (self->flags & F_ALLOW_BLESSED) {
1564 1 2064 if (SvTYPE(deref) < SVt_PVAV) {
1565 1 0 if (SvTRUE(deref))
1572 10 2054 if (SvTYPE(deref) == SVt_PVAV) {
1576 2017 10 for (SSize_t i = 0; i < len; i++) {
1577 2008 9 if (i) buf_cat_c(aTHX_ buf, ',');
1579 2017 0 direct_encode_sv(aTHX_ buf, elem ? *elem : &PL_sv_undef,
1586 2054 0 if (SvTYPE(deref) == SVt_PVHV) {
1592 3061 2047 while ((he = hv_iternext(hv))) {
1593 1007 2054 if (!first) buf_cat_c(aTHX_ buf, ',');
1596 0 3061 const char *kstr = HePV(he, klen);
1605 0 0 if (self->flags & F_ALLOW_UNKNOWN) {
1612 2025 1043 if (SvIOK(sv)) {
1613 0 2025 if (SvIsUV(sv))
1620 4 1039 if (SvNOK(sv)) {
1622 3 1 if (Perl_isnan(nv) || Perl_isinf(nv))
2 1 if (Perl_isnan(nv) || Perl_isinf(nv))
1628 1039 0 if (SvPOK(sv)) {
1642 0 45049 if (depth > self->max_depth)
1645 1 45048 if (!SvOK(sv))
1648 15015 30033 if (SvROK(sv)) {
1652 0 15015 if (SvOBJECT(deref)) {
1654 0 0 if (self->flags & F_CONVERT_BLESSED) {
1657 0 0 PUSHMARK(SP);
1658 0 0 XPUSHs(sv);
1662 0 0 if (SvTRUE(ERRSV)) {
0 0 if (SvTRUE(ERRSV)) {
1663 0 0 SV *err = ERRSV;
1664 0 0 PUTBACK; FREETMPS; LEAVE;
1667 0 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1669 0 0 PUTBACK; FREETMPS; LEAVE;
1675 0 0 if (self->flags & F_ALLOW_BLESSED)
1682 1 15014 if (SvTYPE(deref) < SVt_PVAV) {
1685 1 0 : yyjson_mut_bool(doc, 0);
1690 5003 0 AV *av = (AV *)deref;
1693 15009 5003 for (SSize_t i = 0; i < len; i++) {
1695 15009 0 yyjson_mut_val *v = sv_to_yyjson_val(aTHX_ doc, elem ? *elem : &PL_sv_undef, self, depth + 1);
1702 10011 0 HV *hv = (HV *)deref;
1706 15015 10011 while ((he = hv_iternext(hv))) {
1708 0 15015 const char *kstr = HePV(he, klen);
1710 15015 0 yyjson_mut_val *k = yyjson_mut_strncpy(doc, kstr, klen);
1718 0 0 if (self->flags & F_ALLOW_UNKNOWN)
1726 25026 5007 if (SvIOK(sv)) {
1727 0 25026 if (SvIsUV(sv))
1728 0 0 return yyjson_mut_uint(doc, (uint64_t)SvUVX(sv));
1729 25026 0 return yyjson_mut_sint(doc, (int64_t)SvIVX(sv));
1732 2 5005 if (SvNOK(sv)) {
1734 2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
1739 5005 0 if (SvPOK(sv)) {
1742 5005 0 return yyjson_mut_strncpy(doc, str, len);
1760 3 20 if (!doc)
1764 0 20 if (!root) {
1772 0 20 XPUSHs(sv_2mortal(result));
1788 0 47 XPUSHs(sv_2mortal(result));
1802 1 10 if (!doc)
1806 0 10 if (!root) {
1818 9 1 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
7 2 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
1819 5 2 SV *anchor = SvROK(result) ? SvRV(result) : result;
1824 0 10 XPUSHs(sv_2mortal(result));
2094 16 0 if (val) get_self(aTHX_ self_sv)->flags |= F_UTF8;
2100 6 0 if (val) get_self(aTHX_ self_sv)->flags |= F_PRETTY;
2106 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CANONICAL;
2112 2 1 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_NONREF;
2118 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_UNKNOWN;
2124 1 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_BLESSED;
2130 1 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CONVERT_BLESSED;
2149 6 0 if (self->flags & F_UTF8) {
2157 0 6 if (!doc)
2161 0 6 if (!root) {
2167 1 5 if (!(self->flags & F_ALLOW_NONREF)) {
2169 1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
2189 1 0 if (self->flags & F_UTF8) {
2197 0 1 if (!idoc)
2202 0 1 if (!mdoc)
2218 1 16 if (!(self->flags & F_ALLOW_NONREF)) {
2219 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))
2227 9 7 if (!(self->flags & F_PRETTY)) {
2235 0 7 if (!(self->flags & F_UTF8))
2253 0 5 if (!json)
2256 5 0 if (self->flags & F_UTF8) {
2291 0 0 if (!doc)
2295 0 0 if (!root) {
2315 0 0 if (!doc)
2319 0 0 if (!root) {
2333 0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
2334 0 0 SV *anchor = SvROK(RETVAL) ? SvRV(RETVAL) : RETVAL;
2354 0 2 if (!json)
2366 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"))
2370 2 0 RETVAL = yyjson_mut_equals(a->root, b->root)
2371 1 1 ? &PL_sv_yes : &PL_sv_no;