line |
true |
false |
branch |
156
|
9211 |
5 |
if (SvLEN (sv) > SvCUR (sv) + 1) |
172
|
0 |
180142 |
if (sum < (size_t)l2 || sum != (size_t)(STRLEN)sum) |
185
|
6460 |
83611 |
if (len1 > 4096 - 24) |
188
|
90071 |
0 |
return SvGROW (sv, len1); |
|
65002 |
25069 |
return SvGROW (sv, len1); |
199
|
8161143 |
9 |
if (expect_true (len >= 2 |
|
1418766 |
6742377 |
if (expect_true (len >= 2 |
|
1418766 |
0 |
if (expect_true (len >= 2 |
|
1418766 |
6742386 |
if (expect_true (len >= 2 |
216
|
0 |
4522979 |
if (expect_false (ch < 0x000080)) |
218
|
2277494 |
2245485 |
else if (expect_true (ch < 0x000800)) |
221
|
1117751 |
1127734 |
else if ( ch < 0x010000) |
225
|
1127734 |
0 |
else if ( ch < 0x110000) |
238
|
34 |
39 |
return SvUTF8 (sv) |
255
|
0 |
114 |
if (expect_false (--maxdepth <= 0)) |
256
|
0 |
0 |
while (((U8)*s - '0') < 10) |
263
|
114 |
215 |
if (expect_false (dig >= 10)) |
265
|
46 |
68 |
if (dig == (U8)((U8)'.' - (U8)'0')) |
270
|
53 |
15 |
else if ((dig | ' ') == 'e' - '0') |
277
|
6 |
47 |
if (*s == '-') |
282
|
29 |
18 |
else if (*s == '+') |
285
|
85 |
53 |
while ((dig = (U8)*s - '0') < 10) |
288
|
6 |
47 |
*expo += neg ? -exp2 : exp2; |
301
|
0 |
215 |
if (uaccum >= (UV_MAX - 9) / 10) |
303
|
0 |
0 |
if (postdp) *expo -= eaccum; |
305
|
0 |
0 |
if (postdp) *expo += eaccum; |
315
|
46 |
68 |
if (postdp) *expo -= eaccum; |
327
|
16 |
52 |
if (*s == '-') |
336
|
16 |
52 |
return neg ? -accum : accum; |
345
|
9 |
15756 |
if (svt < SVt_PVAV) |
348
|
8 |
1 |
char *pv = svt ? SvPV (sv, len) : 0; |
|
1 |
7 |
char *pv = svt ? SvPV (sv, len) : 0; |
350
|
3 |
6 |
if (len == 1) |
351
|
1 |
2 |
if (*pv == '1') |
353
|
1 |
1 |
else if (*pv == '0') |
364
|
1 |
15756 |
if (!SvROK (scalar)) |
369
|
15756 |
0 |
if (SvTYPE (scalar) >= SVt_PVMG) |
371
|
0 |
15756 |
if (SvSTASH (scalar) == bool_stash) |
374
|
15756 |
0 |
if (!SvOBJECT (scalar) && ref_bool_type (scalar) >= 0) |
|
0 |
15756 |
if (!SvOBJECT (scalar) && ref_bool_type (scalar) >= 0) |
398
|
89916 |
7655682 |
if (expect_false ((uintptr_t)(enc->end - enc->cur) < len)) |
421
|
9478837 |
26037 |
while (str < end) |
425
|
8785304 |
693533 |
if (expect_true (ch >= 0x20 && ch < 0x80)) // most common case |
|
1904995 |
6880309 |
if (expect_true (ch >= 0x20 && ch < 0x80)) // most common case |
|
1904995 |
7573842 |
if (expect_true (ch >= 0x20 && ch < 0x80)) // most common case |
427
|
21118 |
1883877 |
if (expect_false (ch == '"')) // but with slow exceptions |
433
|
19396 |
1864481 |
else if (expect_false (ch == '\\')) |
459
|
4721101 |
2739868 |
if (is_utf8) |
462
|
0 |
4721101 |
if (clen == (STRLEN)-1) |
471
|
6880309 |
580660 |
if (uch < 0x80/*0x20*/ || uch >= enc->limit) |
|
3440024 |
3440285 |
if (uch < 0x80/*0x20*/ || uch >= enc->limit) |
473
|
1127734 |
2892950 |
if (uch >= 0x10000UL) |
475
|
0 |
1127734 |
if (uch >= 0x110000UL) |
497
|
2 |
3440283 |
else if (enc->json.flags & F_LATIN1) |
502
|
2357539 |
1082744 |
else if (is_utf8) |
509
|
5730803 |
2357539 |
while (--clen); |
528
|
23 |
51686 |
if (enc->json.flags & F_INDENT) |
548
|
30 |
75675 |
if (enc->json.flags & F_INDENT) |
560
|
5 |
1095 |
if (enc->json.flags & F_INDENT) |
562
|
0 |
1095 |
else if (enc->json.flags & F_SPACE_AFTER) |
573
|
1 |
24993 |
if (enc->indent >= enc->json.max_depth) |
578
|
24983 |
10 |
if (len >= 0) |
582
|
25776 |
24974 |
for (i = 0; i <= len; ++i) |
588
|
25774 |
2 |
if (svp) |
593
|
793 |
24974 |
if (i < len) |
608
|
1 |
633 |
if (HeKLEN (he) == HEf_SVKEY) |
610
|
1 |
0 |
SV *sv = HeSVKEY (he); |
|
1 |
0 |
SV *sv = HeSVKEY (he); |
614
|
0 |
1 |
SvGETMAGIC (sv); |
|
0 |
0 |
SvGETMAGIC (sv); |
615
|
1 |
0 |
str = SvPV (sv, len); |
624
|
5 |
629 |
if (enc->json.flags & F_SPACE_BEFORE) encode_space (enc); |
626
|
5 |
629 |
if (enc->json.flags & F_SPACE_AFTER ) encode_space (enc); |
641
|
198 |
25 |
if (!(cmp = memcmp (HeKEY (b), HeKEY (a), lb < la ? lb : la))) |
651
|
370 |
0 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
|
0 |
370 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
|
8 |
362 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
|
370 |
0 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
|
0 |
370 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
|
12 |
358 |
return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a)); |
659
|
1 |
337 |
if (enc->indent >= enc->json.max_depth) |
668
|
219 |
118 |
if (enc->json.flags & F_CANONICAL && !SvRMAGICAL (hv)) |
|
219 |
0 |
if (enc->json.flags & F_CANONICAL && !SvRMAGICAL (hv)) |
672
|
0 |
219 |
if (SvMAGICAL (hv)) |
680
|
0 |
0 |
while (hv_iternext (hv)) |
686
|
213 |
6 |
if (count) |
693
|
0 |
213 |
if (count > STACK_HES) |
700
|
517 |
213 |
while ((he = hv_iternext (hv))) |
703
|
517 |
0 |
if (HeKLEN (he) < 0 || HeKUTF8 (he)) |
|
3 |
514 |
if (HeKLEN (he) < 0 || HeKUTF8 (he)) |
709
|
210 |
3 |
if (fast) |
725
|
3 |
0 |
FREETMPS; |
731
|
517 |
213 |
while (count--) |
736
|
0 |
517 |
encode_sv (enc, expect_false (SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); |
738
|
304 |
213 |
if (count) |
747
|
5 |
113 |
if (hv_iterinit (hv) || SvMAGICAL (hv)) |
|
1 |
4 |
if (hv_iterinit (hv) || SvMAGICAL (hv)) |
748
|
114 |
0 |
if ((he = hv_iternext (hv))) |
756
|
1 |
116 |
encode_sv (enc, expect_false (SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); |
758
|
112 |
3 |
if (!(he = hv_iternext (hv))) |
778
|
0 |
25366 |
SvGETMAGIC (sv); |
|
0 |
0 |
SvGETMAGIC (sv); |
781
|
24 |
25342 |
if (expect_false (SvOBJECT (sv))) |
785
|
16 |
8 |
if (stash == bool_stash) |
787
|
16 |
0 |
if (SvIV (sv)) encode_str (enc, "true" , 4, 0); |
|
8 |
8 |
if (SvIV (sv)) encode_str (enc, "true" , 4, 0); |
790
|
2 |
6 |
else if ((enc->json.flags & F_ALLOW_TAGS) && (method = gv_fetchmethod_autoload (stash, "FREEZE", 0))) |
|
1 |
1 |
else if ((enc->json.flags & F_ALLOW_TAGS) && (method = gv_fetchmethod_autoload (stash, "FREEZE", 0))) |
796
|
0 |
1 |
PUSHMARK (SP); |
797
|
0 |
1 |
EXTEND (SP, 2); |
807
|
0 |
1 |
if (SvROK (TOPs) && SvRV (TOPs) == sv) |
|
0 |
0 |
if (SvROK (TOPs) && SvRV (TOPs) == sv) |
808
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
|
0 |
0 |
croak ("%s::FREEZE method returned same object as was passed instead of a new one", HvNAME (SvSTASH (sv))); |
812
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
1 |
0 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
|
0 |
1 |
encode_str (enc, HvNAME (stash), HvNAMELEN (stash), HvNAMEUTF8 (stash)); |
817
|
1 |
0 |
if (count) |
821
|
2 |
1 |
for (i = 0; i < count - 1; ++i) |
835
|
1 |
0 |
FREETMPS; LEAVE; |
837
|
3 |
4 |
else if ((enc->json.flags & F_CONV_BLESSED) && (method = gv_fetchmethod_autoload (stash, "TO_JSON", 0))) |
|
2 |
1 |
else if ((enc->json.flags & F_CONV_BLESSED) && (method = gv_fetchmethod_autoload (stash, "TO_JSON", 0))) |
842
|
0 |
2 |
PUSHMARK (SP); |
844
|
0 |
2 |
XPUSHs (sv_bless (sv_2mortal (newRV_inc (sv)), stash)); |
852
|
1 |
1 |
if (SvROK (TOPs) && SvRV (TOPs) == sv) |
|
0 |
1 |
if (SvROK (TOPs) && SvRV (TOPs) == sv) |
853
|
0 |
0 |
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))); |
|
0 |
0 |
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))); |
|
0 |
0 |
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))); |
860
|
2 |
0 |
FREETMPS; LEAVE; |
862
|
3 |
2 |
else if (enc->json.flags & F_ALLOW_BLESSED) |
865
|
0 |
2 |
croak ("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)", |
868
|
338 |
25004 |
else if (svt == SVt_PVHV) |
870
|
24994 |
10 |
else if (svt == SVt_PVAV) |
872
|
9 |
1 |
else if (svt < SVt_PVAV) |
876
|
1 |
8 |
if (bool_type == 1) |
878
|
1 |
7 |
else if (bool_type == 0) |
880
|
0 |
7 |
else if (enc->json.flags & F_ALLOW_UNKNOWN) |
883
|
0 |
7 |
croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1", |
886
|
0 |
1 |
else if (enc->json.flags & F_ALLOW_UNKNOWN) |
889
|
0 |
1 |
croak ("encountered %s, but JSON can only represent references to arrays or hashes", |
896
|
3 |
51513 |
SvGETMAGIC (sv); |
|
0 |
3 |
SvGETMAGIC (sv); |
898
|
25337 |
26179 |
if (SvPOKp (sv)) |
901
|
25337 |
0 |
char *str = SvPV (sv, len); |
906
|
76 |
26103 |
else if (SvNOKp (sv)) |
913
|
695 |
25408 |
else if (SvIOKp (sv)) |
918
|
0 |
695 |
if (SvIsUV (sv) ? SvUVX (sv) <= 59000 |
|
692 |
3 |
if (SvIsUV (sv) ? SvUVX (sv) <= 59000 |
919
|
692 |
3 |
: SvIVX (sv) <= 59000 && SvIVX (sv) >= -59000) |
|
692 |
0 |
: SvIVX (sv) <= 59000 && SvIVX (sv) >= -59000) |
930
|
3 |
689 |
*enc->cur = '-'; enc->cur += i < 0 ? 1 : 0; |
941
|
692 |
0 |
digit = u >> 28; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0xfffffffUL) * 5; |
|
6 |
686 |
digit = u >> 28; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0xfffffffUL) * 5; |
942
|
686 |
6 |
digit = u >> 27; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x7ffffffUL) * 5; |
|
3 |
683 |
digit = u >> 27; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x7ffffffUL) * 5; |
943
|
683 |
9 |
digit = u >> 26; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x3ffffffUL) * 5; |
|
0 |
683 |
digit = u >> 26; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x3ffffffUL) * 5; |
944
|
683 |
9 |
digit = u >> 25; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x1ffffffUL) * 5; |
|
5 |
678 |
digit = u >> 25; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x1ffffffUL) * 5; |
954
|
0 |
3 |
: snprintf (enc->cur, IVUV_MAXCHARS, "%"IVdf, (IV)SvIVX (sv)); |
957
|
25366 |
42 |
else if (SvROK (sv)) |
959
|
42 |
0 |
else if (!SvOK (sv) || enc->json.flags & F_ALLOW_UNKNOWN) |
|
42 |
0 |
else if (!SvOK (sv) || enc->json.flags & F_ALLOW_UNKNOWN) |
|
0 |
42 |
else if (!SvOK (sv) || enc->json.flags & F_ALLOW_UNKNOWN) |
|
0 |
0 |
else if (!SvOK (sv) || enc->json.flags & F_ALLOW_UNKNOWN) |
962
|
0 |
0 |
croak ("encountered perl type (%s,0x%x) that JSON cannot handle, check your input data", |
971
|
15558 |
9545 |
if (!(json->flags & F_ALLOW_NONREF) && json_nonref (scalar)) |
|
0 |
15558 |
if (!(json->flags & F_ALLOW_NONREF) && json_nonref (scalar)) |
980
|
12812 |
12291 |
: enc.json.flags & F_LATIN1 ? 0x000100UL |
981
|
2 |
12810 |
: 0x110000UL; |
990
|
6460 |
18631 |
if (!(enc.json.flags & (F_ASCII | F_LATIN1 | F_UTF8))) |
993
|
9216 |
15875 |
if (enc.json.flags & F_SHRINK) |
1018
|
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) |
1029
|
87102 |
35871 |
if (ch > 0x20) |
1031
|
9 |
87093 |
if (expect_false (ch == '#')) |
1033
|
9 |
0 |
if (dec->json.flags & F_RELAXED) |
1041
|
26045 |
9826 |
else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09) |
|
24872 |
1173 |
else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09) |
|
24872 |
0 |
else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09) |
|
1 |
24871 |
else if (ch != 0x20 && ch != 0x0a && ch != 0x0d && ch != 0x09) |
1069
|
0 |
5148634 |
d1 = decode_hexdigit [cur [0]]; if (expect_false (d1 < 0)) ERR ("exactly four hexadecimal digits expected"); |
1070
|
0 |
5148634 |
d2 = decode_hexdigit [cur [1]]; if (expect_false (d2 < 0)) ERR ("exactly four hexadecimal digits expected"); |
1071
|
0 |
5148634 |
d3 = decode_hexdigit [cur [2]]; if (expect_false (d3 < 0)) ERR ("exactly four hexadecimal digits expected"); |
1072
|
0 |
5148634 |
d4 = decode_hexdigit [cur [3]]; if (expect_false (d4 < 0)) ERR ("exactly four hexadecimal digits expected"); |
1101
|
25930 |
9483294 |
if (expect_false (ch == '"')) |
1106
|
4174274 |
5309020 |
else if (expect_false (ch == '\\')) |
1128
|
0 |
4020899 |
if (hi == (UV)-1) |
1132
|
1136912 |
2883987 |
if (hi >= 0xd800) |
1133
|
1127736 |
9176 |
if (hi < 0xdc00) |
1135
|
1127735 |
1 |
if (dec_cur [0] != '\\' || dec_cur [1] != 'u') |
|
0 |
1127735 |
if (dec_cur [0] != '\\' || dec_cur [1] != 'u') |
1143
|
0 |
1127735 |
if (lo == (UV)-1) |
1146
|
1127734 |
1 |
if (lo < 0xdc00 || lo >= 0xe000) |
|
0 |
1127734 |
if (lo < 0xdc00 || lo >= 0xe000) |
1151
|
1 |
9175 |
else if (hi < 0xe000) |
1154
|
3440235 |
580661 |
if (hi >= 0x80) |
1170
|
5309015 |
5 |
else if (expect_true (ch >= 0x20 && ch < 0x80)) |
|
1868964 |
3440051 |
else if (expect_true (ch >= 0x20 && ch < 0x80)) |
|
1868964 |
3440056 |
else if (expect_true (ch >= 0x20 && ch < 0x80)) |
1172
|
3440051 |
5 |
else if (ch >= 0x80) |
1179
|
3 |
3440048 |
if (clen == (STRLEN)-1) |
1184
|
6813079 |
3440048 |
while (--clen); |
1188
|
1 |
4 |
else if (ch == '\t' && dec->json.flags & F_RELAXED) |
|
0 |
1 |
else if (ch == '\t' && dec->json.flags & F_RELAXED) |
1194
|
1 |
4 |
if (!ch) |
1200
|
9483279 |
0 |
while (cur < buf + SHORT_STRING_LEN); |
1205
|
0 |
25930 |
if (sv) |
1209
|
0 |
0 |
if (SvLEN (sv) - cur <= len) |
1219
|
0 |
25930 |
while (*dec_cur != '"'); |
1223
|
25930 |
0 |
if (sv) |
1228
|
23764 |
2166 |
if (utf8) |
1249
|
32 |
771 |
if (*dec->cur == '-') |
1252
|
68 |
735 |
if (*dec->cur == '0') |
1255
|
10 |
58 |
if (*dec->cur >= '0' && *dec->cur <= '9') |
|
3 |
7 |
if (*dec->cur >= '0' && *dec->cur <= '9') |
1258
|
735 |
0 |
else if (*dec->cur < '0' || *dec->cur > '9') |
|
1 |
734 |
else if (*dec->cur < '0' || *dec->cur > '9') |
1265
|
326 |
554 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
|
146 |
180 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
1268
|
47 |
752 |
if (*dec->cur == '.') |
1272
|
46 |
1 |
if (*dec->cur < '0' || *dec->cur > '9') |
|
0 |
46 |
if (*dec->cur < '0' || *dec->cur > '9') |
1279
|
112 |
12 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
|
78 |
34 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
1285
|
766 |
32 |
if (*dec->cur == 'e' || *dec->cur == 'E') |
|
25 |
741 |
if (*dec->cur == 'e' || *dec->cur == 'E') |
1289
|
51 |
6 |
if (*dec->cur == '-' || *dec->cur == '+') |
|
31 |
20 |
if (*dec->cur == '-' || *dec->cur == '+') |
1292
|
55 |
2 |
if (*dec->cur < '0' || *dec->cur > '9') |
|
2 |
53 |
if (*dec->cur < '0' || *dec->cur > '9') |
1299
|
35 |
50 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
|
32 |
3 |
while (*dec->cur >= '0' && *dec->cur <= '9'); |
1304
|
726 |
68 |
if (!is_nv) |
1309
|
13 |
713 |
if (*start == '-') |
1331
|
10 |
0 |
if (numtype & IS_NUMBER_IN_UV) |
1332
|
2 |
8 |
if (numtype & IS_NUMBER_NEG) |
1334
|
2 |
0 |
if (uv < (UV)IV_MIN) |
1344
|
0 |
0 |
if (len <= NV_DIG) |
1364
|
3 |
26177 |
DEC_INC_DEPTH; |
1367
|
23 |
26154 |
if (*dec->cur == ']') |
1375
|
563 |
26370 |
if (!value) |
1382
|
25585 |
785 |
if (*dec->cur == ']') |
1388
|
4 |
781 |
if (*dec->cur != ',') |
1395
|
3 |
778 |
if (*dec->cur == ']' && dec->json.flags & F_RELAXED) |
|
2 |
1 |
if (*dec->cur == ']' && dec->json.flags & F_RELAXED) |
1417
|
0 |
1604 |
DEC_INC_DEPTH; |
1420
|
8 |
1596 |
if (*dec->cur == '}') |
1425
|
4 |
2265 |
EXPECT_CH ('"'); |
1440
|
9788 |
2 |
if (p == e || *p < 0x20 || *p >= 0x80 || *p == '\\') |
|
9788 |
0 |
if (p == e || *p < 0x20 || *p >= 0x80 || *p == '\\') |
|
200 |
9588 |
if (p == e || *p < 0x20 || *p >= 0x80 || *p == '\\') |
1444
|
0 |
202 |
if (!key) |
1447
|
0 |
202 |
decode_ws (dec); EXPECT_CH (':'); |
1451
|
1 |
201 |
if (!value) |
1462
|
2063 |
7525 |
else if (*p == '"') |
1469
|
3 |
2060 |
decode_ws (dec); EXPECT_CH (':'); |
1473
|
515 |
1545 |
if (!value) |
1487
|
1069 |
677 |
if (*dec->cur == '}') |
1493
|
3 |
674 |
if (*dec->cur != ',') |
1500
|
2 |
672 |
if (*dec->cur == '}' && dec->json.flags & F_RELAXED) |
|
1 |
1 |
if (*dec->cur == '}' && dec->json.flags & F_RELAXED) |
1511
|
9 |
1069 |
if (expect_false (dec->json.flags & F_HOOK)) |
1513
|
9 |
0 |
if (dec->json.cb_sk_object && HvKEYS (hv) == 1) |
|
0 |
9 |
if (dec->json.cb_sk_object && HvKEYS (hv) == 1) |
|
5 |
4 |
if (dec->json.cb_sk_object && HvKEYS (hv) == 1) |
1525
|
4 |
1 |
if (cb) |
1531
|
0 |
4 |
PUSHMARK (SP); |
1532
|
0 |
4 |
XPUSHs (HeVAL (he)); |
1537
|
3 |
1 |
if (count == 1) |
1541
|
3 |
0 |
FREETMPS; LEAVE; |
1544
|
0 |
1 |
else if (count) |
1551
|
1 |
0 |
FREETMPS; LEAVE; |
1555
|
5 |
1 |
if (dec->json.cb_object) |
1561
|
0 |
5 |
PUSHMARK (SP); |
1562
|
0 |
5 |
XPUSHs (sv_2mortal (sv)); |
1566
|
2 |
3 |
if (count == 1) |
1568
|
3 |
0 |
else if (count == 0) |
1575
|
5 |
0 |
FREETMPS; LEAVE; |
1593
|
0 |
1 |
if (!(dec->json.flags & F_ALLOW_TAGS)) |
1601
|
0 |
1 |
if (!tag) |
1604
|
0 |
1 |
if (!SvPOK (tag)) |
1609
|
0 |
1 |
if (*dec->cur != ')') |
1617
|
0 |
1 |
if (!val) |
1620
|
1 |
0 |
if (!SvROK (val) || SvTYPE (SvRV (val)) != SVt_PVAV) |
|
0 |
1 |
if (!SvROK (val) || SvTYPE (SvRV (val)) != SVt_PVAV) |
1629
|
0 |
1 |
if (!stash) |
1634
|
0 |
1 |
if (!method) |
1640
|
0 |
1 |
PUSHMARK (SP); |
1641
|
1 |
0 |
EXTEND (SP, len + 2); |
|
0 |
1 |
EXTEND (SP, len + 2); |
1646
|
3 |
1 |
for (i = 0; i < len; ++i) |
1659
|
1 |
0 |
FREETMPS; LEAVE; |
1688
|
6 |
0 |
if (dec->end - dec->cur >= 5 && !memcmp (dec->cur, "false", 5)) |
|
6 |
0 |
if (dec->end - dec->cur >= 5 && !memcmp (dec->cur, "false", 5)) |
1692
|
4 |
2 |
if (expect_false (!dec->json.v_false)) |
1703
|
10 |
0 |
if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "true", 4)) |
|
9 |
1 |
if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "true", 4)) |
1707
|
7 |
2 |
if (expect_false (!dec->json.v_true)) |
1718
|
43 |
0 |
if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "null", 4)) |
|
42 |
1 |
if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "null", 4)) |
1752
|
25092 |
122 |
if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash (string)) |
|
25087 |
5 |
if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash (string)) |
|
89 |
24998 |
if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash (string)) |
|
0 |
89 |
if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash (string)) |
1755
|
4 |
25210 |
SvUPGRADE (string, SVt_PV); |
1774
|
25209 |
5 |
if (offset > json->max_size && json->max_size) |
|
1 |
25208 |
if (offset > json->max_size && json->max_size) |
1779
|
12411 |
12802 |
if (DECODE_WANTS_OCTETS (json)) |
1784
|
25195 |
18 |
SvGROW (string, SvCUR (string) + 1); // should basically be a NOP |
|
0 |
25195 |
SvGROW (string, SvCUR (string) + 1); // should basically be a NOP |
1792
|
25205 |
8 |
if (dec.json.cb_object || dec.json.cb_sk_object) |
|
2 |
25203 |
if (dec.json.cb_object || dec.json.cb_sk_object) |
1800
|
284 |
24929 |
if (offset_return) |
1802
|
24869 |
60 |
else if (sv) |
1807
|
8 |
24861 |
if (dec.cur != dec.end) |
1815
|
71 |
25142 |
if (!sv) |
1828
|
62 |
9 |
croak ("%s, at character offset %d (before \"%s\")", |
1831
|
62 |
0 |
dec.cur != dec.end ? SvPV_nolen (uni) : "(end of string)"); |
1836
|
199 |
24943 |
if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref (sv)) |
|
1 |
198 |
if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref (sv)) |
1861
|
978 |
29 |
if (self->incr_nest) // end of a scalar inside array, object or tag |
1870
|
289 |
298 |
if (*p > 0x20) |
1872
|
6 |
283 |
if (*p == '#') |
1883
|
41 |
257 |
else if (!*p) |
1891
|
0 |
0 |
if (!*p) |
1904
|
9 |
36 |
if (*p == '\n') |
1906
|
6 |
3 |
self->incr_mode = self->incr_mode == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON; |
1909
|
0 |
36 |
else if (!*p) |
1921
|
105 |
35 |
switch (*p++) |
1937
|
93 |
391 |
switch (*p++) |
1956
|
581 |
1492 |
if (*p == '"') |
1961
|
496 |
996 |
else if (*p == '\\') |
1965
|
0 |
496 |
if (!*p) // if at end of string we have to switch modes |
1971
|
0 |
996 |
else if (!*p) |
1992
|
0 |
682 |
if (!self->incr_nest) |
2021
|
1 |
354 |
if (++self->incr_nest > self->max_depth) |
2027
|
253 |
99 |
if (--self->incr_nest <= 0) |
2061
|
6400 |
25 |
for (i = 0; i < 256; ++i) |
2062
|
5200 |
1200 |
decode_hexdigit [i] = |
|
3975 |
2175 |
decode_hexdigit [i] = |
|
4625 |
1375 |
decode_hexdigit [i] = |
2063
|
250 |
4950 |
i >= '0' && i <= '9' ? i - '0' |
2064
|
150 |
3825 |
: i >= 'a' && i <= 'f' ? i - 'a' + 10 |
2065
|
150 |
4475 |
: i >= 'A' && i <= 'F' ? i - 'A' + 10 |
2097
|
0 |
43129 |
XPUSHs (sv_2mortal (sv_bless ( |
|
0 |
43129 |
XPUSHs (sv_2mortal (sv_bless ( |
2107
|
0 |
0 |
XPUSHs (ST (0)); |
2111
|
0 |
0 |
if (self->v_false && self->v_true) |
|
0 |
0 |
if (self->v_false && self->v_true) |
2113
|
0 |
0 |
EXTEND (SP, 2); |
2137
|
61577 |
15366 |
if (enable) |
2142
|
0 |
76943 |
XPUSHs (ST (0)); |
2162
|
0 |
0 |
XPUSHs (boolSV (self->flags & ix)); |
|
0 |
0 |
XPUSHs (boolSV (self->flags & ix)); |
2167
|
0 |
5 |
XPUSHs (ST (0)); |
2178
|
0 |
3 |
XPUSHs (ST (0)); |
2190
|
1 |
2 |
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; |
2192
|
0 |
3 |
XPUSHs (ST (0)); |
2198
|
1 |
3 |
if (!self->cb_sk_object) |
2201
|
1 |
3 |
if (SvOK (cb)) |
|
1 |
0 |
if (SvOK (cb)) |
|
0 |
1 |
if (SvOK (cb)) |
2207
|
0 |
1 |
if (!HvKEYS (self->cb_sk_object)) |
|
0 |
1 |
if (!HvKEYS (self->cb_sk_object)) |
2214
|
0 |
4 |
XPUSHs (ST (0)); |
2220
|
0 |
24908 |
XPUSHs (scalar); |
2225
|
0 |
18664 |
XPUSHs (jsonstr); |
2233
|
0 |
2 |
EXTEND (SP, 2); |
2235
|
2 |
0 |
PUSHs (sv_2mortal (newSVuv (ptr_to_index (jsonstr, SvPV_nolen (jsonstr) + offset)))); |
2241
|
25 |
641 |
if (!self->incr_text) |
2245
|
25 |
641 |
if (!DECODE_WANTS_OCTETS (self) == !SvUTF8 (self->incr_text)) |
2246
|
0 |
25 |
if (DECODE_WANTS_OCTETS (self)) |
2248
|
0 |
0 |
if (self->incr_pos) |
2258
|
0 |
25 |
if (self->incr_pos) |
2264
|
347 |
319 |
if (jsonstr) |
2267
|
346 |
1 |
if (SvUTF8 (jsonstr) != SvUTF8 (self->incr_text)) |
2268
|
0 |
346 |
if (SvUTF8 (jsonstr)) |
2276
|
347 |
0 |
const char *str = SvPV (jsonstr, len); |
2279
|
155 |
192 |
if (SvLEN (self->incr_text) - cur <= len) |
2288
|
666 |
0 |
if (GIMME_V != G_VOID) |
|
326 |
340 |
if (GIMME_V != G_VOID) |
2294
|
325 |
2 |
if (!INCR_DONE (self)) |
|
324 |
1 |
if (!INCR_DONE (self)) |
2298
|
287 |
38 |
if (self->incr_pos > self->max_size && self->max_size) |
|
1 |
286 |
if (self->incr_pos > self->max_size && self->max_size) |
2302
|
322 |
2 |
if (!INCR_DONE (self)) |
|
41 |
281 |
if (!INCR_DONE (self)) |
2305
|
41 |
2 |
if (self->incr_mode == INCR_M_WS && self->incr_pos) |
|
4 |
37 |
if (self->incr_mode == INCR_M_WS && self->incr_pos) |
2316
|
0 |
279 |
XPUSHs (sv); |
2324
|
279 |
0 |
while (GIMME_V == G_ARRAY); |
|
1 |
278 |
while (GIMME_V == G_ARRAY); |
2331
|
0 |
304 |
if (self->incr_pos) |
2334
|
304 |
0 |
RETVAL = self->incr_text ? SvREFCNT_inc (self->incr_text) : &PL_sv_undef; |
2342
|
2 |
0 |
if (self->incr_pos) |
2344
|
2 |
0 |
sv_chop (self->incr_text, SvPV_nolen (self->incr_text) + self->incr_pos); |
2378
|
0 |
183 |
XPUSHs (scalar); |
2388
|
0 |
6196 |
XPUSHs (jsonstr); |