Branch Coverage

XS.xs
Criterion Covered Total %
branch 1307 2012 64.9


line true false branch
434 58 0 if ( !cxt->mojo_boolean_stash )
436 58 0 if ( !cxt->jsonold_boolean_stash )
461 0 116 if (!SvOBJECT(sv) || !SvSTASH(sv)) {
0 0 if (!SvOBJECT(sv) || !SvSTASH(sv)) {
477 200 0 if (SvLEN (sv) > SvCUR (sv) + 1)
495 2791 0 if (LIKELY(len >= 2
1308 1483 if (LIKELY(len >= 2
1308 1483 if (LIKELY(len >= 2
1306 2 if (LIKELY(len >= 2
507 4 1481 UV c = utf8n_to_uvuni (s, len, clen,
573 0 1335 if (UNLIKELY(ch < 0x000080))
575 736 599 else if (LIKELY(ch < 0x000800))
578 267 332 else if (ch < 0x010000)
582 332 0 else if (ch < 0x110000)
597 50 303 : offset;
723 17 62 if (*s == '-')
741 17 62 return neg ? -accum : accum;
748 26 39 return (stash == gv_stashpvs ("Math::BigInt", 0) || stash == gv_stashpvs ("Math::BigFloat", 0)) ? 1 : 0;
25 1 return (stash == gv_stashpvs ("Math::BigInt", 0) || stash == gv_stashpvs ("Math::BigFloat", 0)) ? 1 : 0;
761 73 56 return (stash == bstash || stash == mstash || stash == oldstash) ? 1 : 0;
73 0 return (stash == bstash || stash == mstash || stash == oldstash) ? 1 : 0;
0 73 return (stash == bstash || stash == mstash || stash == oldstash) ? 1 : 0;
770 27 1819 if (svt < SVt_PVAV)
773 24 3 char *pv = svt ? SvPV_nomg (sv, len) : 0;
9 15 char *pv = svt ? SvPV_nomg (sv, len) : 0;
775 9 18 if (len == 1) {
776 5 4 if (*pv == '1')
778 3 1 else if (*pv == '0')
791 7 1833 if (!SvROK (scalar))
796 1819 14 if (!SvOBJECT (scalar) && ref_bool_type (aTHX_ scalar) >= 0)
0 1819 if (!SvOBJECT (scalar) && ref_bool_type (aTHX_ scalar) >= 0)
799 14 1819 if (SvOBJECT (scalar) && is_bool_obj (aTHX_ scalar))
2 12 if (SvOBJECT (scalar) && is_bool_obj (aTHX_ scalar))
827 3174 57494 if (UNLIKELY(enc->cur + len >= enc->end))
830 3174 0 SvGROW (enc->sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
1860 1314 SvGROW (enc->sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
860 48006 2349 while (str < end)
867 46116 1890 if (LIKELY(ch >= 0x20 && ch < 0x80)) /* most common case */
39756 6360 if (LIKELY(ch >= 0x20 && ch < 0x80)) /* most common case */
870 225 39531 if (UNLIKELY(ch == '"')) /* but with slow exceptions */
877 414 39117 else if (UNLIKELY(ch == '\\'))
884 39 39078 else if (UNLIKELY(ch == '/' && (enc->json.flags & F_ESCAPE_SLASH)))
1 38 else if (UNLIKELY(ch == '/' && (enc->json.flags & F_ESCAPE_SLASH)))
919 3637 4053 if (is_utf8 && !(enc->json.flags & F_BINARY))
1620 2017 if (is_utf8 && !(enc->json.flags & F_BINARY))
923 0 1620 if (clen == (STRLEN)-1)
932 6360 1330 if (uch < 0x80/*0x20*/ || uch >= enc->limit)
5195 1165 if (uch < 0x80/*0x20*/ || uch >= enc->limit)
934 5015 1510 if (enc->json.flags & F_BINARY)
944 320 1190 else if (uch >= 0x10000UL)
946 0 320 if (uch >= 0x110000UL)
970 8 1157 else if (enc->json.flags & F_LATIN1)
976 0 1157 else if (enc->json.flags & F_BINARY)
982 915 242 else if (is_utf8)
990 1851 915 while (--clen);
1016 32 3698 if (enc->json.flags & F_INDENT)
1035 40 3812 if (enc->json.flags & F_INDENT)
1046 8 1204 if (enc->json.flags & F_INDENT)
1048 0 1204 else if (enc->json.flags & F_SPACE_AFTER)
1060 1 897 if (enc->indent >= enc->json.max_depth)
1063 875 22 if (UNLIKELY (SvOK (typesv)))
875 0 if (UNLIKELY (SvOK (typesv)))
0 875 if (UNLIKELY (SvOK (typesv)))
0 875 if (UNLIKELY (SvOK (typesv)))
1065 22 0 if (SvROK (typesv) &&
16 6 if (SvROK (typesv) &&
1066 11 5 SvOBJECT (SvRV (typesv)) &&
1070 11 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
11 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
11 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 11 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
11 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 11 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
1071 11 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
11 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
1075 0 11 if (UNLIKELY (!typesv_ref))
1076 0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
1080 0 11 SvGETMAGIC (typesv);
0 0 SvGETMAGIC (typesv);
1081 0 11 if (!SvOK (typesv))
0 0 if (!SvOK (typesv))
0 0 if (!SvOK (typesv))
1082 0 0 croak ("no array alternative in anyof was specified for '%s'",
1087 0 22 if (UNLIKELY (!SvROK (typesv)))
1088 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1092 9 13 if (!SvOBJECT (SvRV (typesv)) && SvTYPE (SvRV (typesv)) == SVt_PVAV)
9 0 if (!SvOBJECT (SvRV (typesv)) && SvTYPE (SvRV (typesv)) == SVt_PVAV)
1095 0 9 if (len != av_len (typeav))
1096 0 0 croak ("array '%s' has different number of elements as in specified type '%s'",
0 0 croak ("array '%s' has different number of elements as in specified type '%s'",
1100 13 0 else if (SvOBJECT (SvRV (typesv)) &&
13 0 else if (SvOBJECT (SvRV (typesv)) &&
1104 13 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
13 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
13 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 13 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
13 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 13 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
1105 13 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ARRAYOF_CLASS)))
13 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ARRAYOF_CLASS)))
1108 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1113 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1120 887 10 if (len >= 0)
1124 1736 872 for (i = 0; i <= len; ++i)
1128 23 1713 if (typeav)
1131 23 0 if (typerv)
1137 1734 2 if (svp)
1142 849 872 if (i < len)
1157 1 744 if (He_IS_SVKEY(he))
1160 1 0 SV *sv = HeSVKEY (he);
1 0 SV *sv = HeSVKEY (he);
1161 1 0 *key = SvPV (sv, len);
1172 4 741 if (utf8) *klen = -(*klen);
1182 7 738 if (enc->json.flags & F_SPACE_BEFORE) encode_space (aTHX_ enc);
1184 7 738 if (enc->json.flags & F_SPACE_AFTER ) encode_space (aTHX_ enc);
1199 198 118 if (!(cmp = memcmp (HeKEY (b), HeKEY (a), lb < la ? lb : la)))
1210 371 0 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
0 371 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
9 362 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
371 0 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
0 371 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
13 358 return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
1219 1 392 if (enc->indent >= enc->json.max_depth)
1222 375 17 if (UNLIKELY (SvOK (typesv)))
375 0 if (UNLIKELY (SvOK (typesv)))
0 375 if (UNLIKELY (SvOK (typesv)))
0 375 if (UNLIKELY (SvOK (typesv)))
1224 17 0 if (SvROK (typesv) &&
6 11 if (SvROK (typesv) &&
1225 4 2 SvOBJECT (SvRV (typesv)) &&
1229 4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 4 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 4 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
1230 4 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
4 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
1234 0 4 if (UNLIKELY (!typesv_ref))
1235 0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
1239 0 4 SvGETMAGIC (typesv);
0 0 SvGETMAGIC (typesv);
1240 0 4 if (!SvOK (typesv))
0 0 if (!SvOK (typesv))
0 0 if (!SvOK (typesv))
1241 0 0 croak ("no hash alternative in anyof was specified for '%s'",
1246 0 17 if (UNLIKELY (!SvROK (typesv)))
1247 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1251 13 4 if (!SvOBJECT (SvRV (typesv)) && SvTYPE (SvRV (typesv)) == SVt_PVHV)
13 0 if (!SvOBJECT (SvRV (typesv)) && SvTYPE (SvRV (typesv)) == SVt_PVHV)
1253 4 0 else if (SvOBJECT (SvRV (typesv)) &&
4 0 else if (SvOBJECT (SvRV (typesv)) &&
1257 4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 4 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
4 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 4 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
1258 4 0 if (LIKELY (name && strEQ (name, JSON_TYPE_HASHOF_CLASS)))
4 0 if (LIKELY (name && strEQ (name, JSON_TYPE_HASHOF_CLASS)))
1261 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1266 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1276 240 152 if (enc->json.flags & F_CANONICAL && !SvTIED_mg((SV*)hv, PERL_MAGIC_tied))
0 240 if (enc->json.flags & F_CANONICAL && !SvTIED_mg((SV*)hv, PERL_MAGIC_tied))
0 0 if (enc->json.flags & F_CANONICAL && !SvTIED_mg((SV*)hv, PERL_MAGIC_tied))
1280 0 240 if (SvMAGICAL (hv))
1288 0 0 while (hv_iternext (hv))
1294 234 6 if (count)
1301 0 234 if (count > STACK_HES)
1308 585 234 while ((he = hv_iternext (hv)))
1311 585 0 if (HeKLEN (he) < 0 || HeKUTF8 (he))
3 582 if (HeKLEN (he) < 0 || HeKUTF8 (he))
1317 231 3 if (fast)
1333 3 0 FREETMPS;
1339 585 233 while (count--)
1349 29 556 if (UNLIKELY (PTR2ul (typehv)))
1352 0 29 if (UNLIKELY (!typesv_ref))
1358 0 585 encode_sv (aTHX_ enc, UNLIKELY(SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he), typesv);
1360 351 233 if (count)
1369 5 147 if (hv_iterinit (hv) || SvMAGICAL (hv))
1 4 if (hv_iterinit (hv) || SvMAGICAL (hv))
1370 148 0 if ((he = hv_iternext (hv)))
1383 0 160 if (UNLIKELY (PTR2ul (typehv)))
1386 0 0 if (UNLIKELY (!typesv_ref))
1392 1 159 encode_sv (aTHX_ enc, UNLIKELY(SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he), typesv);
1394 144 12 if (!(he = hv_iternext (hv)))
1432 9 2 if (isref && SvAMAGIC(sv))
9 0 if (isref && SvAMAGIC(sv))
9 0 if (isref && SvAMAGIC(sv))
9 0 if (isref && SvAMAGIC(sv))
1435 2 0 else if (!MyAMG(sv) && !(enc->json.flags & F_ALLOW_STRINGIFY)) {
2 0 else if (!MyAMG(sv) && !(enc->json.flags & F_ALLOW_STRINGIFY)) {
2 0 else if (!MyAMG(sv) && !(enc->json.flags & F_ALLOW_STRINGIFY)) {
1436 0 2 if (isref && !(enc->json.flags & F_ALLOW_UNKNOWN))
0 0 if (isref && !(enc->json.flags & F_ALLOW_UNKNOWN))
1437 0 0 croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1",
1443 9 0 if (type != SVt_PVAV && type != SVt_PVHV && type != SVt_PVFM) {
9 0 if (type != SVt_PVAV && type != SVt_PVHV && type != SVt_PVFM) {
9 0 if (type != SVt_PVAV && type != SVt_PVHV && type != SVt_PVFM) {
1448 0 9 SvSETMAGIC(pv);
1449 0 9 str = SvPVutf8_force(pv, len);
1470 0 9 if (!len) {
1477 0 0 if (SvGMAGICAL(sv)) mg_get(sv);
1478 0 0 if (MyAMG(sv)) { /* force a RV here */
0 0 if (MyAMG(sv)) { /* force a RV here */
1493 0 0 TAINT_IF(pv && SvTAINTED(pv));
0 0 TAINT_IF(pv && SvTAINTED(pv));
0 0 TAINT_IF(pv && SvTAINTED(pv));
0 0 TAINT_IF(pv && SvTAINTED(pv));
1494 0 0 if (pv && SvPOK(pv)) {
0 0 if (pv && SvPOK(pv)) {
1495 0 0 str = SvPVutf8_force(pv, len);
1505 9 0 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
9 0 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
9 0 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
9 0 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
9 0 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
0 9 if (UNLIKELY(isref == 1 && (enc->json.flags & F_ALLOW_BIGNUM) && str && str[0] == '+')) {
1510 9 0 if (UNLIKELY(
9 0 if (UNLIKELY(
9 0 if (UNLIKELY(
9 0 if (UNLIKELY(
9 0 if (UNLIKELY(
6 3 if (UNLIKELY(
0 6 if (UNLIKELY(
6 3 if (UNLIKELY(
2 4 if (UNLIKELY(
4 5 if (UNLIKELY(
2 2 if (UNLIKELY(
7 2 if (UNLIKELY(
1517 7 0 if (is_bignum_obj (aTHX_ SvRV (sv)))
1519 4 3 if (enc->json.infnan_mode == 0) {
1521 4 0 if (pv) SvREFCNT_dec(pv);
1523 3 0 } else if (enc->json.infnan_mode == 3) {
1524 2 1 if (memEQc(str, "NaN") || memEQc(str, "nan"))
0 2 if (memEQc(str, "NaN") || memEQc(str, "nan"))
1526 1 1 else if (memEQc(str, "inf"))
1530 3 0 if (pv) SvREFCNT_dec(pv);
1535 0 2 if (!str)
1538 0 2 if (isref != 1)
1541 0 2 if (isref != 1)
1550 35 28 if (is_bool_obj (aTHX_ sv))
1552 3 32 if (as_string)
1554 35 0 if (SvIV_nomg (sv))
20 15 if (SvIV_nomg (sv))
1558 3 32 if (as_string)
1561 0 28 else if (force_conversion && enc->json.flags & F_CONV_BLESSED)
0 0 else if (force_conversion && enc->json.flags & F_CONV_BLESSED)
1563 0 0 if (as_string)
1565 0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
0 0 if (SvTRUE_nomg (sv))
1569 0 0 if (as_string)
1583 5 22 if (bool_type == 1)
1585 3 19 else if (bool_type == 0)
1605 51 29 if (UNLIKELY (SvOBJECT (sv)))
1607 28 23 if (!encode_bool_obj (aTHX_ enc, sv, 0, 0))
1610 7 21 if ((enc->json.flags & F_ALLOW_TAGS)
1611 6 1 && (method = gv_fetchmethod_autoload (stash, "FREEZE", 0)))
1617 0 6 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
0 6 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
1618 0 6 EXTEND (SP, 2);
1628 2 4 if (SvROK (TOPs) && SvRV (TOPs) == sv)
0 2 if (SvROK (TOPs) && SvRV (TOPs) == sv)
1629 0 0 croak ("%s::FREEZE method returned same object as was passed instead of a new one",
0 0 croak ("%s::FREEZE method returned same object as was passed instead of a new one",
1630 0 0 HvNAME (SvSTASH (sv)));
0 0 HvNAME (SvSTASH (sv)));
0 0 HvNAME (SvSTASH (sv)));
0 0 HvNAME (SvSTASH (sv)));
1634 6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
6 0 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
0 6 encode_str (aTHX_ enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash));
1639 255 6 while (count)
1644 249 6 if (count)
1653 6 0 FREETMPS; LEAVE;
1655 18 4 else if ((enc->json.flags & F_CONV_BLESSED)
1656 7 11 && (method = gv_fetchmethod_autoload (stash, "TO_JSON", 0)))
1660 0 7 ENTER; SAVETMPS; PUSHMARK (SP);
1662 0 7 XPUSHs (rv);
1670 3 4 if (SvROK (TOPs) && SvRV (TOPs) == sv)
1 2 if (SvROK (TOPs) && SvRV (TOPs) == sv)
1671 1 0 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
1 0 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
0 1 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
0 0 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
1 0 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
0 1 croak ("%s::TO_JSON method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv)));
1678 6 0 FREETMPS; LEAVE;
1680 9 6 else if ((enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ sv))
9 0 else if ((enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ sv))
1682 2 4 else if (enc->json.flags & F_CONV_BLESSED)
1684 2 2 else if (enc->json.flags & F_ALLOW_BLESSED)
1687 0 2 croak ("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)",
1691 26 3 else if (svt < SVt_PVAV && svt != SVt_PVGV && svt != SVt_PVHV && svt != SVt_PVAV)
24 2 else if (svt < SVt_PVAV && svt != SVt_PVGV && svt != SVt_PVHV && svt != SVt_PVAV)
24 0 else if (svt < SVt_PVAV && svt != SVt_PVGV && svt != SVt_PVHV && svt != SVt_PVAV)
24 0 else if (svt < SVt_PVAV && svt != SVt_PVGV && svt != SVt_PVHV && svt != SVt_PVAV)
1693 19 5 if (!encode_bool_ref (aTHX_ enc, sv))
1695 0 19 if (enc->json.flags & F_ALLOW_STRINGIFY)
1697 7 12 else if (enc->json.flags & F_ALLOW_UNKNOWN)
1700 0 12 croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1",
1704 2 3 else if (enc->json.flags & F_ALLOW_UNKNOWN)
1707 0 3 croak ("encountered %s, but JSON can only represent references to arrays or hashes",
1716 95 12 if (!SvROK (sv))
1718 8 87 if (UNLIKELY (sv == &PL_sv_yes))
1720 6 81 else if (UNLIKELY (sv == &PL_sv_no))
1722 1 80 else if (!SvOK (sv))
1 0 else if (!SvOK (sv))
1 0 else if (!SvOK (sv))
1724 80 0 else if (SvTRUE_nomg (sv))
0 80 else if (SvTRUE_nomg (sv))
0 0 else if (SvTRUE_nomg (sv))
0 0 else if (SvTRUE_nomg (sv))
46 34 else if (SvTRUE_nomg (sv))
46 0 else if (SvTRUE_nomg (sv))
15 31 else if (SvTRUE_nomg (sv))
12 3 else if (SvTRUE_nomg (sv))
6 6 else if (SvTRUE_nomg (sv))
37 9 else if (SvTRUE_nomg (sv))
34 0 else if (SvTRUE_nomg (sv))
18 16 else if (SvTRUE_nomg (sv))
2 16 else if (SvTRUE_nomg (sv))
16 2 else if (SvTRUE_nomg (sv))
12 4 else if (SvTRUE_nomg (sv))
28 6 else if (SvTRUE_nomg (sv))
0 0 else if (SvTRUE_nomg (sv))
1734 9 3 if (UNLIKELY (SvOBJECT (sv)))
1736 0 9 if (!encode_bool_obj (aTHX_ enc, sv, 1, 0))
1737 0 0 croak ("encountered object '%s', but convert_blessed is not enabled",
1740 3 0 else if (svt < SVt_PVAV && svt != SVt_PVGV)
3 0 else if (svt < SVt_PVAV && svt != SVt_PVGV)
1742 0 3 if (!encode_bool_ref (aTHX_ enc, sv))
1743 0 0 croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1",
1747 0 0 croak ("encountered %s, but does not represent boolean",
1755 0 31 *iv = SvIV_nomg (sv);
1759 9 22 if (!*is_neg)
1761 0 9 *uv = SvUV_nomg (sv);
1774 3 4092 SvGETMAGIC (sv);
0 3 SvGETMAGIC (sv);
1775 0 4095 SvGETMAGIC (typesv);
0 0 SvGETMAGIC (typesv);
1777 3661 434 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
3661 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
3661 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
3661 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
3661 434 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
20 3641 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
20 4075 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
8 12 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_REQUIRE_TYPES) && !(enc->json.flags & F_TYPE_ALL_STRING)))
1778 0 8 croak ("type for '%s' was not specified", SvPV_nolen (sv));
1780 1426 2661 if (SvROK (sv) && !SvOBJECT (SvRV (sv)))
1323 103 if (SvROK (sv) && !SvOBJECT (SvRV (sv)))
1783 393 930 if (svt == SVt_PVHV)
1788 898 32 else if (svt == SVt_PVAV)
1795 2401 395 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
2401 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
2401 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
2401 0 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
2401 395 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
9 2392 if (UNLIKELY (!(SvOK (typesv)) && (enc->json.flags & F_TYPE_ALL_STRING)))
1798 2392 404 if (UNLIKELY (SvOK (typesv)))
2392 0 if (UNLIKELY (SvOK (typesv)))
0 2392 if (UNLIKELY (SvOK (typesv)))
0 2392 if (UNLIKELY (SvOK (typesv)))
1800 55 349 if (SvROK (sv) && SvOBJECT (SvRV (sv)) && !(enc->json.flags & (F_ALLOW_TAGS|F_CONV_BLESSED|F_ALLOW_BLESSED)) && !is_bool_obj (aTHX_ SvRV (sv)) && !is_bignum_obj (aTHX_ SvRV (sv)))
52 3 if (SvROK (sv) && SvOBJECT (SvRV (sv)) && !(enc->json.flags & (F_ALLOW_TAGS|F_CONV_BLESSED|F_ALLOW_BLESSED)) && !is_bool_obj (aTHX_ SvRV (sv)) && !is_bignum_obj (aTHX_ SvRV (sv)))
52 0 if (SvROK (sv) && SvOBJECT (SvRV (sv)) && !(enc->json.flags & (F_ALLOW_TAGS|F_CONV_BLESSED|F_ALLOW_BLESSED)) && !is_bool_obj (aTHX_ SvRV (sv)) && !is_bignum_obj (aTHX_ SvRV (sv)))
33 19 if (SvROK (sv) && SvOBJECT (SvRV (sv)) && !(enc->json.flags & (F_ALLOW_TAGS|F_CONV_BLESSED|F_ALLOW_BLESSED)) && !is_bool_obj (aTHX_ SvRV (sv)) && !is_bignum_obj (aTHX_ SvRV (sv)))
1 32 if (SvROK (sv) && SvOBJECT (SvRV (sv)) && !(enc->json.flags & (F_ALLOW_TAGS|F_CONV_BLESSED|F_ALLOW_BLESSED)) && !is_bool_obj (aTHX_ SvRV (sv)) && !is_bignum_obj (aTHX_ SvRV (sv)))
1801 0 1 croak ("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)", SvPV_nolen (sv));
1803 83 320 if (!SvIOKp (typesv))
1805 83 0 if (SvROK (typesv) &&
83 0 if (SvROK (typesv) &&
1806 83 0 SvOBJECT (SvRV (typesv)) &&
1810 83 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
83 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
83 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 83 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
83 0 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
0 83 char *name = LIKELY (!!stash) ? HvNAME (stash) : NULL;
1811 83 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
83 0 if (LIKELY (name && strEQ (name, JSON_TYPE_ANYOF_CLASS)))
1815 0 83 if (UNLIKELY (!typesv_ref))
1816 0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
0 0 croak ("incorrectly constructed anyof type (%s, 0x%x) was specified for '%s'",
1820 0 83 SvGETMAGIC (typesv);
0 0 SvGETMAGIC (typesv);
1821 0 83 if (!SvIOKp (typesv))
1822 0 0 croak ("no scalar alternative in anyof was specified for '%s'", SvPV_nolen (sv));
1825 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1830 0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
0 0 croak ("encountered type (%s, 0x%x) was specified for '%s'",
1837 401 2394 if (UNLIKELY (type))
1845 2390 4 if (UNLIKELY (sv == &PL_sv_yes || sv == &PL_sv_no)) type = JSON_TYPE_BOOL;
4 2386 if (UNLIKELY (sv == &PL_sv_yes || sv == &PL_sv_no)) type = JSON_TYPE_BOOL;
1846 78 2308 else if (SvNOKp (sv)) type = JSON_TYPE_FLOAT;
1847 872 1436 else if (SvIOKp (sv)) type = JSON_TYPE_INT;
1848 1314 122 else if (SvPOKp (sv)) type = JSON_TYPE_STRING;
1849 80 42 else if (SvROK (sv)) process_ref = 1;
1850 42 0 else if (!SvOK (sv)) can_be_null = 1;
42 0 else if (!SvOK (sv)) can_be_null = 1;
42 0 else if (!SvOK (sv)) can_be_null = 1;
1853 159 2636 if (can_be_null && !SvOK (sv))
55 104 if (can_be_null && !SvOK (sv))
55 0 if (can_be_null && !SvOK (sv))
55 0 if (can_be_null && !SvOK (sv))
1855 107 2633 else if (type == JSON_TYPE_BOOL)
1857 161 2472 else if (type == JSON_TYPE_FLOAT)
1873 19 142 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ SvRV (sv)))
19 0 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ SvRV (sv)))
16 3 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ SvRV (sv)))
16 0 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM) && is_bignum_obj (aTHX_ SvRV (sv)))
1876 16 145 if (UNLIKELY (is_bigobj))
1879 0 16 char *str = SvPV_nomg (sv, len);
1880 0 16 if (UNLIKELY (str[0] == '+'))
1885 14 2 if (UNLIKELY (memEQc (str, "NaN") || memEQc (str, "nan")))
0 14 if (UNLIKELY (memEQc (str, "NaN") || memEQc (str, "nan")))
1890 2 12 else if (UNLIKELY (memEQc (str, "inf")))
1895 2 10 else if (UNLIKELY (memEQc (str, "-inf")))
1909 116 29 else if (SvNOKp (sv))
1915 15 14 if (enc->json.flags & F_ALLOW_BIGNUM)
1923 15 0 str = SvPV_nomg (sv, len);
1926 2 13 if (UNLIKELY (numtype & IS_NUMBER_INFINITY))
1927 1 1 nv = (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF;
1928 1 12 else if (UNLIKELY (numtype & IS_NUMBER_NAN))
1930 0 12 else if (UNLIKELY (!numtype))
1931 0 0 nv = SvNV_nomg (sv);
1942 12 0 errsv = ERRSV;
1943 0 12 if (SvROK (errsv))
1945 12 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
1954 0 12 str = SvPV (pv, len);
1955 0 12 if (UNLIKELY (str[0] == '+'))
1987 0 14 nv = SvNV_nomg (sv);
1992 139 22 if (LIKELY (!is_bigobj))
1999 61 78 if (force_conversion)
2005 16 45 if (UNLIKELY(isinf(nv)))
2007 8 8 nv = (nv > 0) ? NV_MAX : -NV_MAX;
2011 6 55 if (UNLIKELY(isnan(nv)))
2016 63 15 else if (enc->json.infnan_mode == 0)
2021 2 61 if (UNLIKELY(isinf(nv)))
2024 1 1 inf_or_nan = (nv > 0) ? 1 : 2;
2030 3 58 if (UNLIKELY(isnan(nv)))
2085 3 131 if (UNLIKELY(strEQc(enc->cur, STR_INF)))
2106 3 128 (UNLIKELY(strEQc(enc->cur, STR_NAN)))
2109 25 103 else if (*enc->cur == '-') {
2119 3 22 if (UNLIKELY(strEQc(enc->cur+1, STR_INF)))
2134 6 16 (UNLIKELY(strEQc(enc->cur+1, STR_NAN)))
2138 15 119 if (UNLIKELY(inf_or_nan)) {
2140 5 15 if (enc->json.infnan_mode == 0) {
2143 5 10 else if (enc->json.infnan_mode == 1) {
2150 5 5 else if (enc->json.infnan_mode == 3) {
2151 1 4 if (inf_or_nan == 1)
2153 1 3 else if (inf_or_nan == 2)
2155 3 0 else if (inf_or_nan == 3)
2158 0 5 else if (enc->json.infnan_mode != 2) {
2166 78 83 if (!force_conversion && SvPOKp (sv) && !strEQ(enc->cur, SvPVX (sv))) {
4 74 if (!force_conversion && SvPOKp (sv) && !strEQ(enc->cur, SvPVX (sv))) {
3 1 if (!force_conversion && SvPOKp (sv) && !strEQ(enc->cur, SvPVX (sv))) {
2178 138 20 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
55 83 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
30 25 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
30 83 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
25 5 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
73 12 if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart)) || (!force_conversion && SvIOK(sv))
2179 85 23 || strchr(enc->cur,'e') || strchr(enc->cur,'E') || strchr(savecur,'.')
85 0 || strchr(enc->cur,'e') || strchr(enc->cur,'E') || strchr(savecur,'.')
2193 1014 1458 else if (type == JSON_TYPE_INT)
2203 20 994 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM))
20 0 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM))
16 4 if (UNLIKELY (SvROK (sv) && SvOBJECT (SvRV (sv))) && (enc->json.flags & F_ALLOW_BIGNUM))
2206 16 0 int is_bigint = (stash && stash == gv_stashpvs ("Math::BigInt", 0));
8 8 int is_bigint = (stash && stash == gv_stashpvs ("Math::BigInt", 0));
2207 16 0 int is_bigfloat = (stash && stash == gv_stashpvs ("Math::BigFloat", 0));
8 8 int is_bigfloat = (stash && stash == gv_stashpvs ("Math::BigFloat", 0));
2209 8 8 if (is_bigint || is_bigfloat)
8 0 if (is_bigint || is_bigfloat)
2214 8 8 if (is_bigfloat)
2222 0 8 PUSHMARK (SP);
2223 0 8 XPUSHs (sv);
2229 8 0 is_negative = SvTRUEx (POPs);
0 8 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 8 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 8 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
8 0 is_negative = SvTRUEx (POPs);
8 0 is_negative = SvTRUEx (POPs);
5 3 is_negative = SvTRUEx (POPs);
0 5 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
3 5 is_negative = SvTRUEx (POPs);
0 0 is_negative = SvTRUEx (POPs);
2232 0 8 PUSHMARK (SP);
2233 0 8 XPUSHs (sv);
2241 3 5 call_method (is_negative ? "bceil" : "bfloor", G_SCALAR);
2248 0 16 str = SvPV_nomg (sv, len);
2249 0 16 if (UNLIKELY (str[0] == '+'))
2255 14 2 if (UNLIKELY (strEQc (str, "NaN") || strEQc (str, "nan")))
0 14 if (UNLIKELY (strEQc (str, "NaN") || strEQc (str, "nan")))
2259 2 12 else if (UNLIKELY (strEQc (str, "inf")))
2266 2 10 else if (UNLIKELY (strEQc (str, "-inf")))
2283 8 8 if (is_bigfloat)
2285 8 0 FREETMPS;
2293 915 83 if (SvIOK (sv))
2299 56 27 else if (SvPOKp (sv))
2302 42 14 if (numtype & IS_NUMBER_IN_UV)
2304 10 32 if (numtype & IS_NUMBER_NEG)
2307 3 7 if (LIKELY(uv <= (UV)(IV_MAX) + 1))
2319 2 12 else if (UNLIKELY (numtype & IS_NUMBER_INFINITY))
2322 1 1 if (is_neg)
2334 20 36 if ((numtype & (IS_NUMBER_GREATER_THAN_UV_MAX|IS_NUMBER_NOT_INT)) && (enc->json.flags & F_ALLOW_BIGNUM))
12 8 if ((numtype & (IS_NUMBER_GREATER_THAN_UV_MAX|IS_NUMBER_NOT_INT)) && (enc->json.flags & F_ALLOW_BIGNUM))
2341 6 6 if (numtype & IS_NUMBER_NOT_INT)
2348 6 6 if (numtype & IS_NUMBER_NOT_INT)
2362 12 0 errsv = ERRSV;
2363 0 12 if (SvROK (errsv))
2365 12 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
12 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 12 else if (SvTRUE (errsv))
2374 0 12 str = SvPV (pv, len);
2375 0 12 if (UNLIKELY (str[0] == '+'))
2389 4 40 else if (!(numtype & (IS_NUMBER_IN_UV|IS_NUMBER_INFINITY|IS_NUMBER_NAN)))
2424 943 43 if (is_neg ? iv <= 59000 && iv >= -59000
940 3 if (is_neg ? iv <= 59000 && iv >= -59000
930 10 if (is_neg ? iv <= 59000 && iv >= -59000
957 29 if (is_neg ? iv <= 59000 && iv >= -59000
2438 10 947 *enc->cur = '-'; enc->cur += i < 0 ? 1 : 0;
2449 957 0 digit = u >> 28; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0xfffffffUL) * 5;
7 950 digit = u >> 28; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0xfffffffUL) * 5;
2450 950 7 digit = u >> 27; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x7ffffffUL) * 5;
4 946 digit = u >> 27; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x7ffffffUL) * 5;
2451 946 11 digit = u >> 26; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x3ffffffUL) * 5;
5 941 digit = u >> 26; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x3ffffffUL) * 5;
2452 941 16 digit = u >> 25; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x1ffffffUL) * 5;
68 873 digit = u >> 25; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x1ffffffUL) * 5;
2465 16 13 : snprintf (enc->cur, IVUV_MAXCHARS, "%" IVdf, iv);
2468 872 114 if (!force_conversion && SvPOKp (sv) && !strEQ(savecur, SvPVX (sv))) {
19 853 if (!force_conversion && SvPOKp (sv) && !strEQ(savecur, SvPVX (sv))) {
1 18 if (!force_conversion && SvPOKp (sv) && !strEQ(savecur, SvPVX (sv))) {
2479 1378 80 else if (type == JSON_TYPE_STRING)
2481 0 1378 if (UNLIKELY (sv == &PL_sv_yes))
2487 0 1378 else if (UNLIKELY (sv == &PL_sv_no))
2493 3 1375 else if (!UNLIKELY (SvROK(sv) && SvOBJECT (SvRV(sv))) || !encode_bool_obj (aTHX_ enc, SvRV(sv), 0, 1))
3 0 else if (!UNLIKELY (SvROK(sv) && SvOBJECT (SvRV(sv))) || !encode_bool_obj (aTHX_ enc, SvRV(sv), 0, 1))
0 3 else if (!UNLIKELY (SvROK(sv) && SvOBJECT (SvRV(sv))) || !encode_bool_obj (aTHX_ enc, SvRV(sv), 0, 1))
2497 1355 20 if (SvPOKp (sv))
2504 0 20 str = SvPV_nomg (sv, len);
2511 80 0 else if (process_ref)
2513 0 0 else if (enc->json.flags & F_ALLOW_UNKNOWN)
2516 0 0 croak ("encountered perl type (%s,0x%x) that JSON cannot handle, check your input data",
2525 955 400 if (!(json->flags & F_ALLOW_NONREF) && json_nonref (aTHX_ scalar))
0 955 if (!(json->flags & F_ALLOW_NONREF) && json_nonref (aTHX_ scalar))
2534 1243 112 : enc.json.flags & F_BINARY ? 0x000080UL
2535 1040 203 : enc.json.flags & F_LATIN1 ? 0x000100UL
2536 5 1035 : 0x110000UL;
2545 677 649 if (!(enc.json.flags & (F_ASCII | F_LATIN1 | F_BINARY | F_UTF8)))
2548 200 1126 if (enc.json.flags & F_SHRINK)
2573 47 0 while (*dec->cur && *dec->cur != 0x0a && *dec->cur != 0x0d)
38 9 while (*dec->cur && *dec->cur != 0x0a && *dec->cur != 0x0d)
38 0 while (*dec->cur && *dec->cur != 0x0a && *dec->cur != 0x0d)
2584 38262 80408 if (ch > 0x20)
2586 11 38251 if (UNLIKELY(ch == '#'))
2588 9 2 if (dec->json.flags & F_RELAXED)
2596 8577 71831 else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09)
863 7714 else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09)
863 0 else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09)
861 2 else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09)
3146 3 2141 d1 = decode_hexdigit [cur [0]]; if (UNLIKELY(d1 < 0)) ERR ("exactly four hexadecimal digits expected");
3147 2 2139 d2 = decode_hexdigit [cur [1]]; if (UNLIKELY(d2 < 0)) ERR ("exactly four hexadecimal digits expected");
3148 1 2138 d3 = decode_hexdigit [cur [2]]; if (UNLIKELY(d3 < 0)) ERR ("exactly four hexadecimal digits expected");
3149 1 2137 d4 = decode_hexdigit [cur [3]]; if (UNLIKELY(d4 < 0)) ERR ("exactly four hexadecimal digits expected");
3168 0 2506 d1 = decode_hexdigit [cur [0]]; if (UNLIKELY(d1 < 0)) ERR ("exactly two hexadecimal digits expected");
3169 0 2506 d2 = decode_hexdigit [cur [1]]; if (UNLIKELY(d2 < 0)) ERR ("exactly two hexadecimal digits expected");
3183 0 0 d1 = (IV)(cur[0] - '0'); if (d1 < 0 || d1 > 7) ERR ("exactly three octal digits expected");
0 0 d1 = (IV)(cur[0] - '0'); if (d1 < 0 || d1 > 7) ERR ("exactly three octal digits expected");
3184 0 0 d2 = (IV)(cur[1] - '0'); if (d2 < 0 || d2 > 7) ERR ("exactly three octal digits expected");
0 0 d2 = (IV)(cur[1] - '0'); if (d2 < 0 || d2 > 7) ERR ("exactly three octal digits expected");
3185 0 0 d3 = (IV)(cur[2] - '0'); if (d3 < 0 || d3 > 7) ERR ("exactly three octal digits expected");
0 0 d3 = (IV)(cur[2] - '0'); if (d3 < 0 || d3 > 7) ERR ("exactly three octal digits expected");
3210 6445 121509 if (UNLIKELY(ch == endstr))
3212 7 6438 if (ch == 0x27 && !(dec->json.flags & F_ALLOW_SQUOTE)) {
0 7 if (ch == 0x27 && !(dec->json.flags & F_ALLOW_SQUOTE)) {
3218 5436 116073 else if (UNLIKELY(ch == '\\'))
3235 2 2506 if (!(dec->json.flags & F_BINARY))
3240 0 2506 if (c == (UV)-1)
3250 1 0 if (!(dec->json.flags & F_BINARY))
3254 0 0 if (c == (UV)-1)
3268 3 1799 if (hi == (UV)-1)
3270 0 1799 if (dec->json.flags & F_BINARY)
3274 372 1427 if (hi >= 0xd800) {
3275 352 20 if (hi < 0xdc00) {
3276 345 7 if (dec_cur [0] != '\\' || dec_cur [1] != 'u')
3 342 if (dec_cur [0] != '\\' || dec_cur [1] != 'u')
3284 4 338 if (lo == (UV)-1)
3287 332 6 if (lo < 0xdc00 || lo >= 0xe000)
0 332 if (lo < 0xdc00 || lo >= 0xe000)
3291 330 2 if (UNLIKELY(
325 5 if (UNLIKELY(
0 325 if (UNLIKELY(
5 325 if (UNLIKELY(
3298 9 11 else if (UNLIKELY(hi < 0xe000)) {
3322 8 3 if (UNLIKELY(
4 4 if (UNLIKELY(
2 2 if (UNLIKELY(
6 2 if (UNLIKELY(
2 4 if (UNLIKELY(
2 0 if (UNLIKELY(
2 4 if (UNLIKELY(
4 4 if (UNLIKELY(
3329 1093 677 if (hi >= 0x80)
3344 116056 17 else if (LIKELY(ch >= 0x20 && ch < 0x80)) {
114885 1171 else if (LIKELY(ch >= 0x20 && ch < 0x80)) {
3348 1171 17 else if (ch >= 0x80)
3356 60 1111 if (clen == (STRLEN)-1)
3361 1831 1111 while (--clen);
3365 1 16 else if (dec->json.flags & F_RELAXED && ch == '\t') {
1 0 else if (dec->json.flags & F_RELAXED && ch == '\t') {
3371 9 7 if (!ch)
3377 121386 2 while (cur < buf + SHORT_STRING_LEN);
3382 1 6446 if (sv)
3386 1 0 if (SvLEN (sv) <= cur + len)
3387 1 0 SvGROW (sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
1 0 SvGROW (sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
3396 1 6446 while (*dec_cur != endstr);
3400 6446 0 if (sv)
3405 435 6011 if (utf8)
3438 57 909 if (*dec->cur == '-')
3441 119 847 if (*dec->cur == '0')
3444 29 90 if (*dec->cur >= '0' && *dec->cur <= '9')
6 23 if (*dec->cur >= '0' && *dec->cur <= '9')
3447 845 2 else if (*dec->cur < '0' || *dec->cur > '9')
5 840 else if (*dec->cur < '0' || *dec->cur > '9')
3454 635 604 while (*dec->cur >= '0' && *dec->cur <= '9');
399 236 while (*dec->cur >= '0' && *dec->cur <= '9');
3457 66 887 if (*dec->cur == '.')
3461 65 1 if (*dec->cur < '0' || *dec->cur > '9')
7 58 if (*dec->cur < '0' || *dec->cur > '9')
3468 231 24 while (*dec->cur >= '0' && *dec->cur <= '9');
197 34 while (*dec->cur >= '0' && *dec->cur <= '9');
3474 892 53 if (*dec->cur == 'e' || *dec->cur == 'E')
8 884 if (*dec->cur == 'e' || *dec->cur == 'E')
3478 50 11 if (*dec->cur == '-' || *dec->cur == '+')
23 27 if (*dec->cur == '-' || *dec->cur == '+')
3481 57 4 if (*dec->cur < '0' || *dec->cur > '9')
13 44 if (*dec->cur < '0' || *dec->cur > '9')
3488 200 21 while (*dec->cur >= '0' && *dec->cur <= '9');
177 23 while (*dec->cur >= '0' && *dec->cur <= '9');
3493 847 81 if (!is_nv)
3497 7 840 if (typesv)
3501 28 819 if (*start == '-')
3523 10 6 if (numtype & IS_NUMBER_IN_UV) {
3524 2 8 if (numtype & IS_NUMBER_NEG)
3526 2 0 if (uv <= (UV)(IV_MAX) + 1)
3537 0 6 if ((sizeof (NV) == sizeof (double) && DBL_DIG >= len)
3545 2 4 if (dec->json.flags & F_ALLOW_BIGNUM) {
3553 2 0 errsv = ERRSV;
3554 0 2 if (SvROK (errsv))
3556 2 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
3570 4 77 if (typesv)
3573 2 79 if (dec->json.flags & F_ALLOW_BIGNUM) {
3581 2 0 errsv = ERRSV;
3582 0 2 if (SvROK (errsv))
3584 2 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
2 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 0 else if (SvTRUE (errsv))
0 2 else if (SvTRUE (errsv))
3608 5 4222 DEC_INC_DEPTH;
3611 5 4217 if (typesv)
3615 5 0 SvSetMagicSV (typesv, typerv);
0 5 SvSetMagicSV (typesv, typerv);
3618 29 4193 if (*dec->cur == ']')
3626 13 6364 if (typesv)
3633 1506 4871 if (!value)
3640 2658 2213 if (*dec->cur == ']')
3646 27 2186 if (*dec->cur != ',')
3653 5 2181 if (*dec->cur == ']' && dec->json.flags & F_RELAXED)
2 3 if (*dec->cur == ']' && dec->json.flags & F_RELAXED)
3681 0 2713 DEC_INC_DEPTH;
3684 2 2711 if (typesv)
3688 2 0 SvSetMagicSV (typesv, typerv);
0 2 SvSetMagicSV (typesv, typerv);
3691 17 2696 if (*dec->cur == '}')
3698 19 6590 if (UNLIKELY(allow_barekey
6 13 if (UNLIKELY(allow_barekey
6 6603 if (UNLIKELY(allow_barekey
6 0 if (UNLIKELY(allow_barekey
3701 16 6587 else if (UNLIKELY(allow_squote)) {
3702 5 11 if (*dec->cur != '"' && *dec->cur != 0x27) {
1 4 if (*dec->cur != '"' && *dec->cur != 0x27) {
3705 4 11 else if (*dec->cur == 0x27)
3710 24 6563 EXPECT_CH ('"');
3728 52845 21 if (!is_bare &&
52785 60 if (!is_bare &&
3729 52781 4 (p == e || *p < 0x20 || *(U8*)p >= 0x80 || *p == '\\'
52781 0 (p == e || *p < 0x20 || *(U8*)p >= 0x80 || *p == '\\'
52578 203 (p == e || *p < 0x20 || *(U8*)p >= 0x80 || *p == '\\'
3730 14 52564 || allow_squote))
3735 4 277 if (!key)
3738 269 8 if (!allow_dupkeys && UNLIKELY(hv_exists_ent (hv, key, 0))) {
1 268 if (!allow_dupkeys && UNLIKELY(hv_exists_ent (hv, key, 0))) {
3741 0 276 decode_ws (dec); EXPECT_CH (':');
3744 0 276 if (typesv)
3751 1 275 if (!value)
3762 46288 6297 else if (*p == endstr
3763 21 46267 || (is_bare &&
17 4 || (is_bare &&
3764 16 1 (*p == ':' || *p == ' ' || *p == 0x0a
16 0 (*p == ':' || *p == ' ' || *p == 0x0a
3765 16 0 || *p == 0x0d || *p == 0x09)))
1 15 || *p == 0x0d || *p == 0x09)))
3774 0 6303 if (UNLIKELY(p - key > I32_MAX))
3777 6298 5 if (!allow_dupkeys && UNLIKELY(hv_exists (hv, key, len))) {
6 6292 if (!allow_dupkeys && UNLIKELY(hv_exists (hv, key, len))) {
3782 6293 4 decode_ws (dec); if (*p != ':') EXPECT_CH (':');
8 6285 decode_ws (dec); if (*p != ':') EXPECT_CH (':');
3785 9 6280 if (typesv)
3792 776 5513 if (!value)
3811 1869 3919 if (*dec->cur == '}')
3817 5 3914 if (*dec->cur != ',')
3824 3 3911 if (*dec->cur == '}' && dec->json.flags & F_RELAXED)
1 2 if (*dec->cur == '}' && dec->json.flags & F_RELAXED)
3835 14 1873 if (dec->json.flags & F_HOOK)
3837 11 3 if (dec->json.cb_sk_object && HvKEYS (hv) == 1)
0 11 if (dec->json.cb_sk_object && HvKEYS (hv) == 1)
7 4 if (dec->json.cb_sk_object && HvKEYS (hv) == 1)
3847 7 0 if (LIKELY((long)he))
3850 6 1 if (cb)
3855 0 6 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
0 6 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
3856 0 6 XPUSHs (HeVAL (he));
3861 4 2 if (count == 1)
3864 4 0 PUTBACK; FREETMPS; LEAVE;
3870 2 0 PUTBACK; FREETMPS; LEAVE;
3874 8 2 if (dec->json.cb_object)
3879 0 8 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
0 8 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
3880 0 8 XPUSHs (sv_2mortal (sv));
3884 3 5 if (count == 1)
3887 3 0 PUTBACK; FREETMPS; LEAVE;
3893 5 0 PUTBACK; FREETMPS; LEAVE;
3911 0 1 if (!(dec->json.flags & F_ALLOW_TAGS))
3919 0 1 if (!tag)
3922 0 1 if (!SvPOK (tag))
3927 0 1 if (*dec->cur != ')')
3935 0 1 if (!val)
3938 1 0 if (!SvROK (val) || SvTYPE (SvRV (val)) != SVt_PVAV)
0 1 if (!SvROK (val) || SvTYPE (SvRV (val)) != SVt_PVAV)
3950 0 1 if (!stash)
3955 0 1 if (!method)
3958 0 1 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
0 1 ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
3959 1 0 EXTEND (SP, len + 2);
0 1 EXTEND (SP, len + 2);
3964 3 1 for (i = 0; i < len; ++i)
3977 1 0 FREETMPS; LEAVE;
3997 5 6278 if (typesv)
4001 3 3 if (dec->json.flags & F_ALLOW_SQUOTE) {
4003 0 3 if (typesv)
4019 30 1 if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "true"))
27 3 if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "true"))
4023 5 22 if (typesv)
4025 4 23 if (dec->json.flags & F_UNBLESSED_BOOL)
4035 23 1 if (dec->end - dec->cur >= 5 && memEQc(dec->cur, "false"))
22 1 if (dec->end - dec->cur >= 5 && memEQc(dec->cur, "false"))
4039 5 17 if (typesv)
4041 4 18 if (dec->json.flags & F_UNBLESSED_BOOL)
4051 58 1 if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "null"))
56 2 if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "null"))
4054 3 53 if (typesv)
4096 0 8 PUSHMARK(SP);
4097 0 8 XPUSHs(newSVpvn(encoding, strlen(encoding)));
4098 0 8 XPUSHs(string);
4109 8 0 if (items >= 0 && SvPOK(TOPs)) {
8 0 if (items >= 0 && SvPOK(TOPs)) {
4136 1331 111 if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash(string))
1326 5 if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash(string))
196 1130 if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash(string))
1 195 if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash(string))
4139 4 1438 SvUPGRADE (string, SVt_PV);
4158 1436 6 if (UNLIKELY(len > json->max_size && json->max_size))
1 1435 if (UNLIKELY(len > json->max_size && json->max_size))
4171 1393 48 if (UNLIKELY(len > 2 && SvPOK(string) && !json->incr_pos)) {
1393 0 if (UNLIKELY(len > 2 && SvPOK(string) && !json->incr_pos)) {
1393 48 if (UNLIKELY(len > 2 && SvPOK(string) && !json->incr_pos)) {
1124 269 if (UNLIKELY(len > 2 && SvPOK(string) && !json->incr_pos)) {
4173 12 1112 if (*s >= 0xEF) {
4174 12 0 if (len >= 3 && memEQc(s, UTF8BOM)) {
5 7 if (len >= 3 && memEQc(s, UTF8BOM)) {
4182 7 0 } else if (len >= 4 && memEQc(s, UTF32BOM)) {
2 5 } else if (len >= 4 && memEQc(s, UTF32BOM)) {
4186 2 3 } else if (memEQc(s, UTF16BOM)) {
4190 2 1 } else if (memEQc(s, UTF16BOM_BE)) {
4195 1069 43 } else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) {
2 1067 } else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) {
2 1110 } else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) {
2 0 } else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) {
4202 1428 13 if (LIKELY(!converted)) {
4203 751 677 if (DECODE_WANTS_OCTETS (json))
4210 0 1440 if (!SvPOK(string))
4211 0 0 SvGROW (string, SvCUR (string) + 1);
0 0 SvGROW (string, SvCUR (string) + 1);
4219 1430 10 if (dec.json.cb_object || dec.json.cb_sk_object)
4 1426 if (dec.json.cb_object || dec.json.cb_sk_object)
4227 283 1157 if (offset_return) {
4228 283 0 if (dec.cur < SvPVX (string) || dec.cur > SvEND (string))
0 283 if (dec.cur < SvPVX (string) || dec.cur > SvEND (string))
4234 1157 283 if (!(offset_return || !sv))
839 318 if (!(offset_return || !sv))
4239 818 21 if ((dec.end - dec.cur) || *dec.cur)
0 818 if ((dec.end - dec.cur) || *dec.cur)
4247 5 1435 if (UNLIKELY(offset)) {
4252 343 1097 if (!sv)
4267 306 37 croak ("%s, at character offset %d (before \"%s\")",
4270 306 0 dec.cur != dec.end ? SvPV_nolen (uni) : "(end of string)");
4273 885 212 if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref(aTHX_ sv))
9 876 if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref(aTHX_ sv))
4276 12 1076 if (UNLIKELY(converted && !(converted - 1))) /* with BOM, and UTF8 was not set */
1 11 if (UNLIKELY(converted && !(converted - 1))) /* with BOM, and UTF8 was not set */
4301 278 278 if (*p > 0x20)
4303 6 272 if (*p == '#')
4314 42 236 else if (!*p)
4322 0 0 if (!*p)
4335 9 36 if (*p == '\n')
4337 6 3 self->incr_mode = self->incr_mode == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON;
4340 0 36 else if (!*p)
4353 583 1502 if (*p == '"')
4358 15 568 if (!self->incr_nest)
4363 498 1004 else if (*p == '\\')
4367 0 498 if (!*p) /* if at end of string we have to switch modes */
4373 2 1002 else if (!*p)
4394 0 682 if (!self->incr_nest)
4408 1 357 if (++self->incr_nest > (int)self->max_depth)
4414 256 99 if (--self->incr_nest <= 0)
4506 0 216 XPUSHs (sv_2mortal (sv_bless (
216 0 XPUSHs (sv_2mortal (sv_bless (
4539 283 14 if (enable)
4543 0 297 XPUSHs (ST (0));
4572 0 0 XPUSHs (boolSV (self->flags & ix));
0 0 XPUSHs (boolSV (self->flags & ix));
4576 1 0 if (0 <= val && val <= 15) {
1 0 if (0 <= val && val <= 15) {
4581 0 1 XPUSHs (ST (0));
4592 0 5 XPUSHs (ST (0));
4603 0 3 XPUSHs (ST (0));
4613 9 0 if (infnan_mode > 3 || infnan_mode < 0) {
0 9 if (infnan_mode > 3 || infnan_mode < 0) {
4617 0 9 XPUSHs (ST (0));
4629 0 3 self->cb_sort_by = SvOK (cb) ? newSVsv (cb) : 0;
0 0 self->cb_sort_by = SvOK (cb) ? newSVsv (cb) : 0;
0 0 self->cb_sort_by = SvOK (cb) ? newSVsv (cb) : 0;
4630 3 0 if (self->cb_sort_by)
4633 0 3 XPUSHs (ST (0));
4641 1 4 self->cb_object = SvOK (cb) ? newSVsv (cb) : 0;
1 0 self->cb_object = SvOK (cb) ? newSVsv (cb) : 0;
0 1 self->cb_object = SvOK (cb) ? newSVsv (cb) : 0;
4643 0 5 XPUSHs (ST (0));
4649 3 3 if (!self->cb_sk_object)
4652 1 5 if (SvOK (cb))
1 0 if (SvOK (cb))
0 1 if (SvOK (cb))
4658 0 1 if (!HvKEYS (self->cb_sk_object))
0 1 if (!HvKEYS (self->cb_sk_object))
4665 0 6 XPUSHs (ST (0));
4671 0 1111 XPUSHs (scalar);
4676 0 646 XPUSHs (jsonstr);
4684 0 10 EXTEND (SP, 2);
4692 27 599 if (!self->incr_text)
4696 27 599 if (!DECODE_WANTS_OCTETS (self) == !SvUTF8 (self->incr_text)) {
4697 0 27 if (DECODE_WANTS_OCTETS (self))
4699 0 0 if (self->incr_pos)
4709 0 27 if (self->incr_pos)
4716 321 305 if (jsonstr)
4719 319 2 if (SvUTF8 (jsonstr) != SvUTF8 (self->incr_text)) {
4720 0 319 if (SvUTF8 (jsonstr))
4729 321 0 const char *str = SvPV (jsonstr, len);
4732 147 174 if (SvLEN (self->incr_text) <= cur + len)
4733 147 0 SvGROW (self->incr_text, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
147 0 SvGROW (self->incr_text, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
4741 626 0 if (GIMME_V != G_VOID)
317 309 if (GIMME_V != G_VOID)
4748 317 2 if (!INCR_DONE (self))
316 1 if (!INCR_DONE (self))
4752 278 39 if (UNLIKELY(self->incr_pos > self->max_size && self->max_size))
1 277 if (UNLIKELY(self->incr_pos > self->max_size && self->max_size))
4756 314 2 if (!INCR_DONE (self))
44 270 if (!INCR_DONE (self))
4759 42 4 if (self->incr_mode == INCR_M_WS && self->incr_pos)
4 38 if (self->incr_mode == INCR_M_WS && self->incr_pos)
4770 0 267 XPUSHs (sv);
4782 267 0 while (GIMME_V == G_ARRAY);
2 265 while (GIMME_V == G_ARRAY);
4792 0 290 if (UNLIKELY(self->incr_pos))
4799 289 1 ST(0) = self->incr_text ? self->incr_text : &PL_sv_undef;
4820 2 0 if (self->incr_pos)
4822 2 0 sv_chop (self->incr_text, SvPV_nolen (self->incr_text) + self->incr_pos);
4832 1 0 if (self->incr_text)
4861 0 215 XPUSHs (scalar);
4873 216 0 if (ix && allow_nonref)
9 207 if (ix && allow_nonref)
4876 0 165 XPUSHs (jsonstr);