Branch Coverage

lib/Syntax/Keyword/Try.xs
Criterion Covered Total %
branch 109 150 72.6


line true false branch
46 23 0 for (cxix = cxstack_ix; cxix; cxix--) {
47 17 6 if(CxTYPE(&cxstack[cxix]) == CXt_SUB)
50 9 8 if(CxTYPE(&cxstack[cxix]) == CXt_EVAL && CxTRYBLOCK(&cxstack[cxix])) {
58 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 &&
59 8 0 (leave = cLOGOPx(retop)->op_first) && leave->op_type == OP_LEAVETRY &&
8 0 (leave = cLOGOPx(retop)->op_first) && leave->op_type == OP_LEAVETRY &&
60 8 0 (enter = cLOGOPx(leave)->op_first) && enter->op_type == OP_ENTERTRY &&
8 0 (enter = cLOGOPx(leave)->op_first) && enter->op_type == OP_ENTERTRY &&
61 8 0 enter->op_ppaddr == &pp_entertrycatch) {
68 0 7 if(!cxix)
84 5 0 dMARK;
85 5 0 retval = (MARK == SP) ? &PL_sv_undef : TOPs;
101 0 1 Copy(retvals, AvARRAY(retav), retcount, SV *);
102 3 1 for(i = 0; i < retcount; i++)
103 3 0 SvREFCNT_inc(retvals[i]);
114 0 1 PUSHMARK(SP);
120 0 5 PUSHMARK(SP);
121 0 5 XPUSHs(retval);
128 0 1 PUSHMARK(SP);
131 1 0 EXTEND(SP, retcount);
0 1 EXTEND(SP, retcount);
132 0 1 Copy(AvARRAY(retav), SP+1, retcount, SV *);
153 0 8 PUSHMARK(SP);
189 1 13 if(op->op_next == old)
192 0 14 switch(OP_CLASS(op)) {
194 1 0 if(cLOGOPx(op)->op_other == old)
199 0 2 if(cLISTOPx(op)->op_last == old)
204 6 8 if(op->op_flags & OPf_KIDS) {
206 6 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
12 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
229 1 1 OP *parent = OpHAS_SIBLING(op) ? NULL : op->op_sibparent;
237 1 1 if(parent)
258 111 146 if(op->op_flags & OPf_KIDS) {
260 221 111 for(kid = cUNOPx(op)->op_first; kid; kid = next) {
262 110 111 next = OpSIBLING(kid);
266 2 219 if(newkid != kid) {
269 2 0 if(prev) {
275 1 1 if(next)
299 33 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 4 if(SvROK(ERRSV) || SvTRUE(ERRSV))
29 0 if(SvROK(ERRSV) || SvTRUE(ERRSV))
18 11 if(SvROK(ERRSV) || SvTRUE(ERRSV))
338 38 0 logop->op_other = LINKLIST(other);
340 38 0 logop->op_next = LINKLIST(first);
397 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);
398 46 1 bool require_var = hints && hv_fetchs(hints, "Syntax::Keyword::Try/require_var", 0);
404 41 46 while(ncatches--) {
406 37 4 PADOFFSET catchvar = has_catchvar ? args[argi++]->padix : 0;
407 37 4 int catchtype = has_catchvar ? args[argi++]->i : -1;
438 1 0 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
0 1 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
457 3 38 if(condop && !warned &&
3 0 if(condop && !warned &&
458 0 3 (!hints || !hv_fetchs(hints, "Syntax::Keyword::Try/experimental(typed)", 0))) {
467 1 40 if(require_var && !has_catchvar)
470 0 40 if(catch)
474 37 3 if(catchvar) {
480 3 37 if(condop) {
481 2 1 if(!condcatch)
488 34 3 else if(assignop) {
496 2 44 if(condcatch) {
499 1 1 if(!catch)
505 0 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
3 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
515 0 46 if(require_catch && !catch)
518 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);
521 11 35 CV *finally = has_finally ? args[argi++]->cv : NULL;
523 1 45 if(no_finally && finally)
526 0 45 if(!catch && !finally) {
528 0 0 croak(no_finally
535 38 7 if(catch) {
542 10 35 if(finally) {