X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sv.h;h=71e8e55fb57147ec724e0c5fbaee974a9b96dafd;hb=c2611fb358d57faaf2390cf4e8c5224abf2c4cc4;hp=6b4a125d39c9e3e3a938cbec50e215a4ed91eae1;hpb=6ee623d521a149edc6574c512fa951a192cd086a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sv.h b/sv.h index 6b4a125..71e8e55 100644 --- a/sv.h +++ b/sv.h @@ -74,20 +74,16 @@ struct io { #ifdef USE_THREADS -# ifndef EMULATE_ATOMIC_REFCOUNTS -# include "atomic.h" -# endif - # ifdef EMULATE_ATOMIC_REFCOUNTS # define ATOMIC_INC(count) STMT_START { \ - MUTEX_LOCK(&svref_mutex); \ + MUTEX_LOCK(&PL_svref_mutex); \ ++count; \ - MUTEX_UNLOCK(&svref_mutex); \ + MUTEX_UNLOCK(&PL_svref_mutex); \ } STMT_END # define ATOMIC_DEC_AND_TEST(res,count) STMT_START { \ - MUTEX_LOCK(&svref_mutex); \ + MUTEX_LOCK(&PL_svref_mutex); \ res = (--count == 0); \ - MUTEX_UNLOCK(&svref_mutex); \ + MUTEX_UNLOCK(&PL_svref_mutex); \ } STMT_END # else # define ATOMIC_INC(count) atomic_inc(&count) @@ -111,7 +107,7 @@ struct io { # define SvREFCNT_inc(sv) sv_newref((SV*)sv) # else # define SvREFCNT_inc(sv) \ - ((Sv=(SV*)(sv)), (Sv && ATOMIC_INC(SvREFCNT(Sv))), (SV*)Sv) + ((PL_Sv=(SV*)(sv)), (PL_Sv && ATOMIC_INC(SvREFCNT(PL_Sv))), (SV*)PL_Sv) # endif #endif @@ -151,9 +147,7 @@ struct io { #define SVf_OK (SVf_IOK|SVf_NOK|SVf_POK|SVf_ROK| \ SVp_IOK|SVp_NOK|SVp_POK) -#ifdef OVERLOAD -#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */ -#endif /* OVERLOAD */ +#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */ #define PRIVSHIFT 8 @@ -271,7 +265,7 @@ struct xpvfm { HV * xcv_stash; OP * xcv_start; OP * xcv_root; - void (*xcv_xsub)_((CV*)); + void (*xcv_xsub)_((CV* _CPERLproto)); ANY xcv_xsubany; GV * xcv_gv; GV * xcv_filegv; @@ -318,7 +312,8 @@ struct xpvio { #define IOf_START 2 /* check for null ARGV and substitute '-' */ #define IOf_FLUSH 4 /* this fp wants a flush after write op */ #define IOf_DIDTOP 8 /* just did top of form */ -#define IOf_UNTAINT 16 /* consider this fp (and it's data) "safe" */ +#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */ +#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */ /* The following macros define implementation-independent predicates on SVs. */ @@ -328,13 +323,8 @@ struct xpvio { SVp_IOK|SVp_NOK)) #define SvOK(sv) (SvFLAGS(sv) & SVf_OK) - -#ifdef OVERLOAD #define SvOK_off(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC), \ SvOOK_off(sv)) -#else -#define SvOK_off(sv) (SvFLAGS(sv) &= ~SVf_OK, SvOOK_off(sv)) -#endif /* OVERLOAD */ #define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) #define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK) @@ -348,7 +338,7 @@ struct xpvio { #define SvIOK_on(sv) (SvOOK_off(sv), \ SvFLAGS(sv) |= (SVf_IOK|SVp_IOK)) #define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK)) -#define SvIOK_only(sv) (SvOOK_off(sv), SvOK_off(sv), \ +#define SvIOK_only(sv) (SvOK_off(sv), \ SvFLAGS(sv) |= (SVf_IOK|SVp_IOK)) #define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK) @@ -360,14 +350,8 @@ struct xpvio { #define SvPOK(sv) (SvFLAGS(sv) & SVf_POK) #define SvPOK_on(sv) (SvFLAGS(sv) |= (SVf_POK|SVp_POK)) #define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK)) - -#ifdef OVERLOAD -#define SvPOK_only(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC), \ +#define SvPOK_only(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC), \ SvFLAGS(sv) |= (SVf_POK|SVp_POK)) -#else -#define SvPOK_only(sv) (SvFLAGS(sv) &= ~SVf_OK, \ - SvFLAGS(sv) |= (SVf_POK|SVp_POK)) -#endif /* OVERLOAD */ #define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK) #define SvOOK_on(sv) (SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK) @@ -379,12 +363,7 @@ struct xpvio { #define SvROK(sv) (SvFLAGS(sv) & SVf_ROK) #define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK) - -#ifdef OVERLOAD #define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVf_AMAGIC)) -#else -#define SvROK_off(sv) (SvFLAGS(sv) &= ~SVf_ROK) -#endif /* OVERLOAD */ #define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG)) #define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG)) @@ -402,18 +381,16 @@ struct xpvio { #define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG) #define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG) -#ifdef OVERLOAD -#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC) -#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC) -#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC) +#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC) +#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC) +#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC) /* #define Gv_AMG(stash) \ (HV_AMAGICmb(stash) && \ ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash))) */ -#define Gv_AMG(stash) (amagic_generation && Gv_AMupdate(stash)) -#endif /* OVERLOAD */ +#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash)) #define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST) @@ -469,7 +446,7 @@ struct xpvio { #define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len #define SvLENx(sv) SvLEN(sv) #define SvEND(sv)(((XPV*) SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur) -#define SvENDx(sv) ((Sv = (sv)), SvEND(Sv)) +#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv)) #define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_magic #define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash @@ -521,20 +498,21 @@ struct xpvio { #define IoFLAGS(sv) ((XPVIO*) SvANY(sv))->xio_flags #define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv)) -#define SvTAINTED_on(sv) STMT_START{ if(tainting){sv_taint(sv);} }STMT_END -#define SvTAINTED_off(sv) STMT_START{ if(tainting){sv_untaint(sv);} }STMT_END +#define SvTAINTED_on(sv) STMT_START{ if(PL_tainting){sv_taint(sv);} }STMT_END +#define SvTAINTED_off(sv) STMT_START{ if(PL_tainting){sv_untaint(sv);} }STMT_END #define SvTAINT(sv) \ STMT_START { \ - if (tainting) { \ + if (PL_tainting) { \ dTHR; \ - if (tainted) \ + if (PL_tainted) \ SvTAINTED_on(sv); \ } \ } STMT_END #define SvPV_force(sv, lp) sv_pvn_force(sv, &lp) #define SvPV(sv, lp) sv_pvn(sv, &lp) +#define SvPV_nolen(sv) sv_pv(sv) #define SvIVx(sv) sv_iv(sv) #define SvUVx(sv) sv_uv(sv) #define SvNVx(sv) sv_nv(sv) @@ -568,6 +546,10 @@ struct xpvio { ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force(sv, &lp)) +#undef SvPV_nolen +#define SvPV_nolen(sv) \ + (SvPOK(sv) ? SvPVX(sv) : sv_2pv_nolen(sv)) + #ifdef __GNUC__ # undef SvIVx # undef SvUVx @@ -608,18 +590,18 @@ struct xpvio { # undef SvPVx # undef SvTRUE # undef SvTRUEx -# define SvIVx(sv) ((Sv = (sv)), SvIV(Sv)) -# define SvUVx(sv) ((Sv = (sv)), SvUV(Sv)) -# define SvNVx(sv) ((Sv = (sv)), SvNV(Sv)) -# define SvPVx(sv, lp) ((Sv = (sv)), SvPV(Sv, lp)) +# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv)) +# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) +# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv)) +# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp)) # define SvTRUE(sv) ( \ !sv \ ? 0 \ : SvPOK(sv) \ - ? ((Xpv = (XPV*)SvANY(sv)) && \ - (*Xpv->xpv_pv > '0' || \ - Xpv->xpv_cur > 1 || \ - (Xpv->xpv_cur && *Xpv->xpv_pv != '0')) \ + ? ((PL_Xpv = (XPV*)SvANY(sv)) && \ + (*PL_Xpv->xpv_pv > '0' || \ + PL_Xpv->xpv_cur > 1 || \ + (PL_Xpv->xpv_cur && *PL_Xpv->xpv_pv != '0')) \ ? 1 \ : 0) \ : \ @@ -628,22 +610,12 @@ struct xpvio { : SvNOK(sv) \ ? SvNVX(sv) != 0.0 \ : sv_2bool(sv) ) -# define SvTRUEx(sv) ((Sv = (sv)), SvTRUE(Sv)) +# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv)) #endif /* !USE_THREADS */ #endif /* !__GNU__ */ #endif /* !CRIPPLED_CC */ #define newRV_inc(sv) newRV(sv) -#ifdef __GNUC__ -# undef newRV_noinc -# define newRV_noinc(sv) ({SV *nsv=newRV((sv)); --SvREFCNT(SvRV(nsv)); nsv;}) -#else -# if defined(CRIPPLED_CC) || defined(USE_THREADS) -# else -# undef newRV_noinc -# define newRV_noinc(sv) ((Sv = newRV(sv)), --SvREFCNT(SvRV(Sv)), Sv) -# endif -#endif /* __GNUC__ */ /* the following macros update any magic values this sv is associated with */ @@ -678,11 +650,15 @@ struct xpvio { #define SvSetMagicSV_nosteal(dst,src) \ SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst)) +#ifdef DEBUGGING #define SvPEEK(sv) sv_peek(sv) +#else +#define SvPEEK(sv) "" +#endif -#define SvIMMORTAL(sv) ((sv)==&sv_undef || (sv)==&sv_yes || (sv)==&sv_no) +#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no) -#define boolSV(b) ((b) ? &sv_yes : &sv_no) +#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #define isGV(sv) (SvTYPE(sv) == SVt_PVGV)