X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=XSUB.h;h=cd8a732be0cd6676afe14fb9e623f0378630c1b1;hb=e91177edb0beae74fd07fb1ec08a528ab1fb63c2;hp=f9c0503a39ed05f663da32d10b777ffbc717d291;hpb=3bd495df69b982704c59fc1ecbed71e5112e7da0;p=p5sagit%2Fp5-mst-13.2.git diff --git a/XSUB.h b/XSUB.h index f9c0503..cd8a732 100644 --- a/XSUB.h +++ b/XSUB.h @@ -2,7 +2,7 @@ #ifdef CAN_PROTOTYPE #ifdef PERL_OBJECT -#define XS(name) void name(CPerlObj* pPerl, CV* cv) +#define XS(name) void name(CV* cv, CPerlObj* pPerl) #else #define XS(name) void name(CV* cv) #endif @@ -11,7 +11,7 @@ #endif #define dXSARGS \ - dSP; dMARK; \ + dSP; dMARK; \ I32 ax = mark - stack_base + 1; \ I32 items = sp - mark @@ -19,6 +19,16 @@ #define dXSI32 I32 ix = XSANY.any_i32 +#ifdef __cplusplus +# define XSINTERFACE_CVT(ret,name) ret (*name)(...) +#else +# define XSINTERFACE_CVT(ret,name) ret (*name)() +#endif +#define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION) +#define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT(ret,))(f)) +#define XSINTERFACE_FUNC_SET(cv,f) \ + CvXSUBANY(cv).any_dptr = (void (*) _((void*)))(f) + #define XSRETURN(off) \ STMT_START { \ stack_sp = stack_base + ax + ((off) - 1); \ @@ -75,4 +85,8 @@ #include "XSLock.h" #endif /* WIN32 */ #endif /* NO_XSLOCKS */ +#else +#ifdef PERL_CAPI +#include "PerlCAPI.h" +#endif #endif /* PERL_OBJECT */