make 4-arg win32_select() sleep more reasonably on false values
[p5sagit/p5-mst-13.2.git] / cc_runtime.h
index b7658a9..fe830c0 100644 (file)
@@ -1,4 +1,4 @@
-#define DOOP(ppname) PUTBACK; op = ppname(); SPAGAIN
+#define DOOP(ppname) PUTBACK; op = ppname(ARGS); SPAGAIN
 
 #define PP_LIST(g) do {                        \
        dMARK;                          \
        SPAGAIN;                \
     } while(0)
 
-#include "patchlevel.h"
-#if PATCHLEVEL < 3
-#define RUN() run()
-#else
-#define RUN() runops()
-#endif
-
 /* Anyone using eval "" deserves this mess */
 #define PP_EVAL(ppaddr, nxt) do {              \
-       Sigjmp_buf oldtop;                      \
-       Copy(top_env,oldtop,1,Sigjmp_buf);      \
+       dJMPENV;                                \
+       int ret;                                \
        PUTBACK;                                \
-       switch (Sigsetjmp(top_env,1)) {         \
+       JMPENV_PUSH(ret);                       \
+       switch (ret) {                          \
        case 0:                                 \
-           op = ppaddr();                      \
+           op = ppaddr(ARGS);                  \
            retstack[retstack_ix - 1] = Nullop; \
-           Copy(oldtop,top_env,1,Sigjmp_buf);  \
-           if (op != nxt) RUN();               \
+           if (op != nxt) runops();            \
+           JMPENV_POP;                         \
            break;                              \
-       case 1: Copy(oldtop,top_env,1,Sigjmp_buf); Siglongjmp(top_env,1); \
-       case 2: Copy(oldtop,top_env,1,Sigjmp_buf); Siglongjmp(top_env,2); \
+       case 1: JMPENV_POP; JMPENV_JUMP(1);     \
+       case 2: JMPENV_POP; JMPENV_JUMP(2);     \
        case 3:                                 \
-           Copy(oldtop,top_env,1,Sigjmp_buf);  \
+           JMPENV_POP;                         \
            if (restartop != nxt)               \
-               Siglongjmp(top_env, 3);         \
+               JMPENV_JUMP(3);                 \
        }                                       \
        op = nxt;                               \
        SPAGAIN;                                \
     } while (0)
 
 #define PP_ENTERTRY(jmpbuf,label) do {         \
-       Copy(top_env,jmpbuf,1,Sigjmp_buf);      \
-       switch (Sigsetjmp(top_env,1)) {         \
-       case 1: Copy(jmpbuf,top_env,1,Sigjmp_buf); Siglongjmp(top_env,1); \
-       case 2: Copy(jmpbuf,top_env,1,Sigjmp_buf); Siglongjmp(top_env,2); \
-       case 3: Copy(jmpbuf,top_env,1,Sigjmp_buf); SPAGAIN; goto label; \
+       dJMPENV;                                \
+       int ret;                                \
+       JMPENV_PUSH(ret);                       \
+       switch (ret) {                          \
+       case 1: JMPENV_POP; JMPENV_JUMP(1);     \
+       case 2: JMPENV_POP; JMPENV_JUMP(2);     \
+       case 3: JMPENV_POP; SPAGAIN; goto label;\
        }                                       \
     } while (0)