X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cc_runtime.h;h=b1fc5b52b752572b96bb97b05606cd782897d2bb;hb=f092799b3cc7692539f53c1932a8808058335e26;hp=5b6d2c7287b962c284f81b0d58f30377d3513a81;hpb=a6f4eb0a57a2e0009d1bf64dff4f70a26302e92d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/cc_runtime.h b/cc_runtime.h index 5b6d2c7..b1fc5b5 100644 --- a/cc_runtime.h +++ b/cc_runtime.h @@ -1,4 +1,14 @@ -#define DOOP(ppname) PUTBACK; PL_op = ppname(ARGS); SPAGAIN +/* cc_runtime.h + * + * Copyright (c) 1998-2002, Larry Wall + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + +#define DOOP(ppname) PUTBACK; PL_op = ppname(aTHX); SPAGAIN +#define CCPP(s) OP * s(pTHX) #define PP_LIST(g) do { \ dMARK; \ @@ -13,7 +23,7 @@ #define MAYBE_TAINT_SASSIGN_SRC(sv) \ if (PL_tainting && PL_tainted && (!SvGMAGICAL(left) || !SvSMAGICAL(left) || \ - !((mg=mg_find(left, 't')) && mg->mg_len & 1)))\ + !((mg=mg_find(left, PERL_MAGIC_taint)) && mg->mg_len & 1)))\ TAINT_NOT #define PP_PREINC(sv) do { \ @@ -43,7 +53,7 @@ JMPENV_PUSH(ret); \ switch (ret) { \ case 0: \ - PL_op = ppaddr(ARGS); \ + PL_op = ppaddr(aTHX); \ PL_retstack[PL_retstack_ix - 1] = Nullop; \ if (PL_op != nxt) CALLRUNOPS(); \ JMPENV_POP; \ @@ -52,46 +62,23 @@ case 2: JMPENV_POP; JMPENV_JUMP(2); \ case 3: \ JMPENV_POP; \ - if (PL_restartop != nxt) \ + if (PL_restartop && PL_restartop != nxt) \ JMPENV_JUMP(3); \ } \ PL_op = nxt; \ SPAGAIN; \ } while (0) -#define B_JMPENV_PUSH(cur_env,v) \ - STMT_START { \ - cur_env.je_prev = PL_top_env; \ - OP_REG_TO_MEM; \ - cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1); \ - OP_MEM_TO_REG; \ - PL_top_env = &cur_env; \ - cur_env.je_mustcatch = FALSE; \ - (v) = cur_env.je_ret; \ - } STMT_END -#define B_JMPENV_POP(cur_env) \ - STMT_START { PL_top_env = cur_env.je_prev; } STMT_END - -#define B_JMPENV_JUMP(cur_env,v) \ - STMT_START { \ - OP_REG_TO_MEM; \ - if (PL_top_env->je_prev) \ - PerlProc_longjmp(PL_top_env->je_buf, (v)); \ - if ((v) == 2) \ - PerlProc_exit(STATUS_NATIVE_EXPORT); \ - PerlIO_printf(PerlIO_stderr(), "panic: top_env\n"); \ - PerlProc_exit(1); \ - } STMT_END - - -#define PP_ENTERTRY(jmpbuf,label) { \ - int ret; \ - B_JMPENV_PUSH(jmpbuf,ret); \ - switch (ret) { \ - case 1: B_JMPENV_POP(jmpbuf); B_JMPENV_JUMP(jmpbuf,1); \ - case 2: B_JMPENV_POP(jmpbuf); B_JMPENV_JUMP(jmpbuf,2); \ - case 3: B_JMPENV_POP(jmpbuf); SPAGAIN; goto label;\ - } \ - } while (0) -#define PP_LEAVETRY PL_top_env=PL_top_env->je_prev +#define PP_ENTERTRY(jmpbuf,label) \ + STMT_START { \ + int ret; \ + JMPENV_PUSH_ENV(jmpbuf,ret); \ + switch (ret) { \ + case 1: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(1);\ + case 2: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(2);\ + case 3: JMPENV_POP_ENV(jmpbuf); SPAGAIN; goto label;\ + } \ + } STMT_END +#define PP_LEAVETRY \ + STMT_START{ PL_top_env=PL_top_env->je_prev; }STMT_END