From a6f4eb0a57a2e0009d1bf64dff4f70a26302e92d Mon Sep 17 00:00:00 2001 From: Vishal Bhatia Date: Tue, 2 Mar 1999 15:27:25 -0800 Subject: updates to compiler modules Message-ID: <19990303072725.779.qmail@hotmail.com> Subject: PATCH 5.005_56 + Test procedure p4raw-id: //depot/perl@3066 --- cc_runtime.h | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'cc_runtime.h') diff --git a/cc_runtime.h b/cc_runtime.h index 9a01ff8335..5b6d2c7287 100644 --- a/cc_runtime.h +++ b/cc_runtime.h @@ -59,13 +59,39 @@ SPAGAIN; \ } while (0) -#define PP_ENTERTRY(jmpbuf,label) do { \ - dJMPENV; \ +#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; \ - JMPENV_PUSH(ret); \ + B_JMPENV_PUSH(jmpbuf,ret); \ switch (ret) { \ - case 1: JMPENV_POP; JMPENV_JUMP(1); \ - case 2: JMPENV_POP; JMPENV_JUMP(2); \ - case 3: JMPENV_POP; SPAGAIN; goto label;\ - } \ + 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 -- cgit v1.2.1