Branch Coverage

YY.xs
Criterion Covered Total %
branch 564 908 62.1


line true false branch
31 17 0 if (mg->mg_ptr)
44 0 57 if (!SvROK(self_sv))
47 0 57 if (!mg)
61 1214 0 if (doc)
71 2 5010 if (doc)
110 21162 0 if (d) {
111 1046 20116 if (d->owner) {
114 20116 0 if (d->doc)
130 0 30293 if (!SvROK(sv))
133 0 30293 if (!mg)
146 1046 20116 if (owner) {
160 15086 5128 if (path_len == 0)
162 0 5128 return yyjson_mut_ptr_getn(d->root, path, path_len);
180 1 10082 if (!idoc)
185 0 10082 if (!mdoc)
190 0 10082 XPUSHs(sv_2mortal(result));
204 1 12 if (!val)
208 0 12 XPUSHs(sv_2mortal(result));
222 6 68 if (!val) {
223 0 6 XPUSHs(&PL_sv_undef);
228 0 68 XPUSHs(sv_2mortal(result));
245 15 10013 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")) {
248 0 10 if (!new_val)
258 2 10026 if (path_len == 0) {
259 1 1 if (d->owner)
261 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
270 10026 0 bool ok = yyjson_mut_ptr_setx(d->root, path, path_len, new_val,
272 5 10021 if (!ok) {
275 5 0 ok = yyjson_mut_ptr_addx(d->root, path, path_len, new_val,
278 0 10026 if (!ok)
279 0 0 croak("jset: failed to set path %.*s: %s",
283 0 10027 XPUSHs(doc_sv);
296 1 6 if (path_len == 0)
302 0 6 yyjson_mut_val *target = yyjson_mut_ptr_getn(d->root, path, path_len);
303 2 4 if (!target) {
304 0 2 XPUSHs(&PL_sv_undef);
310 0 4 if (!new_doc)
313 0 4 if (!copy) {
322 4 0 yyjson_mut_ptr_removex(d->root, path, path_len, &ctx, &perr);
324 0 4 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);
352 0 5003 if (!src)
356 0 5003 if (!new_doc)
360 0 5003 if (!new_root) {
367 0 5003 XPUSHs(sv_2mortal(result));
381 0 15035 if (!val)
388 15028 7 if (val == d->root && !d->owner) {
15021 7 if (val == d->root && !d->owner) {
395 0 15035 if (!json)
402 0 15035 XPUSHs(sv_2mortal(result));
413 4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
4 0 yyjson_mut_val *root = yyjson_mut_strncpy(doc, str, len);
415 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
425 2 1 if (SvIOK(val_sv)) {
426 0 2 if (SvIsUV(val_sv))
427 0 0 root = yyjson_mut_uint(doc, (uint64_t)SvUVX(val_sv));
429 2 0 root = yyjson_mut_sint(doc, (int64_t)SvIVX(val_sv));
434 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
443 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));
445 0 4 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
453 2 0 yyjson_mut_val *root = yyjson_mut_null(doc);
455 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
463 3 0 yyjson_mut_val *root = yyjson_mut_arr(doc);
465 0 3 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
473 2 0 yyjson_mut_val *root = yyjson_mut_obj(doc);
475 0 2 XPUSHs(sv_2mortal(new_doc_sv(aTHX_ doc, root, NULL)));
489 0 8 if (!val) {
490 0 0 XPUSHs(&PL_sv_undef);
504 0 8 XPUSHs(sv_2mortal(newSVpv(type, 0)));
518 1 8 if (!val)
522 5 3 if (yyjson_mut_is_arr(val))
524 2 1 else if (yyjson_mut_is_obj(val))
526 1 0 else if (yyjson_mut_is_str(val))
531 0 8 XPUSHs(sv_2mortal(newSViv((IV)len)));
545 4 0 if (!val || !yyjson_mut_is_obj(val))
1 3 if (!val || !yyjson_mut_is_obj(val))
550 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));
551 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) {
552 5 0 const char *kstr = yyjson_mut_get_str(key);
555 1 4 if (!is_ascii(kstr, klen))
579 11 0 if (it) {
580 11 0 if (it->owner)
595 0 1029 if (!SvROK(sv))
598 0 1029 if (!mg)
613 0 12 if (!val)
615 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))
623 11 0 it->cur_key = NULL;
625 2 9 if (yyjson_mut_is_obj(val)) {
627 2 0 yyjson_mut_obj_iter_init(val, &it->it.obj);
630 9 0 yyjson_mut_arr_iter_init(val, &it->it.arr);
638 0 11 XPUSHs(sv_2mortal(result));
650 5 1021 if (it->is_obj) {
651 5 0 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
3 2 if (yyjson_mut_obj_iter_has_next(&it->it.obj)) {
652 3 0 it->cur_key = yyjson_mut_obj_iter_next(&it->it.obj);
653 3 0 val = yyjson_mut_obj_iter_get_val(it->cur_key);
656 1021 0 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
1014 7 if (yyjson_mut_arr_iter_has_next(&it->it.arr)) {
657 1014 0 val = yyjson_mut_arr_iter_next(&it->it.arr);
661 9 1017 if (!val) {
662 0 9 XPUSHs(&PL_sv_undef);
668 0 1017 XPUSHs(sv_2mortal(result));
678 0 3 if (!it->is_obj)
680 0 3 if (!it->cur_key) {
681 0 0 XPUSHs(&PL_sv_undef);
685 3 0 const char *kstr = yyjson_mut_get_str(it->cur_key);
686 3 0 size_t klen = yyjson_mut_get_len(it->cur_key);
688 0 3 if (!is_ascii(kstr, klen))
690 0 3 XPUSHs(sv_2mortal(sv));
700 1 5 if (d->owner)
706 1 4 if (!result)
707 1 0 croak("jpatch: %s at index %zu", perr.msg ? perr.msg : "patch failed", perr.idx);
709 4 0 yyjson_mut_doc_set_root(d->doc, result);
711 0 4 XPUSHs(doc_sv);
721 1 1 if (d->owner)
726 0 1 if (!result)
729 1 0 yyjson_mut_doc_set_root(d->doc, result);
731 0 1 XPUSHs(doc_sv);
741 0 5005 if (!doc) croak("jfrom: failed to create document");
759 0 5005 XPUSHs(sv_2mortal(result));
773 1 0 if (!val || !yyjson_mut_is_obj(val))
0 1 if (!val || !yyjson_mut_is_obj(val))
778 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));
779 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) {
793 3 0 bool eq = yyjson_mut_equals(a->root, b->root);
794 0 3 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
2 1 XPUSHs(eq ? &PL_sv_yes : &PL_sv_no);
808 0 1 if (!val)
815 0 1 if (!json)
821 0 1 XPUSHs(sv_2mortal(result));
839 0 5 if (!idoc)
847 0 5 if (!new_val)
850 2 3 if (path_len == 0) {
851 1 1 if (d->owner)
853 1 0 yyjson_mut_doc_set_root(d->doc, new_val);
858 3 0 bool ok = yyjson_mut_ptr_setx(d->root, path, path_len, new_val,
860 1 2 if (!ok) {
862 1 0 ok = yyjson_mut_ptr_addx(d->root, path, path_len, new_val,
865 0 3 if (!ok)
866 0 0 croak("jraw: failed to set path %.*s: %s",
870 0 4 XPUSHs(doc_sv);
888 2 0 static inline bool is_mut_int(yyjson_mut_val *v) {
889 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);
892 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)
893 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)
894 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)
895 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)
896 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)
897 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)
898 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)
899 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)
912 1 3 if (!idoc)
913 1 0 croak("jread: %s: %s", path, err.msg ? err.msg : "read failed");
917 0 3 if (!mdoc)
922 0 3 XPUSHs(sv_2mortal(result));
938 0 3 if (!tmp_doc)
946 0 3 if (!ok)
947 0 0 croak("jwrite: %s: %s", path, werr.msg ? werr.msg : "write failed");
949 0 3 XPUSHs(doc_sv);
956 14 0 collect_paths(pTHX_ yyjson_mut_val *val, SV *prefix, AV *result) {
957 9 5 if (yyjson_mut_is_obj(val)) {
960 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) {
961 15 0 const char *kstr = yyjson_mut_get_str(key);
968 17 15 while (p < end) {
970 39 15 while (special < end && *special != '~' && *special != '/')
38 1 while (special < end && *special != '~' && *special != '/')
37 1 while (special < end && *special != '~' && *special != '/')
972 17 0 if (special > p)
974 2 15 if (special < end) {
975 1 1 if (*special == '~') sv_catpvs(path, "~0");
981 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)) {
988 4 1 } else if (yyjson_mut_is_arr(val)) {
991 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) {
997 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)) {
1019 0 6 if (!val)
1028 6 0 EXTEND(SP, count);
0 6 EXTEND(SP, count);
1029 12 6 for (SSize_t i = 0; i < count; i++) {
1051 17 0 if (!arr || !yyjson_mut_is_arr(arr)) {
1 16 if (!arr || !yyjson_mut_is_arr(arr)) {
1052 0 1 XPUSHs(&PL_sv_undef);
1058 16 0 yyjson_mut_arr_foreach(arr, idx, max, item) {
16 0 yyjson_mut_arr_foreach(arr, idx, max, item) {
30 2 yyjson_mut_arr_foreach(arr, idx, max, item) {
1061 2 28 if (key_len == 0)
1063 0 28 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))
1064 0 28 field = yyjson_mut_ptr_getn(item, key, key_len);
1066 0 30 if (!field) continue;
1069 10 20 if (yyjson_mut_is_str(field)) {
1070 10 0 if (yyjson_mut_equals_strn(field, match, match_len)) {
4 6 if (yyjson_mut_equals_strn(field, match, match_len)) {
1072 0 4 XPUSHs(sv_2mortal(result));
1079 16 4 else if (yyjson_mut_is_num(field)) {
1082 14 2 if (st == YYJSON_SUBTYPE_REAL || !SvIOK(match_sv)) {
0 14 if (st == YYJSON_SUBTYPE_REAL || !SvIOK(match_sv)) {
1084 4 10 } else if (SvIsUV(match_sv)) {
1088 4 0 : (yyjson_mut_get_sint(field) >= 0 &&
0 0 : (yyjson_mut_get_sint(field) >= 0 &&
1089 0 0 (uint64_t)yyjson_mut_get_sint(field) == (uint64_t)mv);
1094 2 8 : (mv >= 0 &&
8 0 : (mv >= 0 &&
1095 4 4 yyjson_mut_get_uint(field) == (uint64_t)mv);
1097 7 9 if (eq) {
1099 0 7 XPUSHs(sv_2mortal(result));
1104 3 1 else if (yyjson_mut_is_bool(field)) {
1106 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) ||
1107 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)) {
1109 0 2 XPUSHs(sv_2mortal(result));
1114 1 0 else if (yyjson_mut_is_null(field)) {
1115 1 0 if (match_len == 4 && memcmp(match, "null", 4) == 0) {
1 0 if (match_len == 4 && memcmp(match, "null", 4) == 0) {
1117 0 1 XPUSHs(sv_2mortal(result));
1123 0 2 XPUSHs(&PL_sv_undef);
1134 30107 5299 for (; i + 7 < len; i += 8) {
1137 0 30107 if (chunk & UINT64_C(0x8080808080808080))
1140 15872 5290 for (; i < len; i++) {
1141 9 15863 if (p[i] >= 0x80)
1161 0 2214 if (!is_ascii(str, len))
1171 11168 0 yyjson_val_to_sv(pTHX_ yyjson_val *val) {
1176 4 0 case YYJSON_TYPE_BOOL:
1179 3 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1181 11023 0 case YYJSON_TYPE_NUM: {
1183 11021 2 if (st == YYJSON_SUBTYPE_UINT)
1185 1 1 else if (st == YYJSON_SUBTYPE_SINT)
1191 10 0 case YYJSON_TYPE_STR: {
1192 10 0 const char *str = yyjson_get_str(val);
1196 6 4 if (!is_ascii(str, len))
1201 108 0 case YYJSON_TYPE_ARR: {
1204 107 1 if (count > 0)
1209 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) {
1215 21 0 case YYJSON_TYPE_OBJ: {
1218 21 0 if (count > 0)
1223 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) {
1224 1028 0 const char *kstr = yyjson_get_str(key);
1227 0 1028 if (!is_ascii(kstr, klen))
1243 86 0 yyjson_mut_val_to_sv(pTHX_ yyjson_mut_val *val) {
1248 2 0 case YYJSON_TYPE_BOOL:
1251 1 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1253 55 0 case YYJSON_TYPE_NUM: {
1255 45 10 if (st == YYJSON_SUBTYPE_UINT)
1257 10 0 else if (st == YYJSON_SUBTYPE_SINT)
1263 21 0 case YYJSON_TYPE_STR: {
1264 21 0 const char *str = yyjson_mut_get_str(val);
1267 2 19 if (!is_ascii(str, len))
1272 6 0 case YYJSON_TYPE_ARR: {
1275 6 0 if (count > 0)
1280 6 0 yyjson_mut_arr_foreach(val, idx, max, item) {
6 0 yyjson_mut_arr_foreach(val, idx, max, item) {
15 6 yyjson_mut_arr_foreach(val, idx, max, item) {
1286 1 0 case YYJSON_TYPE_OBJ: {
1289 1 0 if (count > 0)
1294 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) {
1295 3 0 const char *kstr = yyjson_mut_get_str(key);
1298 0 3 if (!is_ascii(kstr, klen))
1315 5439 0 yyjson_val_to_sv_ro(pTHX_ yyjson_val *val, SV *doc_sv) {
1320 3 0 case YYJSON_TYPE_BOOL:
1323 2 1 : SvREFCNT_inc_simple_NN(&PL_sv_no);
1325 1007 0 case YYJSON_TYPE_NUM: {
1328 1007 0 if (st == YYJSON_SUBTYPE_UINT)
1330 0 0 else if (st == YYJSON_SUBTYPE_SINT)
1338 2214 0 case YYJSON_TYPE_STR:
1340 2214 0 return new_sv_zerocopy(aTHX_
1343 1205 0 case YYJSON_TYPE_ARR: {
1346 1205 0 if (count > 0)
1351 1205 0 yyjson_arr_foreach(val, idx, max, item) {
1205 0 yyjson_arr_foreach(val, idx, max, item) {
2210 1205 yyjson_arr_foreach(val, idx, max, item) {
1358 1009 0 case YYJSON_TYPE_OBJ: {
1361 1009 0 if (count > 0)
1366 1009 0 yyjson_obj_foreach(val, idx, max, key, value) {
1009 0 yyjson_obj_foreach(val, idx, max, key, value) {
2015 1009 yyjson_obj_foreach(val, idx, max, key, value) {
1367 2015 0 const char *kstr = yyjson_get_str(key);
1370 0 2015 if (!is_ascii(kstr, klen))
1424 38 20915 if (avail < need) {
1426 38 0 SvGROW(buf, newlen);
38 0 SvGROW(buf, newlen);
1453 24533 5609 for (; i + 7 < len; i += 8) {
1457 33 24500 if ((chunk - UINT64_C(0x2020202020202020)) & ~chunk & UINT64_C(0x8080808080808080))
1464 24500 0 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
0 24500 if (HAS_ZERO(xor_quote) || HAS_ZERO(xor_bslash))
1468 17271 5609 for (; i < len; i++) {
1469 0 17271 if (escape_table[p[i]])
1478 5609 33 if (!needs_escape(s, len)) {
1497 99 33 while (s < end) {
1499 0 99 if (out + 8 > out_end) {
1508 66 33 if (!esc) {
1511 366 33 while (safe < end && !escape_table[(unsigned char)*safe])
333 33 while (safe < end && !escape_table[(unsigned char)*safe])
1514 0 66 if (out + n > out_end) {
1523 5 28 } else if (esc > 1) {
1543 0 2025 if (val == 0) {
1546 5814 2025 while (val) {
1556 1 2024 if (val < 0) {
1580 5 6684 if (depth > self->max_depth)
1583 1 6683 if (!SvOK(sv)) {
1588 3615 3068 if (SvROK(sv)) {
1591 8 3607 if (SvOBJECT(deref)) {
1592 7 1 if (self->flags & F_CONVERT_BLESSED) {
1595 0 7 PUSHMARK(SP);
1596 0 7 XPUSHs(sv);
1600 7 0 if (SvTRUE(ERRSV)) {
3 4 if (SvTRUE(ERRSV)) {
1601 3 0 SV *err = ERRSV;
1602 3 0 PUTBACK; FREETMPS; LEAVE;
1605 4 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1607 4 0 PUTBACK; FREETMPS; LEAVE;
1615 1 0 if (self->flags & F_ALLOW_BLESSED) {
1624 1 3606 if (SvTYPE(deref) < SVt_PVAV) {
1625 1 0 if (SvTRUE(deref))
1632 10 3596 if (SvTYPE(deref) == SVt_PVAV) {
1636 2017 10 for (SSize_t i = 0; i < len; i++) {
1637 2008 9 if (i) buf_cat_c(aTHX_ buf, ',');
1639 2017 0 direct_encode_sv(aTHX_ buf, elem ? *elem : &PL_sv_undef,
1646 3596 0 if (SvTYPE(deref) == SVt_PVHV) {
1652 4603 2047 while ((he = hv_iternext(hv))) {
1653 1007 3596 if (!first) buf_cat_c(aTHX_ buf, ',');
1656 0 4603 const char *kstr = HePV(he, klen);
1665 0 0 if (self->flags & F_ALLOW_UNKNOWN) {
1672 2025 1043 if (SvIOK(sv)) {
1673 0 2025 if (SvIsUV(sv))
1680 4 1039 if (SvNOK(sv)) {
1682 3 1 if (Perl_isnan(nv) || Perl_isinf(nv))
2 1 if (Perl_isnan(nv) || Perl_isinf(nv))
1688 1039 0 if (SvPOK(sv)) {
1702 0 45054 if (depth > self->max_depth)
1705 1 45053 if (!SvOK(sv))
1708 15015 30038 if (SvROK(sv)) {
1712 0 15015 if (SvOBJECT(deref)) {
1714 0 0 if (self->flags & F_CONVERT_BLESSED) {
1717 0 0 PUSHMARK(SP);
1718 0 0 XPUSHs(sv);
1722 0 0 if (SvTRUE(ERRSV)) {
0 0 if (SvTRUE(ERRSV)) {
1723 0 0 SV *err = ERRSV;
1724 0 0 PUTBACK; FREETMPS; LEAVE;
1727 0 0 SV *result = count > 0 ? POPs : &PL_sv_undef;
1729 0 0 PUTBACK; FREETMPS; LEAVE;
1737 0 0 if (self->flags & F_ALLOW_BLESSED)
1744 1 15014 if (SvTYPE(deref) < SVt_PVAV) {
1747 1 0 : yyjson_mut_bool(doc, 0);
1752 5003 0 AV *av = (AV *)deref;
1755 15009 5003 for (SSize_t i = 0; i < len; i++) {
1757 15009 0 yyjson_mut_val *v = sv_to_yyjson_val(aTHX_ doc, elem ? *elem : &PL_sv_undef, self, depth + 1);
1764 10011 0 HV *hv = (HV *)deref;
1768 15015 10011 while ((he = hv_iternext(hv))) {
1770 0 15015 const char *kstr = HePV(he, klen);
1772 15015 0 yyjson_mut_val *k = yyjson_mut_strncpy(doc, kstr, klen);
1780 0 0 if (self->flags & F_ALLOW_UNKNOWN)
1787 25029 5009 if (SvIOK(sv)) {
1788 0 25029 if (SvIsUV(sv))
1789 0 0 return yyjson_mut_uint(doc, (uint64_t)SvUVX(sv));
1790 25029 0 return yyjson_mut_sint(doc, (int64_t)SvIVX(sv));
1793 2 5007 if (SvNOK(sv)) {
1795 2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
2 0 if (Perl_isnan(nv) || Perl_isinf(nv))
1800 5007 0 if (SvPOK(sv)) {
1803 5007 0 return yyjson_mut_strncpy(doc, str, len);
1821 3 20 if (!doc)
1825 0 20 if (!root) {
1833 0 20 XPUSHs(sv_2mortal(result));
1853 0 47 XPUSHs(result);
1867 1 1214 if (!doc)
1871 0 1214 if (!root) {
1883 1213 1 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
1211 2 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
1884 1209 2 SV *anchor = SvROK(result) ? SvRV(result) : result;
1889 0 1214 XPUSHs(sv_2mortal(result));
2159 16 0 if (val) get_self(aTHX_ self_sv)->flags |= F_UTF8;
2165 6 0 if (val) get_self(aTHX_ self_sv)->flags |= F_PRETTY;
2171 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CANONICAL;
2177 2 1 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_NONREF;
2183 0 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_UNKNOWN;
2189 1 0 if (val) get_self(aTHX_ self_sv)->flags |= F_ALLOW_BLESSED;
2195 2 0 if (val) get_self(aTHX_ self_sv)->flags |= F_CONVERT_BLESSED;
2214 6 0 if (self->flags & F_UTF8) {
2222 0 6 if (!doc)
2226 0 6 if (!root) {
2232 1 5 if (!(self->flags & F_ALLOW_NONREF)) {
2234 1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
1 0 if (t != YYJSON_TYPE_ARR && t != YYJSON_TYPE_OBJ) {
2254 1 0 if (self->flags & F_UTF8) {
2262 0 1 if (!idoc)
2267 0 1 if (!mdoc)
2283 1 19 if (!(self->flags & F_ALLOW_NONREF)) {
2284 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))
2292 12 7 if (!(self->flags & F_PRETTY)) {
2300 0 7 if (!(self->flags & F_UTF8))
2318 0 5 if (!json)
2323 5 0 if (self->flags & F_UTF8) {
2358 0 0 if (!doc)
2362 0 0 if (!root) {
2382 0 0 if (!doc)
2386 0 0 if (!root) {
2400 0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
0 0 if (rtype != YYJSON_TYPE_NULL && rtype != YYJSON_TYPE_BOOL) {
2401 0 0 SV *anchor = SvROK(RETVAL) ? SvRV(RETVAL) : RETVAL;
2421 0 2 if (!json)
2435 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"))
2439 2 0 RETVAL = yyjson_mut_equals(a->root, b->root)
2440 1 1 ? &PL_sv_yes : &PL_sv_no;