Branch Coverage

UTF8.xs
Criterion Covered Total %
branch 148 222 66.6


line true false branch
36 1024 2048 if (cp > 0x10FFFF) {
40 2048 0 else if ((cp & 0xF800) == 0xD800) {
63 3728 2622 while (len-- > 0) {
67 1106 2622 if (len) {
69 0 1106 if (d == dstop) {
77 287 2335 if (fatal)
91 1 1 : "Can't decode ill-formed UTF-8 octet sequence <%s>";
93 2 2 while (n-- > 0) {
97 0 2 if (n)
118 0 21 PUSHMARK(SP);
119 0 21 EXTEND(SP, 2);
129 0 21 if (count != 1)
134 9 12 if (SvUTF8(str))
140 21 0 FREETMPS;
151 2339 1604 (void)SvUPGRADE(dsv, SVt_PV);
152 3941 2 (void)SvGROW(dsv, off + 1);
2339 1602 (void)SvGROW(dsv, off + 1);
163 2335 2578 if (do_warn) {
169 16 2562 if (fallback) {
181 1608 970 if (off == len) {
185 970 0 } while (len);
199 3361 2 (void)SvUPGRADE(dsv, SVt_PV);
200 3363 0 (void)SvGROW(dsv, off + 1);
3361 2 (void)SvGROW(dsv, off + 1);
210 287 3080 if (skip == (STRLEN) -1) {
212 286 1 if (UTF8_IS_START(*src)) {
214 272 14 if (n > len)
216 579 286 while (skip < n && UTF8_IS_CONTINUATION(src[skip]))
579 0 while (skip < n && UTF8_IS_CONTINUATION(src[skip]))
221 3072 8 if (do_warn)
226 5 3 if (fallback) {
228 0 5 UV usv = (v <= 0x10FFFF && (v & 0xF800) != 0xD800) ? v : 0;
0 0 UV usv = (v <= 0x10FFFF && (v & 0xF800) != 0xD800) ? v : 0;
239 4 4 if (off == len) {
243 4 0 } while (len);
252 12 2 if (append)
255 2 12 (void)SvUPGRADE(dsv, SVt_PV);
256 14 0 (void)SvGROW(dsv, off + len * 2 + 1);
2 12 (void)SvGROW(dsv, off + len * 2 + 1);
259 34 14 for (; src < end; src++) {
261 23 11 if (c < 0x80)
278 0 0 while (p < e && *p < 0x80)
0 0 while (p < e && *p < 0x80)
281 0 0 if (p != e) {
287 0 0 while (p < e)
290 0 0 if (SvLEN(sv) < size + 1) {
297 0 0 for (s += off, e--; e >= s; e--) {
299 0 0 if (c < 0x80)
316 3 0 (void)SvUPGRADE(dsv, SVt_PV);
317 3 0 (void)SvGROW(dsv, len + 1);
3 0 (void)SvGROW(dsv, len + 1);
320 26 2 while (s < e) {
322 14 12 if (c < 0x80)
325 1 11 if ((c & 0xFE) != 0xC2)
329 0 11 if ((c & 0xC0) != 0x80)
334 1 1 if (s < e + 1) {
335 1 0 if (*s < 0x80)
366 0 4289 reuse_sv = SvPV_stealable(octets);
0 0 reuse_sv = SvPV_stealable(octets);
0 0 reuse_sv = SvPV_stealable(octets);
0 0 reuse_sv = SvPV_stealable(octets);
367 3 4286 if (SvUTF8(octets)) {
368 3 0 if (!reuse_sv) {
373 0 2 if (SvCUR(octets) == len) {
380 345 3943 if (utf8_check_ascii((const char *)src, len, &off)) {
381 2 343 if (reuse_sv) {
387 343 0 dXSTARG;
390 0 343 PUSHTARG;
394 3943 0 dXSTARG;
397 0 1608 PUSHTARG;
410 0 3707 reuse_sv = SvPV_stealable(string);
0 0 reuse_sv = SvPV_stealable(string);
0 0 reuse_sv = SvPV_stealable(string);
0 0 reuse_sv = SvPV_stealable(string);
411 2 3705 if (!SvUTF8(string)) {
412 0 2 if (reuse_sv) {
418 2 0 dXSTARG;
420 0 2 SvTAINT(TARG);
0 0 SvTAINT(TARG);
421 0 2 PUSHTARG;
426 342 3363 if (utf8_check_ascii((const char *)src, len, &off)) {
427 0 342 if (reuse_sv) {
433 342 0 dXSTARG;
436 0 342 PUSHTARG;
440 3363 0 dXSTARG;
442 0 4 PUSHTARG;
465 1 15 if (length < 0)
468 13 2 if (!SvOK(bufsv))
473 2 13 if (offset != 0) {
476 0 2 if (offset < 0) {
478 0 0 if (back > chars)
482 1 1 else if ((size_t)offset == chars) {
485 0 1 else if ((size_t)offset < chars) {
496 15 0 buf = SvGROW(bufsv, base + (STRLEN)length * 4 + 1);
5 10 buf = SvGROW(bufsv, base + (STRLEN)length * 4 + 1);
499 1 14 if (pad) {
507 29 8 while (got < (size_t)length) {
511 29 0 if (count < 0 || (count == 0 && PerlIO_error(fh)))
7 22 if (count < 0 || (count == 0 && PerlIO_error(fh)))
0 7 if (count < 0 || (count == 0 && PerlIO_error(fh)))
524 29 4 if (r.status == UTF8_VALID_STREAM_ILLFORMED ||
525 1 28 r.status == UTF8_VALID_STREAM_TRUNCATED) {
530 2 3 if (ckWARN_d(WARN_UTF8))
533 5 0 if (delta) { // make room, then write FFFD
543 1 4 if (r.status == UTF8_VALID_STREAM_TRUNCATED)
557 7 22 if (eof)
564 0 15 SvSETMAGIC(bufsv);
565 3 12 RETVAL = (IV)got;
578 2 2674 if (SvUTF8(octets)) {
580 1 1 if (!sv_utf8_downgrade(octets, TRUE))
584 340 2335 ST(0) = boolSV(utf8_valid_ascii(src, len));