Branch Coverage

lib/Syntax/Keyword/Try.xs
Criterion Covered Total %
branch 131 230 56.9


line true false branch
45 23 0 for (cxix = cxstack_ix; cxix; cxix--) {
46 17 6 if(CxTYPE(&cxstack[cxix]) == CXt_SUB)
49 9 8 if(CxTYPE(&cxstack[cxix]) == CXt_EVAL && CxTRYBLOCK(&cxstack[cxix])) {
57 8 1 if(retop->op_type == OP_CUSTOM && retop->op_ppaddr == &pp_catch &&
8 0 if(retop->op_type == OP_CUSTOM && retop->op_ppaddr == &pp_catch &&
8 0 if(retop->op_type == OP_CUSTOM && retop->op_ppaddr == &pp_catch &&
58 8 0 (leave = cLOGOPx(retop)->op_first) && leave->op_type == OP_LEAVETRY &&
8 0 (leave = cLOGOPx(retop)->op_first) && leave->op_type == OP_LEAVETRY &&
59 8 0 (enter = cLOGOPx(leave)->op_first) && enter->op_type == OP_ENTERTRY &&
8 0 (enter = cLOGOPx(leave)->op_first) && enter->op_type == OP_ENTERTRY &&
67 0 7 if(!cxix)
84 5 0 retval = (MARK == SP) ? &PL_sv_undef : TOPs;
100 0 1 Copy(retvals, AvARRAY(retav), retcount, SV *);
101 3 1 for(i = 0; i < retcount; i++)
113 0 1 PUSHMARK(SP);
119 0 5 PUSHMARK(SP);
120 0 5 XPUSHs(retval);
127 0 1 PUSHMARK(SP);
130 1 0 EXTEND(SP, retcount);
0 1 EXTEND(SP, retcount);
131 0 1 Copy(AvARRAY(retav), SP+1, retcount, SV *);
152 0 8 PUSHMARK(SP);
185 2 0 if(warnings == pWARN_NONE)
188 2 0 if(warnings == pWARN_STD)
191 0 2 else if(warnings == pWARN_ALL)
207 1 13 if(op->op_next == old)
210 0 14 switch(OP_CLASS(op)) {
212 1 0 if(cLOGOPx(op)->op_other == old)
217 0 2 if(cLISTOPx(op)->op_last == old)
222 6 8 if(op->op_flags & OPf_KIDS) {
224 6 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
12 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
247 1 1 OP *parent = OpHAS_SIBLING(op) ? NULL : op->op_sibparent;
255 1 1 if(parent)
276 112 146 if(op->op_flags & OPf_KIDS) {
278 222 112 for(kid = cUNOPx(op)->op_first; kid; kid = next) {
280 110 112 next = OpSIBLING(kid);
284 2 220 if(newkid != kid) {
287 2 0 if(prev) {
293 1 1 if(next)
317 33 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 4 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 29 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 29 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
11 18 if(SvROK(ERRSV) || SvTRUE(ERRSV))
11 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 11 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
18 11 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
0 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
356 38 0 logop->op_other = LINKLIST(other);
358 38 0 logop->op_next = LINKLIST(first);
380 2 3 if(!SvROK(sv) || !SvOBJECT(SvRV(sv)))
2 0 if(!SvROK(sv) || !SvOBJECT(SvRV(sv)))
401 3 2 SETs(boolSV(sv_isa_sv(left, right)));
415 47 0 bool require_catch = hints && hv_fetchs(hints, "Syntax::Keyword::Try/require_catch", 0);
47 0 bool require_catch = hints && hv_fetchs(hints, "Syntax::Keyword::Try/require_catch", 0);
416 47 0 bool require_var = hints && hv_fetchs(hints, "Syntax::Keyword::Try/require_var", 0);
46 1 bool require_var = hints && hv_fetchs(hints, "Syntax::Keyword::Try/require_var", 0);
422 41 46 while(ncatches--) {
424 37 4 PADOFFSET catchvar = has_catchvar ? args[argi++]->padix : 0;
425 37 4 int catchtype = has_catchvar ? args[argi++]->i : -1;
443 2 0 if(type->op_type == OP_CONST)
456 1 0 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
0 1 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
475 3 38 if(condop && !warned &&
3 0 if(condop && !warned &&
476 0 3 (!hints || !hv_fetchs(hints, "Syntax::Keyword::Try/experimental(typed)", 0))) {
485 1 40 if(require_var && !has_catchvar)
488 0 40 if(catch)
492 37 3 if(catchvar) {
498 3 37 if(condop) {
499 2 1 if(!condcatch)
506 34 3 else if(assignop) {
514 2 44 if(condcatch) {
517 1 1 if(!catch)
523 0 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
3 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
533 0 46 if(require_catch && !catch)
536 46 0 bool no_finally = hints && hv_fetchs(hints, "Syntax::Keyword::Try/no_finally", 0);
45 1 bool no_finally = hints && hv_fetchs(hints, "Syntax::Keyword::Try/no_finally", 0);
539 11 35 CV *finally = has_finally ? args[argi++]->cv : NULL;
541 1 45 if(no_finally && finally)
544 0 45 if(!catch && !finally) {
546 0 0 croak(no_finally
553 38 7 if(catch) {
560 10 35 if(finally) {