home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2 / Openstep-4.2-Intel-User.iso / usr / lib / perl5 / CORE / XSUB.h < prev   
C/C++ Source or Header  |  1997-03-29  |  1KB  |  35 lines

  1. #define ST(off) stack_base[ax + off]
  2.  
  3. #ifdef CAN_PROTOTYPE
  4. #define XS(name) void name(CV* cv)
  5. #else
  6. #define XS(name) void name(cv) CV* cv;
  7. #endif
  8.  
  9. #define dXSARGS                \
  10.     dSP; dMARK;            \
  11.     I32 ax = mark - stack_base + 1;    \
  12.     I32 items = sp - mark
  13.  
  14. #define XSANY CvXSUBANY(cv)
  15.  
  16. #define dXSI32 I32 ix = XSANY.any_i32
  17.  
  18. #define XSRETURN(off) stack_sp = stack_base + ax + ((off) - 1); return
  19.  
  20. /* Simple macros to put new mortal values onto the stack.   */
  21. /* Typically used to return values from XS functions.       */
  22. #define XST_mIV(i,v)  ST(i)=sv_2mortal(newSViv(v));
  23. #define XST_mNV(i,v)  ST(i)=sv_2mortal(newSVnv(v));
  24. #define XST_mPV(i,v)  ST(i)=sv_2mortal(newSVpv(v,0));
  25. #define XST_mNO(i)    ST(i)=sv_mortalcopy(&sv_no);
  26. #define XST_mYES(i)   ST(i)=sv_mortalcopy(&sv_yes);
  27. #define XST_mUNDEF(i) ST(i)=sv_newmortal();
  28.  
  29. #define XSRETURN_IV(v) XST_mIV(0,v);  XSRETURN(1)
  30. #define XSRETURN_NV(v) XST_mNV(0,v);  XSRETURN(1)
  31. #define XSRETURN_PV(v) XST_mPV(0,v);  XSRETURN(1)
  32. #define XSRETURN_NO    XST_mNO(0);    XSRETURN(1)
  33. #define XSRETURN_YES   XST_mYES(0);   XSRETURN(1)
  34. #define XSRETURN_UNDEF XST_mUNDEF(0); XSRETURN(1)
  35.