File Coverage

hax/docatch.c.inc
Criterion Covered Total %
statement 15 18 83.3
branch 3 10 30.0
condition n/a
subroutine n/a
pod n/a
total 18 28 64.2


line stmt bran cond sub pod time code
1             /* vi: set ft=c inde=: */
2              
3             #ifndef docatch
4              
5             #define docatch(firstpp) S_docatch(aTHX_ firstpp)
6              
7 13           static OP *S_docatch(pTHX_ Perl_ppaddr_t firstpp)
8             {
9             int ret;
10 11           OP * const oldop = PL_op;
11             dJMPENV;
12              
13             assert(CATCH_GET == TRUE);
14              
15 13           JMPENV_PUSH(ret);
16 13           switch (ret) {
17             case 0:
18 11           PL_op = firstpp(aTHX);
19             redo_body:
20 11 50         if(PL_op)
21 11           CALLRUNOPS(aTHX);
22             break;
23             case 3:
24             /* die caught by an inner eval - continue inner loop */
25 2 50         if (PL_restartop && PL_restartjmpenv == PL_top_env) {
    50          
26 2           PL_restartjmpenv = NULL;
27 2           PL_op = PL_restartop;
28 2           PL_restartop = 0;
29 2           goto redo_body;
30             }
31             /* FALLTHROUGH */
32             default:
33 0           JMPENV_POP;
34 0           PL_op = oldop;
35 0 0         JMPENV_JUMP(ret);
    0          
36             NOT_REACHED; /* NOTREACHED */
37             }
38 11           JMPENV_POP;
39 11           PL_op = oldop;
40 11           return NULL;
41             }
42              
43             #endif