home *** CD-ROM | disk | FTP | other *** search
- #define ST(off) stack_base[ax + off]
-
- #ifdef CAN_PROTOTYPE
- #define XS(name) void name(CV* cv)
- #else
- #define XS(name) void name(cv) CV* cv;
- #endif
-
- #define dXSARGS \
- dSP; dMARK; \
- I32 ax = mark - stack_base + 1; \
- I32 items = sp - mark
-
- #define XSANY CvXSUBANY(cv)
-
- #define dXSI32 I32 ix = XSANY.any_i32
-
- #define XSRETURN(off) stack_sp = stack_base + ax + ((off) - 1); return
-
- /* Simple macros to put new mortal values onto the stack. */
- /* Typically used to return values from XS functions. */
- #define XST_mIV(i,v) ST(i)=sv_2mortal(newSViv(v));
- #define XST_mNV(i,v) ST(i)=sv_2mortal(newSVnv(v));
- #define XST_mPV(i,v) ST(i)=sv_2mortal(newSVpv(v,0));
- #define XST_mNO(i) ST(i)=sv_mortalcopy(&sv_no);
- #define XST_mYES(i) ST(i)=sv_mortalcopy(&sv_yes);
- #define XST_mUNDEF(i) ST(i)=sv_newmortal();
-
- #define XSRETURN_IV(v) XST_mIV(0,v); XSRETURN(1)
- #define XSRETURN_NV(v) XST_mNV(0,v); XSRETURN(1)
- #define XSRETURN_PV(v) XST_mPV(0,v); XSRETURN(1)
- #define XSRETURN_NO XST_mNO(0); XSRETURN(1)
- #define XSRETURN_YES XST_mYES(0); XSRETURN(1)
- #define XSRETURN_UNDEF XST_mUNDEF(0); XSRETURN(1)
-