File Coverage

hax/docatch.c.inc
Criterion Covered Total %
statement 18 21 85.7
branch 3 10 30.0
condition n/a
subroutine n/a
pod n/a
total 21 31 67.7


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 14           static OP *S_docatch(pTHX_ Perl_ppaddr_t firstpp)
8             {
9             int ret;
10 14           OP * const oldop = PL_op;
11             dJMPENV;
12              
13             assert(CATCH_GET == TRUE);
14              
15 16           JMPENV_PUSH(ret);
16 16           switch (ret) {
17 14           case 0:
18 14           PL_op = firstpp(aTHX);
19 14           redo_body:
20 14 50         if(PL_op)
21 14           CALLRUNOPS(aTHX);
22             break;
23 2           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 14           JMPENV_POP;
39 14           PL_op = oldop;
40 14           return NULL;
41             }
42              
43             #endif