X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp.h;h=bdc0b1a6c1c98e78d7dfc3128ed40c8302cea654;hb=94a371ee7128c99a38226de46cbec028ae3a990e;hp=0eac5a56f90cb5d2a456d1f1cc99438197a17e28;hpb=b162f9ead0a98db35cdcfc8c889e344c040c8d8e;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp.h b/pp.h index 0eac5a5..bdc0b1a 100644 --- a/pp.h +++ b/pp.h @@ -1,6 +1,6 @@ /* pp.h * - * Copyright (c) 1991-1999, Larry Wall + * Copyright (c) 1991-2000, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -17,6 +17,38 @@ #define PP(s) OP * Perl_##s(pTHX) +/* +=for apidoc AmU||SP +Stack pointer. This is usually handled by C. See C and +C. + +=for apidoc AmU||MARK +Stack marker variable for the XSUB. See C. + +=for apidoc Ams||PUSHMARK +Opening bracket for arguments on a callback. See C and +L. + +=for apidoc Ams||dSP +Declares a local copy of perl's stack pointer for the XSUB, available via +the C macro. See C. + +=for apidoc Ams||dMARK +Declare a stack marker variable, C, for the XSUB. See C and +C. + +=for apidoc Ams||dORIGMARK +Saves the original stack mark for the XSUB. See C. + +=for apidoc AmU||ORIGMARK +The original stack mark for the XSUB. See C. + +=for apidoc Ams||SPAGAIN +Refetch the stack pointer. Used after a callback. See L. + +=cut +*/ + #define SP sp #define MARK mark #define TARG targ @@ -52,6 +84,29 @@ #define NORMAL PL_op->op_next #define DIE return Perl_die +/* +=for apidoc Ams||PUTBACK +Closing bracket for XSUB arguments. This is usually handled by C. +See C and L for other uses. + +=for apidoc Amn|SV*|POPs +Pops an SV off the stack. + +=for apidoc Amn|char*|POPp +Pops a string off the stack. + +=for apidoc Amn|NV|POPn +Pops a double off the stack. + +=for apidoc Amn|IV|POPi +Pops an integer off the stack. + +=for apidoc Amn|long|POPl +Pops a long off the stack. + +=cut +*/ + #define PUTBACK PL_stack_sp = sp #define RETURN return PUTBACK, NORMAL #define RETURNOP(o) return PUTBACK, o @@ -64,6 +119,11 @@ #define POPi ((IV)SvIVx(POPs)) #define POPu ((UV)SvUVx(POPs)) #define POPl ((long)SvIVx(POPs)) +#define POPul ((unsigned long)SvIVx(POPs)) +#ifdef HAS_QUAD +#define POPq ((Quad_t)SvIVx(POPs)) +#define POPuq ((Uquad_t)SvUVx(POPs)) +#endif #define TOPs (*sp) #define TOPp (SvPV(TOPs, PL_na)) /* deprecated */ @@ -72,8 +132,65 @@ #define TOPi ((IV)SvIV(TOPs)) #define TOPu ((UV)SvUV(TOPs)) #define TOPl ((long)SvIV(TOPs)) +#define TOPul ((unsigned long)SvUV(TOPs)) +#ifdef HAS_QUAD +#define TOPq ((Quad_t)SvIV(TOPs)) +#define TOPuq ((Uquad_t)SvUV(TOPs)) +#endif /* Go to some pains in the rare event that we must extend the stack. */ + +/* +=for apidoc Am|void|EXTEND|SP|int nitems +Used to extend the argument stack for an XSUB's return values. Once +used, guarrantees that there is room for at least C to be pushed +onto the stack. + +=for apidoc Am|void|PUSHs|SV* sv +Push an SV onto the stack. The stack must have room for this element. +Does not handle 'set' magic. See C. + +=for apidoc Am|void|PUSHp|char* str|STRLEN len +Push a string onto the stack. The stack must have room for this element. +The C indicates the length of the string. Handles 'set' magic. See +C. + +=for apidoc Am|void|PUSHn|NV nv +Push a double onto the stack. The stack must have room for this element. +Handles 'set' magic. See C. + +=for apidoc Am|void|PUSHi|IV iv +Push an integer onto the stack. The stack must have room for this element. +Handles 'set' magic. See C. + +=for apidoc Am|void|PUSHu|UV uv +Push an unsigned integer onto the stack. The stack must have room for this +element. See C. + +=for apidoc Am|void|XPUSHs|SV* sv +Push an SV onto the stack, extending the stack if necessary. Does not +handle 'set' magic. See C. + +=for apidoc Am|void|XPUSHp|char* str|STRLEN len +Push a string onto the stack, extending the stack if necessary. The C +indicates the length of the string. Handles 'set' magic. See +C. + +=for apidoc Am|void|XPUSHn|NV nv +Push a double onto the stack, extending the stack if necessary. Handles +'set' magic. See C. + +=for apidoc Am|void|XPUSHi|IV iv +Push an integer onto the stack, extending the stack if necessary. Handles +'set' magic. See C. + +=for apidoc Am|void|XPUSHu|UV uv +Push an unsigned integer onto the stack, extending the stack if necessary. +See C. + +=cut +*/ + #define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (n)) { \ sp = stack_grow(sp,p, (int) (n)); \ } } STMT_END @@ -115,6 +232,12 @@ #define dPOPiv IV value = POPi #define dTOPuv UV value = TOPu #define dPOPuv UV value = POPu +#ifdef HAS_QUAD +#define dTOPqv Quad_t value = TOPu +#define dPOPqv Quad_t value = POPu +#define dTOPuqv Uquad_t value = TOPuq +#define dPOPuqv Uquad_t value = POPuq +#endif #define dPOPXssrl(X) SV *right = POPs; SV *left = CAT2(X,s) #define dPOPXnnrl(X) NV right = POPn; NV left = CAT2(X,n)