X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp.h;h=ccd372dafedba8158cb115ee10dc77ffe22c32e2;hb=8782d0485eaade9b76a15b4d706a38e48b809eb1;hp=bdc0b1a6c1c98e78d7dfc3128ed40c8302cea654;hpb=3818b22bb9ef820a2553aa5e3504220f3b156f21;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp.h b/pp.h index bdc0b1a..ccd372d 100644 --- a/pp.h +++ b/pp.h @@ -33,6 +33,13 @@ L. Declares a local copy of perl's stack pointer for the XSUB, available via the C macro. See C. +=for apidoc ms||djSP + +Declare Just C. This is actually identical to C, and declares +a local copy of perl's stack pointer, available via the C macro. +See C. (Available for backward source code compatibility with the +old (Perl 5.005) thread model.) + =for apidoc Ams||dMARK Declare a stack marker variable, C, for the XSUB. See C and C. @@ -46,8 +53,7 @@ The original stack mark for the XSUB. See C. =for apidoc Ams||SPAGAIN Refetch the stack pointer. Used after a callback. See L. -=cut -*/ +=cut */ #define SP sp #define MARK mark @@ -61,7 +67,7 @@ Refetch the stack pointer. Used after a callback. See L. #define POPMARK (*PL_markstack_ptr--) #define djSP register SV **sp = PL_stack_sp -#define dSP dTHR; djSP +#define dSP djSP #define dMARK register SV **mark = PL_stack_base + POPMARK #define dORIGMARK I32 origmark = mark - PL_stack_base #define SETORIGMARK origmark = mark - PL_stack_base @@ -126,6 +132,7 @@ Pops a long off the stack. #endif #define TOPs (*sp) +#define TOPm1s (*(sp-1)) #define TOPp (SvPV(TOPs, PL_na)) /* deprecated */ #define TOPpx (SvPV(TOPs, n_a)) #define TOPn (SvNV(TOPs)) @@ -143,11 +150,11 @@ Pops a long off 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 +used, guarantees 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. +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 @@ -185,7 +192,7 @@ 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. +Push an unsigned integer onto the stack, extending the stack if necessary. See C. =cut @@ -342,10 +349,13 @@ See C. { dTARGETSTACKED; \ { dSP; tryAMAGICunW(meth,FORCE_SETs,shift,RETURN);}}} -#define setAGAIN(ref) sv = arg = ref; \ - if (!SvROK(ref)) \ +#define setAGAIN(ref) sv = ref; \ + if (!SvROK(ref)) \ Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); \ - goto am_again; + if (ref != arg && SvRV(ref) != SvRV(arg)) { \ + arg = ref; \ + goto am_again; \ + } #define tryAMAGICunDEREF(meth) tryAMAGICunW(meth,setAGAIN,0,(void)0)