#if PERL_VERSION >= 24
#define MY_PUSHBLOCK(cONtExT) cONtExT = cx_pushblock(CXt_EVAL|CXp_TRYBLOCK, G_VOID, PL_stack_sp, PL_savestack_ix)
#define MY_PUSHEVAL(cONtExT) cx_pusheval(cONtExT, PL_op, NULL)
#else
#define MY_PUSHBLOCK(cONtExT)\
int gimme = G_VOID;\
PUSHBLOCK(cONtExT, CXt_EVAL|CXp_TRYBLOCK, PL_stack_sp);
#define MY_PUSHEVAL(cONtExT) PUSHEVAL(cONtExT, NULL)
#define CX_POP(cONtExT) cxstack_ix--
#define CX_LEAVE_SCOPE(cx)\
PMOP* pmop;\
SV** newsp;\
I32 optype;\
POPEVAL(cx);\
POPBLOCK(cx, pmop);
#endif
#define TRY \
PERL_CONTEXT *cONtExT;\
MY_PUSHBLOCK(cONtExT);\
SAVEPPTR(PL_op);\
PL_op = newOP(OP_NULL, 0);\
SAVEFREEOP(PL_op);\
MY_PUSHEVAL(cONtExT);\
SAVEIV(PL_in_eval);\
PL_in_eval = 1;\
dJMPENV;\
int rEtV = 0;\
JMPENV_PUSH(rEtV);\
if (rEtV == 0)
#define CATCH\
JMPENV_POP;\
CX_LEAVE_SCOPE(cONtExT);\
if (rEtV == 0) {\
CX_POP(cONtExT);\
} else