home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / cc_runtime.h < prev    next >
Text File  |  2000-01-27  |  2KB  |  76 lines

  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
  76.