Branch Coverage

Util.xs
Criterion Covered Total %
branch 210 362 58.0


line true false branch
10 319 10 if (!SvOK(sv) || !SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV) {
319 0 if (!SvOK(sv) || !SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV) {
0 319 if (!SvOK(sv) || !SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV) {
19 247 1 for (i = cxstack_ix; i >= 0; i--) {
21 205 42 if (CxTYPE_is_LOOP(cx))
199 6 if (CxTYPE_is_LOOP(cx))
28 0 170 if ( !cx ) return 0;
29 92 78 if ( CxTYPE_is_LOOP(cx) ) return 1;
80 12 if ( CxTYPE_is_LOOP(cx) ) return 1;
36 0 339 if ( !cx ) return 0;
47 0 5 if ( !cx ) return;
66 0 297 if ( !cx ) return;
79 0 24 if ( !cx ) return 0;
84 24 0 if ( !svp || !*svp ) return 0;
0 24 if ( !svp || !*svp ) return 0;
99 0 100 if ( !cx ) return;
102 97 3 if ( is_finite ) {
116 0 0 if ( !looputil_get_state_iv_for_cx(aTHX_ cx, 'F', &finite_iv) ) return 0;
119 0 0 if ( *is_finite ) {
120 0 0 if ( !looputil_get_state_iv_for_cx(aTHX_ cx, 'L', length) ) {
136 1 84 if ( !cx ) return 0;
141 28 56 if ( !flags ) return 0;
143 26 30 if ( t == CXt_LOOP_ARY ) {
148 18 12 if ( t == CXt_LOOP_LIST ) {
153 12 0 if ( t == CXt_LOOP_LAZYIV ) {
168 140 16 for ( ix = cxstack_ix; ix >= 0; ix-- ) {
173 72 68 if ( !looputil_is_loop_context(cur) ) continue;
174 34 34 if ( current_ix < 0 ) current_ix = ix;
175 0 68 if ( !cur->blk_oldcop ) continue;
178 18 50 if ( label && label_len == wanted_len && memEQ(label, wanted, wanted_len) ) {
18 0 if ( label && label_len == wanted_len && memEQ(label, wanted, wanted_len) ) {
18 0 if ( label && label_len == wanted_len && memEQ(label, wanted, wanted_len) ) {
183 16 0 if ( current_ix >= 0 && wanted_len == 5 && memEQ(wanted, "OUTER", 5) ) {
12 4 if ( current_ix >= 0 && wanted_len == 5 && memEQ(wanted, "OUTER", 5) ) {
12 0 if ( current_ix >= 0 && wanted_len == 5 && memEQ(wanted, "OUTER", 5) ) {
184 6 12 for ( ix = current_ix + 1; ix <= cxstack_ix; ix++ ) {
188 6 0 if ( !looputil_is_loop_context(cur) ) continue;
189 0 0 if ( looputil_iteration_index_for_cx(aTHX_ cur, &tmp) ) return cur;
190 0 0 if ( looputil_get_iteration_for_cx(aTHX_ cur, &tmp) ) return cur;
193 24 0 for ( ix = current_ix - 1; ix >= 0; ix-- ) {
197 12 12 if ( !looputil_is_loop_context(cur) ) continue;
198 0 12 if ( looputil_iteration_index_for_cx(aTHX_ cur, &tmp) ) return cur;
199 12 0 if ( looputil_get_iteration_for_cx(aTHX_ cur, &tmp) ) return cur;
207 12 12 if ( looputil_iteration_index_for_cx(aTHX_ cx, out) ) return 1;
208 12 0 if ( looputil_get_iteration_for_cx(aTHX_ cx, out) ) return 1;
216 37 0 if (!(PL_parser && PL_parser->bufptr)) return FALSE;
0 37 if (!(PL_parser && PL_parser->bufptr)) return FALSE;
219 37 0 if (!(PL_parser && PL_parser->bufptr)) return FALSE;
0 37 if (!(PL_parser && PL_parser->bufptr)) return FALSE;
224 7 30 if (!(strnEQ(s, w, n) && !isWORDCHAR(s[n]))) return FALSE;
0 7 if (!(strnEQ(s, w, n) && !isWORDCHAR(s[n]))) return FALSE;
235 37 0 if ( !( PL_parser && PL_parser->bufptr ) ) return NULL;
0 37 if ( !( PL_parser && PL_parser->bufptr ) ) return NULL;
238 28 9 if ( !isIDFIRST(*s) ) return NULL;
241 44 9 while ( isWORDCHAR(*p) ) p++;
245 9 0 if ( !( PL_parser && PL_parser->bufptr ) ) return NULL;
0 9 if ( !( PL_parser && PL_parser->bufptr ) ) return NULL;
246 0 9 if ( *PL_parser->bufptr != '{' ) return NULL;
270 0 0 if (!elseop) return newCONDOP(0, cond, thenop, newOP(OP_NULL, 0));
282 1 12 if ( looputil_consume_word(aTHX_ "else") ) {
286 3 10 if ( label ) {
293 12 1 if ( !elseop ) {
310 1 7 if ( looputil_consume_word(aTHX_ "else") ) {
314 2 6 if ( label ) {
321 7 1 if ( !elseop ) {
338 2 7 if ( looputil_consume_word(aTHX_ "else") ) {
342 2 7 if ( label ) {
349 7 2 if ( !elseop ) {
366 3 4 if ( looputil_consume_word(aTHX_ "else") ) {
370 2 5 if ( label ) {
377 4 3 if ( !elseop ) {
399 20 0 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
0 20 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
402 0 20 if ( *s != '(' ) return 0;
405 71 0 while ( *p ) {
406 0 71 if ( *p == '\\' ) {
407 0 0 if ( p[1] ) p += 2;
412 71 0 if ( *p == '\'' || *p == '"' ) {
0 71 if ( *p == '\'' || *p == '"' ) {
414 0 0 while ( *p ) {
415 0 0 if ( *p == '\\' && p[1] ) {
0 0 if ( *p == '\\' && p[1] ) {
419 0 0 if ( *p == q ) {
428 21 50 if ( *p == '(' ) depth++;
429 21 29 else if ( *p == ')' ) {
431 20 1 if ( depth == 0 ) {
451 4 0 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
0 4 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
455 0 3 if ( !expr ) return 0;
459 3 0 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
0 3 if ( !( PL_parser && PL_parser->bufptr ) ) return 0;
462 1 2 if ( cursor < start ) {
464 0 1 if ( len == 0 ) return 0;
469 2 0 if ( *cursor == ';' ) {
475 0 0 if ( *cursor == '\0' ) {
492 23 0 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr == '(' ) {
23 0 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr == '(' ) {
20 3 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr == '(' ) {
493 0 20 if ( !looputil_parse_parenthesized_text(aTHX_ count_expr) ) {
519 23 0 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr != '{' ) {
23 0 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr != '{' ) {
4 19 if ( PL_parser && PL_parser->bufptr && *PL_parser->bufptr != '{' ) {
521 0 3 if ( !looputil_parse_statement_text(aTHX_ stmt_expr) ) {
554 100 0 if ( cx && iter_sv && SvOK(iter_sv) ) {
100 0 if ( cx && iter_sv && SvOK(iter_sv) ) {
100 0 if ( cx && iter_sv && SvOK(iter_sv) ) {
558 100 0 if ( cx && kind_sv && SvOK(kind_sv) ) {
100 0 if ( cx && kind_sv && SvOK(kind_sv) ) {
100 0 if ( cx && kind_sv && SvOK(kind_sv) ) {
562 97 3 if ( strEQ(kind, "finite") ) {
563 97 0 IV n = ( len_sv && SvOK(len_sv) ) ? SvIV(len_sv) : 0;
97 0 IV n = ( len_sv && SvOK(len_sv) ) ? SvIV(len_sv) : 0;
566 3 0 else if ( strEQ(kind, "infinite") ) {
579 22 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
9 13 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
9 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
9 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
582 12 1 else if ( looputil_iteration_index_for_cx(aTHX_ cx, &i) ) RETVAL = ( i == 0 );
594 12 0 if ( looputil_resolve_iteration_for_cx(aTHX_ found, &i) ) RETVAL = ( i == 0 );
610 0 6 if ( t == CXt_LOOP_ARY ) {
613 0 0 if ( ary ) {
618 0 6 else if ( t == CXt_LOOP_LIST ) {
624 0 0 if ( top >= base ) {
629 6 0 else if ( t == CXt_LOOP_LAZYIV ) {
634 0 0 else if ( t == CXt_LOOP_LAZYSV ) {
637 0 0 RETVAL = ( cur && end && sv_cmp(cur, end) == 0 );
0 0 RETVAL = ( cur && end && sv_cmp(cur, end) == 0 );
0 0 RETVAL = ( cur && end && sv_cmp(cur, end) == 0 );
639 0 0 else if ( looputil_get_loopkind_for_cx(aTHX_ found, &is_finite, &length) ) {
641 0 0 if ( !is_finite ) {
644 0 0 if ( !looputil_get_iteration_for_cx(aTHX_ found, &i) ) {
647 0 0 RETVAL = ( length > 0 && i >= ( length - 1 ) );
0 0 RETVAL = ( length > 0 && i >= ( length - 1 ) );
653 2 4 if ( RETVAL ) {
666 6 0 if ( looputil_resolve_iteration_for_cx(aTHX_ found, &i) ) RETVAL = ( ( i % 2 ) == 0 );
678 6 0 if ( looputil_resolve_iteration_for_cx(aTHX_ found, &i) ) RETVAL = ( ( i % 2 ) != 0 );
691 14 0 if ( kind_sv && SvOK(kind_sv) ) {
4 10 if ( kind_sv && SvOK(kind_sv) ) {
695 1 3 if ( strEQ(kind, "infinite") ) {
699 3 0 if ( strEQ(kind, "finite") ) {
700 3 0 IV i = ( iter_sv && SvOK(iter_sv) ) ? SvIV(iter_sv) : 0;
3 0 IV i = ( iter_sv && SvOK(iter_sv) ) ? SvIV(iter_sv) : 0;
701 3 0 IV n = ( len_sv && SvOK(len_sv) ) ? SvIV(len_sv) : 0;
3 0 IV n = ( len_sv && SvOK(len_sv) ) ? SvIV(len_sv) : 0;
702 3 0 RETVAL = n > 0 && i >= ( n - 1 );
1 2 RETVAL = n > 0 && i >= ( n - 1 );
708 0 10 else if (!cx) { croak("iflast called outside for loop"); }
722 9 1 if (t == CXt_LOOP_ARY) {
725 9 0 if (ary) {
727 3 6 if (ix >= lastix) RETVAL = 1;
730 0 1 else if (t == CXt_LOOP_LIST) {
737 0 0 if (top >= base) {
739 0 0 if (ix >= (total - 1)) RETVAL = 1;
742 0 1 else if (t == CXt_LOOP_LAZYIV) {
745 0 0 if (cur == end) RETVAL = 1;
747 0 1 else if (t == CXt_LOOP_LAZYSV) {
750 0 0 if (cur && end && sv_cmp(cur, end) == 0) RETVAL = 1;
0 0 if (cur && end && sv_cmp(cur, end) == 0) RETVAL = 1;
0 0 if (cur && end && sv_cmp(cur, end) == 0) RETVAL = 1;
753 3 7 if (RETVAL) {
758 1 6 if ( t != CXt_LOOP_ARY && t != CXt_LOOP_LIST &&
1 0 if ( t != CXt_LOOP_ARY && t != CXt_LOOP_LIST &&
1 0 if ( t != CXt_LOOP_ARY && t != CXt_LOOP_LIST &&
759 1 0 t != CXt_LOOP_LAZYIV && t != CXt_LOOP_LAZYSV ) {
775 12 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 9 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
778 8 1 else if ( looputil_iteration_index_for_cx(aTHX_ cx, &i) ) RETVAL = ( ( i % 2 ) == 0 );
791 14 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 11 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
3 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) ) {
794 9 2 else if ( looputil_iteration_index_for_cx(aTHX_ cx, &i) ) RETVAL = ( ( i % 2 ) != 0 );
806 37 1 U8 t = cx ? CxTYPE(cx) : 0;
808 38 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) && t == CXt_LOOP_PLAIN ) {
38 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) && t == CXt_LOOP_PLAIN ) {
38 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) && t == CXt_LOOP_PLAIN ) {
38 0 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) && t == CXt_LOOP_PLAIN ) {
22 16 if ( kind_sv && SvOK(kind_sv) && iter_sv && SvOK(iter_sv) && t == CXt_LOOP_PLAIN ) {
811 15 1 else if ( looputil_iteration_index_for_cx(aTHX_ cx, &i) ) {