cvs commit: ponie/perl scope.c

[email protected] (Nicholas Clark) 16 Oct 2004 13:17:34 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/16 06:17:34

  Modified:    perl     scope.c
  Log:
  scope.c now uses PMCs macros instead of LVALUE access to SvFLAGS()
  
  Revision  Changes    Path
  1.8       +21 -16    ponie/perl/scope.c
  
  Index: scope.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/scope.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -w -r1.7 -r1.8
  --- scope.c	16 Oct 2004 10:27:59 -0000	1.7
  +++ scope.c	16 Oct 2004 13:17:34 -0000	1.8
  @@ -222,8 +222,7 @@
   		SAVESPTR(mg->mg_obj);
   		mg->mg_obj = osv;
   	    }
  -	    SvFLAGS(osv) |= (SvFLAGS(osv) &
  -	       (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
  +	    SV_PRIVSHIFT(osv);
   	    PL_tainted = oldtainted;
   	}
   	SvMAGIC(sv) = SvMAGIC(osv);
  @@ -233,11 +232,12 @@
   	    if (mg->mg_type == '\0'
   		    || !(mg->mg_virtual && mg->mg_virtual->svt_set))
   	    {
  -		SvFLAGS(sv) |= SvREADONLY(osv);
  +		if (SvREADONLY(osv))
  +		    SvREADONLY_on(sv);
   		break;
   	    }
   	}
  -	SvFLAGS(sv) |= SvMAGICAL(osv);
  +	SvMAGICAL_set(sv,SvMAGICAL(osv));
   	/* XXX SvMAGIC() is *shared* between osv and sv.  This can
   	 * lead to coredumps when both SVs are destroyed without one
   	 * of their SvMAGIC() slots being NULLed. */
  @@ -379,7 +379,7 @@
       av = GvAVn(gv);
       if (SvMAGIC(oav)) {
   	SvMAGIC(av) = SvMAGIC(oav);
  -	SvFLAGS((SV*)av) |= SvMAGICAL(oav);
  +	SvMAGICAL_set((SV*)av,SvMAGICAL(oav));
   	SvMAGICAL_off(oav);
   	SvMAGIC(oav) = 0;
   	PL_localizing = 1;
  @@ -403,7 +403,7 @@
       hv = GvHVn(gv);
       if (SvMAGIC(ohv)) {
   	SvMAGIC(hv) = SvMAGIC(ohv);
  -	SvFLAGS((SV*)hv) |= SvMAGICAL(ohv);
  +	SvMAGICAL_set((SV*)hv,SvMAGICAL(ohv));
   	SvMAGICAL_off(ohv);
   	SvMAGIC(ohv) = 0;
   	PL_localizing = 1;
  @@ -786,7 +786,7 @@
   	    {
   		(void)SvUPGRADE(value, SvTYPE(sv));
   		SvMAGIC(value) = SvMAGIC(sv);
  -		SvFLAGS(value) |= SvMAGICAL(sv);
  +		SvMAGICAL_set(value,SvMAGICAL(sv));
   		SvMAGICAL_off(sv);
   		SvMAGIC(sv) = 0;
   	    }
  @@ -798,8 +798,7 @@
   	    else if (SvTYPE(value) >= SVt_PVMG && SvMAGIC(value) &&
   		     SvTYPE(value) != SVt_PVGV)
   	    {
  -		SvFLAGS(value) |= (SvFLAGS(value) &
  -				  (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
  +		SV_PRIVSHIFT(value);
   		SvMAGICAL_off(value);
   		/* XXX this is a leak when we get here because the
   		 * mg_get() in save_scalar_at() croaked */
  @@ -820,7 +819,7 @@
   	    if (GvAV(gv)) {
   		AV *goner = GvAV(gv);
   		SvMAGIC(av) = SvMAGIC(goner);
  -		SvFLAGS((SV*)av) |= SvMAGICAL(goner);
  +		SvMAGICAL_set((SV*)av, SvMAGICAL(goner));
   		SvMAGICAL_off(goner);
   		SvMAGIC(goner) = 0;
   		SvREFCNT_dec(goner);
  @@ -838,7 +837,7 @@
   	    if (GvHV(gv)) {
   		HV *goner = GvHV(gv);
   		SvMAGIC(hv) = SvMAGIC(goner);
  -		SvFLAGS(hv) |= SvMAGICAL(goner);
  +		SvMAGICAL_set(hv, SvMAGICAL(goner));
   		SvMAGICAL_off(goner);
   		SvMAGIC(goner) = 0;
   		SvREFCNT_dec(goner);
  @@ -981,7 +980,8 @@
   		SvPADSTALE_on(sv); /* mark as no longer live */
   	    }
   	    else {	/* Someone has a claim on this, so abandon it. */
  -		U32 padflags = SvFLAGS(sv) & (SVs_PADMY|SVs_PADTMP);
  +		U32 pad_my = SvPADMY(sv);
  +		U32 pad_tmp = SvPADTMP(sv);
   		switch (SvTYPE(sv)) {	/* Console ourselves with a new value */
   		case SVt_PVAV:	*(SV**)ptr = (SV*)newAV();	break;
   		case SVt_PVHV:	*(SV**)ptr = (SV*)newHV();	break;
  @@ -990,7 +990,11 @@
   		SvREFCNT_dec(sv);	/* Cast current value to the winds. */
   		/* preserve pad nature, but also mark as not live
   		 * for any closure capturing */
  -		SvFLAGS(*(SV**)ptr) |= padflags | SVs_PADSTALE;
  +		if (pad_my)
  +		    SvPADMY_on(*(SV**)ptr);
  +		if (pad_tmp)
  +		    SvPADTMP_on(*(SV**)ptr);
  +		SvPADSTALE_on(*(SV**)ptr);
   	    }
   	    break;
   	case SAVEt_DELETE:
  @@ -1087,13 +1091,14 @@
   	    {
   		U32 val  = (U32)SSPOPINT;
   		U32 mask = (U32)SSPOPINT;
  +		sv = (SV*)SSPOPPTR;
  +
   		Perl_croak(aTHX_
   			   "panic: restore saved svflags val=%08X mask=%08X",
   			   val, mask);
   
  -		sv = (SV*)SSPOPPTR;
  -		SvFLAGS(sv) &= ~mask;
  -		SvFLAGS(sv) |= val;
  +		/*SvFLAGS(sv) &= ~mask;
  +		  SvFLAGS(sv) |= val;*/
   	    }
   	case SAVEt_SET_PADSTALE:
   	    {