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);
194 2 0 if(warnings == pWARN_NONE)
197 2 0 if(warnings == pWARN_STD)
200 0 2 else if(warnings == pWARN_ALL)
218 1 13 if(op->op_next == old)
221 0 14 switch(OP_CLASS(op)) {
223 1 0 if(cLOGOPx(op)->op_other == old)
228 0 2 if(cLISTOPx(op)->op_last == old)
233 6 8 if(op->op_flags & OPf_KIDS) {
235 6 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
12 6 for(kid = cUNOPx(op)->op_first; kid; kid = OpSIBLING(kid))
258 1 1 OP *parent = OpHAS_SIBLING(op) ? NULL : op->op_sibparent;
266 1 1 if(parent)
287 112 146 if(op->op_flags & OPf_KIDS) {
289 222 112 for(kid = cUNOPx(op)->op_first; kid; kid = next) {
291 110 112 next = OpSIBLING(kid);
295 2 220 if(newkid != kid) {
298 2 0 if(prev) {
304 1 1 if(next)
328 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))
367 38 0 logop->op_other = LINKLIST(other);
369 38 0 logop->op_next = LINKLIST(first);
391 2 3 if(!SvROK(sv) || !SvOBJECT(SvRV(sv)))
2 0 if(!SvROK(sv) || !SvOBJECT(SvRV(sv)))
412 3 2 SETs(boolSV(sv_isa_sv(left, right)));
426 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);
427 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);
433 41 46 while(ncatches--) {
435 37 4 PADOFFSET catchvar = has_catchvar ? args[argi++]->padix : 0;
436 37 4 int catchtype = has_catchvar ? args[argi++]->i : -1;
454 2 0 if(type->op_type == OP_CONST)
467 1 0 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
0 1 if(regexp->op_type != OP_MATCH || cPMOPx(regexp)->op_first)
486 3 38 if(condop && !warned &&
3 0 if(condop && !warned &&
487 0 3 (!hints || !hv_fetchs(hints, "Syntax::Keyword::Try/experimental(typed)", 0))) {
496 1 40 if(require_var && !has_catchvar)
499 0 40 if(catch)
503 37 3 if(catchvar) {
509 3 37 if(condop) {
510 2 1 if(!condcatch)
517 34 3 else if(assignop) {
525 2 44 if(condcatch) {
528 1 1 if(!catch)
534 0 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
3 2 for(i = AvFILL(condcatch)-1; i >= 0; i -= 2) {
544 0 46 if(require_catch && !catch)
547 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);
550 11 35 CV *finally = has_finally ? args[argi++]->cv : NULL;
552 1 45 if(no_finally && finally)
555 0 45 if(!catch && !finally) {
557 0 0 croak(no_finally
564 38 7 if(catch) {
571 10 35 if(finally) {