cvs commit: ponie/perl op.c sv.c sv.h

[email protected] (Nicholas Clark) 12 Apr 2005 11:12:14 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     05/04/12 04:12:13

  Modified:    perl     op.c sv.c sv.h
  Log:
  Assimilate 24229 from blead. Plus changes to op.c to cope with PERL_HASH
  of SvUVX()
  
  Revision  Changes    Path
  1.5       +15 -3     ponie/perl/op.c
  
  Index: op.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/op.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- op.c	10 Apr 2005 04:17:48 -0000	1.4
  +++ op.c	12 Apr 2005 11:12:13 -0000	1.5
  @@ -1588,7 +1588,11 @@
       meth = newSVpvn("import", 6);
       (void)SvUPGRADE(meth, SVt_PVIV);
       (void)SvIOK_on(meth);
  -    PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
  +    {
  +	U32 hash;
  +	PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
  +	SvUV_set(meth, hash);
  +    }
       imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
   		   append_elem(OP_LIST,
   			       prepend_elem(OP_LIST, pack, list(arg)),
  @@ -3004,7 +3008,11 @@
   	    meth = newSVpvn("VERSION",7);
   	    sv_upgrade(meth, SVt_PVIV);
   	    (void)SvIOK_on(meth);
  -	    PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
  +	    {
  +		U32 hash;
  +		PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
  +		SvUV_set(meth, hash);
  +	    }
   	    veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
   			    append_elem(OP_LIST,
   					prepend_elem(OP_LIST, pack, list(version)),
  @@ -3028,7 +3036,11 @@
   	meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
   	(void)SvUPGRADE(meth, SVt_PVIV);
   	(void)SvIOK_on(meth);
  -	PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
  +	{
  +	    U32 hash;
  +	    PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
  +	    SvUV_set(meth, hash);
  +	}
   	imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
   		       append_elem(OP_LIST,
   				   prepend_elem(OP_LIST, pack, list(arg)),
  
  
  
  1.60      +19 -19    ponie/perl/sv.c
  
  Index: sv.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.c,v
  retrieving revision 1.59
  retrieving revision 1.60
  diff -u -r1.59 -r1.60
  --- sv.c	11 Apr 2005 14:41:48 -0000	1.59
  +++ sv.c	12 Apr 2005 11:12:13 -0000	1.60
  @@ -49,7 +49,7 @@
   
   #ifdef PERL_COPY_ON_WRITE
   #define SV_COW_NEXT_SV(sv)	INT2PTR(SV *,SvUVX(sv))
  -#define SV_COW_NEXT_SV_SET(current,next)	SvUVX(current) = PTR2UV(next)
  +#define SV_COW_NEXT_SV_SET(current,next)	SvUV_set(current, PTR2UV(next))
   /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
      on-write.  */
   #endif
  @@ -2366,7 +2366,7 @@
       }
       sv_setiv(sv, 0);
       SvIsUV_on(sv);
  -    SvUVX(sv) = u;
  +    SvUV_set(sv, u);
   }
   
   /*
  @@ -2649,7 +2649,7 @@
   	(void)SvIOKp_on(sv);
   	(void)SvNOK_on(sv);
   	SvIsUV_on(sv);
  -	SvUVX(sv) = UV_MAX;
  +	SvUV_set(sv, UV_MAX);
   	return IS_NUMBER_OVERFLOW_UV;
       }
       (void)SvIOKp_on(sv);
  @@ -2666,7 +2666,7 @@
           return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
       }
       SvIsUV_on(sv);
  -    SvUVX(sv) = U_V(SvNVX(sv));
  +    SvUV_set(sv, U_V(SvNVX(sv)));
       if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
           if (SvUVX(sv) == UV_MAX) {
               /* As we know that NVs don't preserve UVs, UV_MAX cannot
  @@ -2803,7 +2803,7 @@
   	       0x8000000000000000 which will be exact. NWC */
   	}
   	else {
  -	    SvUVX(sv) = U_V(SvNVX(sv));
  +	    SvUV_set(sv, U_V(SvNVX(sv)));
   	    if (
   		(SvNVX(sv) == (NV) SvUVX(sv))
   #ifndef  NV_PRESERVES_UV
  @@ -2868,7 +2868,7 @@
   		if (value <= (UV)IV_MAX) {
   		    SvIV_set(sv, (IV)value);
   		} else {
  -		    SvUVX(sv) = value;
  +		    SvUV_set(sv, value);
   		    SvIsUV_on(sv);
   		}
   	    } else {
  @@ -2924,10 +2924,10 @@
   		if (SvNVX(sv) > (NV)UV_MAX) {
   		    SvIsUV_on(sv);
   		    /* Integer is inaccurate. NOK, IOKp, is UV */
  -		    SvUVX(sv) = UV_MAX;
  +		    SvUV_set(sv, UV_MAX);
   		    SvIsUV_on(sv);
   		} else {
  -		    SvUVX(sv) = U_V(SvNVX(sv));
  +		    SvUV_set(sv, U_V(SvNVX(sv)));
   		    /* 0xFFFFFFFFFFFFFFFF not an issue in here */
   		    if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
   			SvIOK_on(sv);
  @@ -3108,7 +3108,7 @@
   	       0x8000000000000000 which will be exact. NWC */
   	}
   	else {
  -	    SvUVX(sv) = U_V(SvNVX(sv));
  +	    SvUV_set(sv, U_V(SvNVX(sv)));
   	    if (
   		(SvNVX(sv) == (NV) SvUVX(sv))
   #ifndef  NV_PRESERVES_UV
  @@ -3170,7 +3170,7 @@
   		    SvIV_set(sv, (IV)value);
   		} else {
   		    /* it didn't overflow, and it was positive. */
  -		    SvUVX(sv) = value;
  +		    SvUV_set(sv, value);
   		    SvIsUV_on(sv);
   		}
   	    } else {
  @@ -3222,10 +3222,10 @@
                   if (SvNVX(sv) > (NV)UV_MAX) {
                       SvIsUV_on(sv);
                       /* Integer is inaccurate. NOK, IOKp, is UV */
  -                    SvUVX(sv) = UV_MAX;
  +                    SvUV_set(sv, UV_MAX);
                       SvIsUV_on(sv);
                   } else {
  -                    SvUVX(sv) = U_V(SvNVX(sv));
  +                    SvUV_set(sv, U_V(SvNVX(sv)));
                       /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
                          NV preservse UV so can do correct comparison.  */
                       if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
  @@ -3421,7 +3421,7 @@
                   } else if (value <= (UV)IV_MAX) {
   		    SvIV_set(sv, (IV)value);
   		} else {
  -		    SvUVX(sv) = value;
  +		    SvUV_set(sv, value);
   		    SvIsUV_on(sv);
   		}
   
  @@ -4753,7 +4753,7 @@
                       SvPV_set(dstr,
                                sharepvn(SvPVX(sstr),
                                         (sflags & SVf_UTF8?-cur:cur), hash));
  -                    SvUVX(dstr) = hash;
  +                    SvUV_set(dstr, hash);
                   }
                   SvLEN(dstr) = len;
                   SvCUR(dstr) = cur;
  @@ -4897,7 +4897,7 @@
   	    UV hash = SvUVX(sstr);
   	    DEBUG_C(PerlIO_printf(Perl_debug_log,
   				  "Fast copy on write: Sharing hash\n"));
  -	    SvUVX(dstr) = hash;
  +	    SvUV_set(dstr, hash);
   	    new_pv = sharepvn(SvPVX(sstr), (SvUTF8(sstr)?-cur:cur), hash);
   	    goto common_exit;
   	}
  @@ -7501,7 +7501,7 @@
   		sv_setnv(sv, UV_MAX_P1);
   	    else
   		(void)SvIOK_only_UV(sv);
  -		++SvUVX(sv);
  +		SvUV_set(sv, SvUVX(sv) + 1);
   	} else {
   	    if (SvIVX(sv) == IV_MAX)
   		sv_setuv(sv, (UV)IV_MAX + 1);
  @@ -7655,7 +7655,7 @@
   	    }
   	    else {
   		(void)SvIOK_only_UV(sv);
  -		--SvUVX(sv);
  +		SvUV_set(sv, SvUVX(sv) + 1);
   	    }	
   	} else {
   	    if (SvIVX(sv) == IV_MIN)
  @@ -7869,7 +7869,7 @@
       sv_upgrade(sv, SVt_PVIV);
       SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
       SvCUR(sv) = len;
  -    SvUVX(sv) = hash;
  +    SvUV_set(sv, hash);
       SvLEN(sv) = 0;
       SvREADONLY_on(sv);
       SvFAKE_on(sv);
  @@ -10929,7 +10929,7 @@
   
                       SvPVX(dstr) = sharepvn(SvPVX(sstr), SvCUR(sstr),
                                              SvUVX(sstr));
  -                    SvUVX(dstr) = SvUVX(sstr);
  +                    SvUV_set(dstr, SvUVX(sstr));
                   } else {
   
                       SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr));
  
  
  
  1.64      +4 -1      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- sv.h	11 Apr 2005 16:31:38 -0000	1.63
  +++ sv.h	12 Apr 2005 11:12:13 -0000	1.64
  @@ -866,7 +866,7 @@
   
   #ifdef PERL_CORE
   #define SvIVX(sv) (0 + * Perl_macro_SvIVX(aTHX_ (SV*) (sv)))
  -#define SvUVX(sv) (* Perl_macro_SvUVX(aTHX_ (SV*) (sv)))
  +#define SvUVX(sv) (0 + * Perl_macro_SvUVX(aTHX_ (SV*) (sv)))
   #define SvNVX(sv) (0.0 + * Perl_macro_SvNVX(aTHX_ (SV*) (sv)))
   #else
   #define SvIVX(sv) (* Perl_macro_SvIVX(aTHX_ (SV*) (sv)))
  @@ -897,6 +897,9 @@
   #define SvIV_set(sv, val) \
   	STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
   		(* Perl_macro_SvIVX(aTHX_ (SV*) (sv)) = (val)); } STMT_END
  +#define SvUV_set(sv, val) \
  +	STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
  +		(* Perl_macro_SvUVX(aTHX_ (SV*) (sv)) = (val)); } STMT_END
   #define SvNV_set(sv, val) \
   	STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
   		(* Perl_macro_SvNVX(aTHX_ (SV*) (sv)) = (val)); } STMT_END