source: trunk/third/perl/cc_runtime.h @ 14545

Revision 14545, 1.9 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1#define DOOP(ppname) PUTBACK; PL_op = ppname(aTHX); SPAGAIN
2#define CCPP(s)   OP * s(pTHX)
3
4#define PP_LIST(g) do {                 \
5        dMARK;                          \
6        if (g != G_ARRAY) {             \
7            if (++MARK <= SP)           \
8                *MARK = *SP;            \
9            else                        \
10                *MARK = &PL_sv_undef;   \
11            SP = MARK;                  \
12        }                               \
13   } while (0)
14
15#define MAYBE_TAINT_SASSIGN_SRC(sv) \
16    if (PL_tainting && PL_tainted && (!SvGMAGICAL(left) || !SvSMAGICAL(left) || \
17                                !((mg=mg_find(left, 't')) && mg->mg_len & 1)))\
18        TAINT_NOT
19
20#define PP_PREINC(sv) do {      \
21        if (SvIOK(sv)) {        \
22            ++SvIVX(sv);        \
23            SvFLAGS(sv) &= ~(SVf_NOK|SVf_POK|SVp_NOK|SVp_POK); \
24        }                       \
25        else                    \
26            sv_inc(sv);         \
27        SvSETMAGIC(sv);         \
28    } while (0)
29
30#define PP_UNSTACK do {         \
31        TAINT_NOT;              \
32        PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;    \
33        FREETMPS;               \
34        oldsave = PL_scopestack[PL_scopestack_ix - 1]; \
35        LEAVE_SCOPE(oldsave);   \
36        SPAGAIN;                \
37    } while(0)
38
39/* Anyone using eval "" deserves this mess */
40#define PP_EVAL(ppaddr, nxt) do {               \
41        dJMPENV;                                \
42        int ret;                                \
43        PUTBACK;                                \
44        JMPENV_PUSH(ret);                       \
45        switch (ret) {                          \
46        case 0:                                 \
47            PL_op = ppaddr(aTHX);               \
48            PL_retstack[PL_retstack_ix - 1] = Nullop;   \
49            if (PL_op != nxt) CALLRUNOPS();             \
50            JMPENV_POP;                         \
51            break;                              \
52        case 1: JMPENV_POP; JMPENV_JUMP(1);     \
53        case 2: JMPENV_POP; JMPENV_JUMP(2);     \
54        case 3:                                 \
55            JMPENV_POP;                         \
56            if (PL_restartop && PL_restartop != nxt)            \
57                JMPENV_JUMP(3);                 \
58        }                                       \
59        PL_op = nxt;                            \
60        SPAGAIN;                                \
61    } while (0)
62
63
64#define PP_ENTERTRY(jmpbuf,label)  \
65        STMT_START {                    \
66                int ret;                \
67                JMPENV_PUSH_ENV(jmpbuf,ret);                    \
68                switch (ret) {                          \
69                        case 1: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(1);\
70                        case 2: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(2);\
71                        case 3: JMPENV_POP_ENV(jmpbuf); SPAGAIN; goto label;\
72                }                                       \
73        } STMT_END
74#define PP_LEAVETRY \
75        STMT_START{ PL_top_env=PL_top_env->je_prev; }STMT_END
Note: See TracBrowser for help on using the repository browser.