/* pp.h
*
- * Copyright (c) 1991-2001, Larry Wall
+ * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
+ * 2000, 2001, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
-#ifdef USE_THREADS
-#define ARGS thr
-#define dARGS struct perl_thread *thr;
-#else
-#define ARGS
-#define dARGS
-#endif /* USE_THREADS */
-
#define PP(s) OP * Perl_##s(pTHX)
/*
+=head1 Stack Manipulation Macros
+
=for apidoc AmU||SP
Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
C<SPAGAIN>.
Pops an SV off the stack.
=for apidoc Amn|char*|POPp
+Pops a string off the stack. Deprecated. New code should provide
+a STRLEN n_a and use POPpx.
+
+=for apidoc Amn|char*|POPpx
Pops a string off the stack.
+Requires a variable STRLEN n_a in scope.
+
+=for apidoc Amn|char*|POPpbytex
+Pops a string off the stack which must consist of bytes i.e. characters < 256.
+Requires a variable STRLEN n_a in scope.
=for apidoc Amn|NV|POPn
Pops a double off the stack.
#define POPs (*sp--)
#define POPp (SvPVx(POPs, PL_na)) /* deprecated */
#define POPpx (SvPVx(POPs, n_a))
+#define POPpbytex (SvPVbytex(POPs, n_a))
#define POPn (SvNVx(POPs))
#define POPi ((IV)SvIVx(POPs))
#define POPu ((UV)SvUVx(POPs))
=cut
*/
-#define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (n)) { \
+#define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (int)(n)) { \
sp = stack_grow(sp,p, (int) (n)); \
} } STMT_END
/* Same thing, but update mark register too. */
-#define MEXTEND(p,n) STMT_START {if (PL_stack_max - p < (n)) { \
+#define MEXTEND(p,n) STMT_START {if (PL_stack_max - p < (int)(n)) { \
int markoff = mark - PL_stack_base; \
sp = stack_grow(sp,p,(int) (n)); \
mark = PL_stack_base + markoff; \
if (PL_amagic_generation) { \
SV* tmpsv; \
SV* arg= sp[shift]; \
+ if(0) goto am_again; /* shut up unused warning */ \
am_again: \
if ((SvAMAGIC(arg))&&\
(tmpsv=AMG_CALLun(arg,meth))) {\
changed SV* ref to SV* tmpRef */
#define RvDEEPCP(rv) STMT_START { SV* tmpRef=SvRV(rv); \
if (SvREFCNT(tmpRef)>1) { \
+ SvRV(rv)=AMG_CALLun(rv,copy); \
SvREFCNT_dec(tmpRef); \
- SvRV(rv)=AMG_CALLun(rv,copy); \
} } STMT_END
/*