summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl/pp.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/perl/pp.h')
-rw-r--r--gnu/usr.bin/perl/pp.h113
1 files changed, 64 insertions, 49 deletions
diff --git a/gnu/usr.bin/perl/pp.h b/gnu/usr.bin/perl/pp.h
index 3c3bdcf9c07..c0cebcc2969 100644
--- a/gnu/usr.bin/perl/pp.h
+++ b/gnu/usr.bin/perl/pp.h
@@ -1,80 +1,91 @@
/* pp.h
*
- * Copyright (c) 1991-1997, Larry Wall
+ * Copyright (c) 1991-1999, 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.
*
*/
+#ifdef USE_THREADS
+#define ARGS thr
+#define dARGS struct perl_thread *thr;
+#else
#define ARGS
-#define ARGSproto void
#define dARGS
-#define PP(s) OP* s(ARGS) dARGS
+#endif /* USE_THREADS */
+#ifdef PERL_OBJECT
+#define PP(s) OP * CPerlObj::s(ARGSproto)
+#else
+#define PP(s) OP * s(ARGSproto)
+#endif
#define SP sp
#define MARK mark
#define TARG targ
-#define PUSHMARK(p) if (++markstack_ptr == markstack_max) \
+#define PUSHMARK(p) if (++PL_markstack_ptr == PL_markstack_max) \
markstack_grow(); \
- *markstack_ptr = (p) - stack_base
+ *PL_markstack_ptr = (p) - PL_stack_base
-#define TOPMARK (*markstack_ptr)
-#define POPMARK (*markstack_ptr--)
+#define TOPMARK (*PL_markstack_ptr)
+#define POPMARK (*PL_markstack_ptr--)
-#define dSP register SV **sp = stack_sp
-#define dMARK register SV **mark = stack_base + POPMARK
-#define dORIGMARK I32 origmark = mark - stack_base
-#define SETORIGMARK origmark = mark - stack_base
-#define ORIGMARK (stack_base + origmark)
+#define djSP register SV **sp = PL_stack_sp
+#define dSP dTHR; 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
+#define ORIGMARK (PL_stack_base + origmark)
-#define SPAGAIN sp = stack_sp
-#define MSPAGAIN sp = stack_sp; mark = ORIGMARK
+#define SPAGAIN sp = PL_stack_sp
+#define MSPAGAIN sp = PL_stack_sp; mark = ORIGMARK
-#define GETTARGETSTACKED targ = (op->op_flags & OPf_STACKED ? POPs : PAD_SV(op->op_targ))
+#define GETTARGETSTACKED targ = (PL_op->op_flags & OPf_STACKED ? POPs : PAD_SV(PL_op->op_targ))
#define dTARGETSTACKED SV * GETTARGETSTACKED
-#define GETTARGET targ = PAD_SV(op->op_targ)
+#define GETTARGET targ = PAD_SV(PL_op->op_targ)
#define dTARGET SV * GETTARGET
-#define GETATARGET targ = (op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(op->op_targ))
+#define GETATARGET targ = (PL_op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(PL_op->op_targ))
#define dATARGET SV * GETATARGET
#define dTARG SV *targ
-#define NORMAL op->op_next
+#define NORMAL PL_op->op_next
#define DIE return die
-#define PUTBACK stack_sp = sp
+#define PUTBACK PL_stack_sp = sp
#define RETURN return PUTBACK, NORMAL
#define RETURNOP(o) return PUTBACK, o
#define RETURNX(x) return x, PUTBACK, NORMAL
#define POPs (*sp--)
-#define POPp (SvPVx(POPs, na))
+#define POPp (SvPVx(POPs, PL_na)) /* deprecated */
+#define POPpx (SvPVx(POPs, n_a))
#define POPn (SvNVx(POPs))
#define POPi ((IV)SvIVx(POPs))
#define POPu ((UV)SvUVx(POPs))
#define POPl ((long)SvIVx(POPs))
#define TOPs (*sp)
-#define TOPp (SvPV(TOPs, na))
+#define TOPp (SvPV(TOPs, PL_na)) /* deprecated */
+#define TOPpx (SvPV(TOPs, n_a))
#define TOPn (SvNV(TOPs))
#define TOPi ((IV)SvIV(TOPs))
#define TOPu ((UV)SvUV(TOPs))
#define TOPl ((long)SvIV(TOPs))
/* Go to some pains in the rare event that we must extend the stack. */
-#define EXTEND(p,n) STMT_START { if (stack_max - p < (n)) { \
+#define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (n)) { \
sp = stack_grow(sp,p, (int) (n)); \
} } STMT_END
/* Same thing, but update mark register too. */
-#define MEXTEND(p,n) STMT_START {if (stack_max - p < (n)) { \
- int markoff = mark - stack_base; \
+#define MEXTEND(p,n) STMT_START {if (PL_stack_max - p < (n)) { \
+ int markoff = mark - PL_stack_base; \
sp = stack_grow(sp,p,(int) (n)); \
- mark = stack_base + markoff; \
+ mark = PL_stack_base + markoff; \
} } STMT_END
#define PUSHs(s) (*++sp = (s))
@@ -112,7 +123,7 @@
#define dPOPXiirl(X) IV right = POPi; IV left = CAT2(X,i)
#define USE_LEFT(sv) \
- (SvOK(sv) || SvGMAGICAL(sv) || !(op->op_flags & OPf_STACKED))
+ (SvOK(sv) || SvGMAGICAL(sv) || !(PL_op->op_flags & OPf_STACKED))
#define dPOPXnnrl_ul(X) \
double right = POPn; \
SV *leftsv = CAT2(X,s); \
@@ -134,27 +145,30 @@
#define dPOPTOPiirl dPOPXiirl(TOP)
#define dPOPTOPiirl_ul dPOPXiirl_ul(TOP)
-#define RETPUSHYES RETURNX(PUSHs(&sv_yes))
-#define RETPUSHNO RETURNX(PUSHs(&sv_no))
-#define RETPUSHUNDEF RETURNX(PUSHs(&sv_undef))
+#define RETPUSHYES RETURNX(PUSHs(&PL_sv_yes))
+#define RETPUSHNO RETURNX(PUSHs(&PL_sv_no))
+#define RETPUSHUNDEF RETURNX(PUSHs(&PL_sv_undef))
-#define RETSETYES RETURNX(SETs(&sv_yes))
-#define RETSETNO RETURNX(SETs(&sv_no))
-#define RETSETUNDEF RETURNX(SETs(&sv_undef))
+#define RETSETYES RETURNX(SETs(&PL_sv_yes))
+#define RETSETNO RETURNX(SETs(&PL_sv_no))
+#define RETSETUNDEF RETURNX(SETs(&PL_sv_undef))
-#define ARGTARG op->op_targ
-#define MAXARG op->op_private
+#define ARGTARG PL_op->op_targ
+#define MAXARG PL_op->op_private
-#define SWITCHSTACK(f,t) AvFILL(f) = sp - stack_base; \
- stack_base = AvARRAY(t); \
- stack_max = stack_base + AvMAX(t); \
- sp = stack_sp = stack_base + AvFILL(t); \
- curstack = t;
+#define SWITCHSTACK(f,t) \
+ STMT_START { \
+ AvFILLp(f) = sp - PL_stack_base; \
+ PL_stack_base = AvARRAY(t); \
+ PL_stack_max = PL_stack_base + AvMAX(t); \
+ sp = PL_stack_sp = PL_stack_base + AvFILLp(t); \
+ PL_curstack = t; \
+ } STMT_END
#define EXTEND_MORTAL(n) \
STMT_START { \
- if (tmps_ix + (n) >= tmps_max) \
- Renew(tmps_stack, tmps_max = tmps_ix + (n) + 1, SV*); \
+ if (PL_tmps_ix + (n) >= PL_tmps_max) \
+ Renew(PL_tmps_stack, PL_tmps_max = PL_tmps_ix + (n) + 1, SV*); \
} STMT_END
#ifdef OVERLOAD
@@ -165,7 +179,7 @@
#define AMGf_unary 8
#define tryAMAGICbinW(meth,assign,set) STMT_START { \
- if (amagic_generation) { \
+ if (PL_amagic_generation) { \
SV* tmpsv; \
SV* right= *(sp); SV* left= *(sp-1);\
if ((SvAMAGIC(left)||SvAMAGIC(right))&&\
@@ -181,13 +195,13 @@
#define tryAMAGICbin(meth,assign) tryAMAGICbinW(meth,assign,SETsv)
#define tryAMAGICbinSET(meth,assign) tryAMAGICbinW(meth,assign,SETs)
-#define AMG_CALLun(sv,meth) amagic_call(sv,&sv_undef, \
+#define AMG_CALLun(sv,meth) amagic_call(sv,&PL_sv_undef, \
CAT2(meth,_amg),AMGf_noright | AMGf_unary)
#define AMG_CALLbinL(left,right,meth) \
amagic_call(left,right,CAT2(meth,_amg),AMGf_noright)
#define tryAMAGICunW(meth,set) STMT_START { \
- if (amagic_generation) { \
+ if (PL_amagic_generation) { \
SV* tmpsv; \
SV* arg= *(sp); \
if ((SvAMAGIC(arg))&&\
@@ -200,7 +214,7 @@
#define tryAMAGICun tryAMAGICunSET
#define tryAMAGICunSET(meth) tryAMAGICunW(meth,SETs)
-#define opASSIGN (op->op_flags & OPf_STACKED)
+#define opASSIGN (PL_op->op_flags & OPf_STACKED)
#define SETsv(sv) STMT_START { \
if (opASSIGN) { sv_setsv(TARG, (sv)); SETTARG; } \
else SETs(sv); } STMT_END
@@ -208,10 +222,11 @@
/* newSVsv does not behave as advertised, so we copy missing
* information by hand */
-
-#define RvDEEPCP(rv) STMT_START { SV* ref=SvRV(rv); \
- if (SvREFCNT(ref)>1) { \
- SvREFCNT_dec(ref); \
+/* SV* ref causes confusion with the member variable
+ changed SV* ref to SV* tmpRef */
+#define RvDEEPCP(rv) STMT_START { SV* tmpRef=SvRV(rv); \
+ if (SvREFCNT(tmpRef)>1) { \
+ SvREFCNT_dec(tmpRef); \
SvRV(rv)=AMG_CALLun(rv,copy); \
} } STMT_END
#else