cvs commit: ponie/src/pmc perl5cargo_cult_statics.c perl5cargo_cult.pmc

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

  Modified:    src/pmc  perl5cargo_cult.pmc
  Added:       src/pmc  perl5cargo_cult_statics.c
  Log:
  Move the flags accessing code out into a separate C file, so that Perl5NULL
  can place the flags in an alternative location, but share most of the code.
  
  Revision  Changes    Path
  1.55      +6 -658    ponie/src/pmc/perl5cargo_cult.pmc
  
  Index: perl5cargo_cult.pmc
  ===================================================================
  RCS file: /cvs/public/ponie/src/pmc/perl5cargo_cult.pmc,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- perl5cargo_cult.pmc	30 Apr 2005 17:35:36 -0000	1.54
  +++ perl5cargo_cult.pmc	30 Apr 2005 21:59:21 -0000	1.55
  @@ -14,24 +14,9 @@
   
   #include "ponie.h"
   
  -static void S_SvOK_off(PMC *pmc) {
  -    assert_not_ROK(MUMBLE(pmc)) 0;
  -    (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
  -	&= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
  -    SvOOK_off(MUMBLE(pmc));
  -}
  +#define PERL5_FLAGS(pmc) (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
   
  -static void S_SvOK_off_exc_UV(PMC *pmc) {
  -    assert_not_ROK(MUMBLE(pmc)) 0;
  -    (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
  -	&= ~(SVf_OK|SVf_AMAGIC|SVf_UTF8);
  -    SvOOK_off(MUMBLE(pmc));
  -}
  -
  -static I32 S_SvMAGICAL(PMC *pmc) {
  -  return (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
  -      & (SVs_GMG|SVs_SMG|SVs_RMG);
  -}
  +#include "perl5cargo_cult_statics.c"
   
   void Ponie_freescalar_common(SV *sv) {
       /* OOK cannot be true on anything < PVIV, so no need to worry about
  @@ -87,7 +72,7 @@
   	case Ponie_P_ANY:
   	    return PMC_struct_val(SELF);
   	case Ponie_P_RV:
  -            assert (!(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags & SVp_POK));
  +            assert (!(PERL5_FLAGS(SELF) & SVp_POK));
   	    return &(PMC_pmc_val(SELF));
   	    /*return &(((struct xrv*)((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_any)->xrv_rv);*/
   	case Ponie_P_PVX:
  @@ -565,648 +550,11 @@
       }
   
       INTVAL get_integer_keyed_int(INTVAL key) {
  -	switch (key) {
  -	case Ponie_I_SV_FLAGS:
  -            return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags;
  -	case Ponie_I_SV_TYPE:
  -            return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                & SVTYPEMASK;
  -	case Ponie_I_SVp_OK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVp_IOK|SVp_NOK|SVp_POK);
  -	case Ponie_I_SVf_OK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_OK;
  -
  -	case Ponie_I_SVp_IOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVp_IOK;
  -	case Ponie_I_SVf_IOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_IOK;
  -	case Ponie_I_SVf_IVisUV:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_IVisUV;
  -	case Ponie_I_SVpf_IOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVf_IOK|SVf_IOK);
  -	case Ponie_I_SVf_IOK_UV:
  -	    return (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -		    & (SVf_IOK|SVf_IVisUV))
  -		== (SVf_IOK|SVf_IVisUV);
  -	case Ponie_I_SVf_IOK_notUV:
  -	    return (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -		    & (SVf_IOK|SVf_IVisUV))
  -		== (SVf_IOK);
  -
  -	case Ponie_I_SVp_NIOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -		& (SVp_IOK|SVp_NOK);
  -	case Ponie_I_SVf_NIOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -		& (SVf_IOK|SVf_NOK);
  -	case Ponie_I_SVpf_NIOK:
  -	    croak ("Invalid key %d (Ponie_I_SVpf_NIOK)", key);
  -
  -	case Ponie_I_SVp_NOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVp_NOK;
  -	case Ponie_I_SVf_NOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_NOK;
  -	case Ponie_I_SVpf_NOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVf_NOK|SVf_NOK);
  -
  -	case Ponie_I_SVp_POK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVp_POK;
  -	case Ponie_I_SVf_POK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_POK;
  -	case Ponie_I_SVpf_POK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVf_POK|SVf_POK);
  -	case Ponie_I_SVf_UTF8:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_UTF8;
  -	case Ponie_I_SV_VOK:
  -	    return S_SvMAGICAL(SELF) && mg_find(MUMBLE(SELF),'V');
  -	case Ponie_I_SVf_OOK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_OOK;
  -	case Ponie_I_SVf_FAKE:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_FAKE;
  -	case Ponie_I_SVf_BREAK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_BREAK;
  -	case Ponie_I_SVf_ROK:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_ROK;
  -	case Ponie_I_SV_WEAKREF:
  -	    return (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                    & (SVf_ROK|SVprv_WEAKREF)) == (SVf_ROK|SVprv_WEAKREF);
  -	case Ponie_I_SV_MAGICAL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVs_GMG|SVs_SMG|SVs_RMG);
  -	case Ponie_I_SV_GMAGICAL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_GMG;
  -	case Ponie_I_SV_SMAGICAL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_SMG;
  -	case Ponie_I_SV_RMAGICAL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_RMG;
  -	case Ponie_I_SV_AMAGIC:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_AMAGIC;
  -	case Ponie_I_SV_GAMAGIC:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & (SVs_GMG|SVf_AMAGIC);
  -	case Ponie_I_SV_THINKFIRST:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_THINKFIRST;
  -	case Ponie_I_SV_PADSTALE:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_PADSTALE;
  -	case Ponie_I_SV_PADTMP:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_PADTMP;
  -	case Ponie_I_SV_PADMY:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_PADMY;
  -	case Ponie_I_SV_TEMP:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_TEMP;
  -	case Ponie_I_SV_OBJECT:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVs_OBJECT;
  -	case Ponie_I_SV_READONLY:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVf_READONLY;
  -	case Ponie_I_SV_SCREAM:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVp_SCREAM;
  -	case Ponie_I_SV_COMPILED:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVpfm_COMPILED;
  -	case Ponie_I_SV_EVALED:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVrepl_EVAL;
  -	case Ponie_I_SV_TAIL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVpbm_TAIL;
  -	case Ponie_I_SV_VALID:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -			 & SVpbm_VALID;
  -	case Ponie_I_HV_SHAREKEYS:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                & SVphv_SHAREKEYS;
  -	case Ponie_I_HV_HASKFLAGS:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                & SVphv_HASKFLAGS;
  -	case Ponie_I_HV_LAZYDEL:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                & SVphv_LAZYDEL;
  -	case Ponie_I_HV_REHASH:
  -	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                & SVphv_REHASH;
  -
  -	default:
  -	    croak ("Out of range or illegal key %d (max is %d) "
  -		   "in get_integer_keyed_int", key, Ponie_I_MAX - 1);
  -	}
  -	return 0;
  +        return S_get_integer_keyed_int(SELF, key);
       }
   
       void set_integer_keyed_int(INTVAL key, INTVAL value) {
  -	switch (key) {
  -	case Ponie_I_SV_TYPE:
  -            /* Some of the internals needs to force the type.  */
  -            ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags &= ~SVTYPEMASK;
  -            ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                |= (value & SVTYPEMASK);
  -            return;
  -        case Ponie_I_SV_ZERO_FLAGS_SET_TYPE:
  -            ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                = (value & SVTYPEMASK);
  -            return;
  -        case Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD:
  -            ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  -                = SVTYPEMASK | SVf_BREAK;
  -            /*SvANY(sv) = (void *) 0xDEAD;*/
  -            ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_any = 0xDEAD;
  -            return;
  -	case Ponie_I_SV_UPGRADE:
  -            if ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags & SVTYPEMASK) >= value)
  -                return;
  -            /* Fall through  */
  -	case Ponie_I_SV_UPGRADE_func:
  -            if (value < 0 || value >= Ponie_PMC_Perl5_MAX) {
  -                croak ("Out of range or illegal type %d (max is %d) "
  -                       "for sv upgrade", value, Ponie_PMC_Perl5_MAX - 1);
  -            }
  -            DYNSELF.morph(PL_pmcname[value]);
  -            return;
  -
  -	case Ponie_I_SVf_OK:
  -	    if (!value) {
  -		/* Only legal thing to do is turn this off.  */
  -		S_SvOK_off(SELF);
  -		return;
  -	    }
  -	    break;
  -	case Ponie_I_SVpf_IOK_only:
  -	    if (value) {
  -		/* Only legal thing to do is turn this on.  */
  -		S_SvOK_off(SELF);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_IOK|SVf_IOK);
  -		return;
  -	    }
  -	    break;
  -	case Ponie_I_SVf_OK_exc_UV:
  -	    if (!value) {
  -		/* Only legal thing to do is turn this off.  */
  -		S_SvOK_off_exc_UV(SELF);
  -		return;
  -	    }
  -	    break;
  -	case Ponie_I_SVpf_IOK_only_exc_UV:
  -	    if (value) {
  -		/* Only legal thing to do is turn this on.  */
  -		S_SvOK_off_exc_UV(SELF);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_IOK|SVf_IOK);
  -		return;
  -	    }
  -	    break;
  -
  -	case Ponie_I_SVp_IOK:
  -	    if (value) {
  -		SvRELEASE_IVX(MUMBLE(SELF));
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVp_IOK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVp_IOK;
  -            }
  -	    return;
  -	case Ponie_I_SVf_IOK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_IOK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_IOK;
  -            }
  -	    return;
  -	case Ponie_I_SVpf_IOK:
  -	    if (value) {
  -		SvRELEASE_IVX(MUMBLE(SELF));
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_IOK|SVf_IOK);
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~(SVp_IOK|SVf_IOK);
  -            }
  -	    return;
  -	case Ponie_I_SVpf_IOK_UTF8:
  -	    if (!value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVp_IOK|SVf_IOK|SVf_IVisUV);
  -		return;
  -	    }
  -	case Ponie_I_SVf_IVisUV:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_IVisUV;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_IVisUV;
  -            }
  -	    return;
  -
  -	case Ponie_I_SVpf_NIOK:
  -	    if (!value) {
  -		/* Only legal thing to do is turn this off.  */
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
  -		return;
  -	    }
  -	    break;
  -
  -	case Ponie_I_SVp_NOK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVp_NOK;
  -            } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVp_NOK;
  -            }
  -	    return;
  -	case Ponie_I_SVf_NOK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_NOK;
  -            } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_NOK;
  -            }
  -	    return;
  -	case Ponie_I_SVpf_NOK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_NOK|SVf_NOK);
  -            } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~(SVp_NOK|SVf_NOK);
  -            }
  -	    return;
  -	case Ponie_I_SVpf_NOK_only:
  -	    if (value) {
  -		/* Only legal thing to do is turn this on.  */
  -		S_SvOK_off(SELF);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_NOK|SVf_NOK);
  -		return;
  -	    }
  -	    break;
  -
  -
  -	case Ponie_I_SVp_POK:
  -	    if (value) {
  -		assert_not_ROK(MUMBLE(SELF)) 0;
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVp_POK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVp_POK;
  -            }
  -	    return;
  -	case Ponie_I_SVf_POK:
  -	    if (value) {
  -		assert_not_ROK(MUMBLE(SELF)) 0;
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_POK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_POK;
  -            }   
  -	    return;
  -	case Ponie_I_SVpf_POK:
  -	    if (value) {
  -		assert_not_ROK(MUMBLE(SELF)) 0;
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_POK|SVf_POK);
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~(SVp_POK|SVf_POK);
  -            }
  -	    return;
  -	case Ponie_I_SVpf_POK_only:
  -	    if (value) {
  -		assert_not_ROK(MUMBLE(SELF)) 0;
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_POK|SVf_POK);
  -		return;
  -	    }
  -	    break;
  -	case Ponie_I_SVpf_POK_only_UTF8:
  -	    if (value) {
  -		assert_not_ROK(MUMBLE(SELF)) 0;
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVp_POK|SVf_POK);
  -		return;
  -	    }
  -	    break;
  -	case Ponie_I_SVf_UTF8:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_UTF8;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_UTF8;
  -            }
  -	    return;
  -	case Ponie_I_SVf_OOK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVp_IOK|SVf_IOK|SVf_IVisUV);
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_OOK;
  -	    } else {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~SVf_OOK;
  -	    }
  -	    return;
  -	case Ponie_I_SVf_OOK_backoff:
  -	    if (value) {
  -		if ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    & SVf_OOK) {
  -                    sv_backoff(MUMBLE(SELF));
  -                }
  -                return;
  -            }
  -	case Ponie_I_SVf_FAKE:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_FAKE;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_FAKE;
  -            }
  -	    return;
  -	case Ponie_I_SVf_BREAK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_BREAK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_BREAK;
  -            }
  -	    return;
  -	case Ponie_I_SVf_ROK:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_ROK;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_ROK;
  -            }
  -	    return;
  -	case Ponie_I_SV_WEAKREF:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVf_ROK|SVprv_WEAKREF);
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~(SVf_ROK|SVprv_WEAKREF);
  -            }
  -	    return;
  -	case Ponie_I_SVf_ROK_AMAGIC:
  -	    if (!value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    &= ~(SVf_ROK|SVf_AMAGIC);
  -		return;
  -	    }
  -	case Ponie_I_SV_MAGICAL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= (SVs_GMG|SVs_SMG|SVs_RMG);
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~(SVs_GMG|SVs_SMG|SVs_RMG);
  -            }
  -	    return;
  -	case Ponie_I_SV_GMAGICAL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_GMG;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_GMG;
  -            }
  -	    return;
  -	case Ponie_I_SV_SMAGICAL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_SMG;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_SMG;
  -            }
  -	    return;
  -	case Ponie_I_SV_RMAGICAL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_RMG;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_RMG;
  -            }
  -	    return;
  -	case Ponie_I_SV_AMAGIC:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_AMAGIC;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_AMAGIC;
  -            }
  -	    return;
  -	case Ponie_I_SV_MAGICAL_SET:
  -            if (value & ~(SVs_GMG|SVs_SMG|SVs_RMG)) {
  -                croak("panic: Ponie_I_SV_MAGICAL_SET with value %08X, expect "
  -                      "only bits from %08X", value, (SVs_GMG|SVs_SMG|SVs_RMG));
  -            }
  -            (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                |= value;
  -            return;
  -        case Ponie_I_SV_NP_PRIVSHIFT:
  -            if (value) {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    |= ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags) &
  -                        (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
  -                return;
  -            }
  -	case Ponie_I_SV_PADSTALE:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_PADSTALE;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_PADSTALE;
  -            }
  -	    return;
  -	case Ponie_I_SV_PADTMP:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_PADTMP;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_PADTMP;
  -            }
  -	    return;
  -	case Ponie_I_SV_PADMY:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_PADMY;
  -                return;
  -            }
  -	case Ponie_I_SV_PADTYPED:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVpad_TYPED;
  -                return;
  -            }
  -	case Ponie_I_SV_PADOUR:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVpad_OUR;
  -                return;
  -            }
  -	case Ponie_I_SV_TEMP:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_TEMP;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_TEMP;
  -            }
  -	    return;
  -	case Ponie_I_SV_OBJECT:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVs_OBJECT;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVs_OBJECT;
  -            }
  -	    return;
  -	case Ponie_I_SV_READONLY:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVf_READONLY;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVf_READONLY;
  -            }
  -	    return;
  -	case Ponie_I_SV_SCREAM:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVp_SCREAM;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVp_SCREAM;
  -            }
  -	    return;
  -	case Ponie_I_SV_COMPILED:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVpfm_COMPILED;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVpfm_COMPILED;
  -            }
  -	    return;
  -	case Ponie_I_SV_EVALED:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVrepl_EVAL;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVrepl_EVAL;
  -            }
  -	    return;
  -	case Ponie_I_SV_TAIL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVpbm_TAIL;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVpbm_TAIL;
  -            }
  -	    return;
  -	case Ponie_I_SV_VALID:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVpbm_VALID;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVpbm_VALID;
  -            }
  -	    return;
  -
  -	case Ponie_I_HV_SHAREKEYS:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVphv_SHAREKEYS;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVphv_SHAREKEYS;
  -            }
  -	    return;
  -	case Ponie_I_HV_HASKFLAGS:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVphv_HASKFLAGS;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVphv_HASKFLAGS;
  -            }
  -	    return;
  -	case Ponie_I_HV_LAZYDEL:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVphv_LAZYDEL;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVphv_LAZYDEL;
  -            }
  -	    return;
  -	case Ponie_I_HV_REHASH:
  -	    if (value) {
  -		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		    |= SVphv_REHASH;
  -	    } else {
  -                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -                    &= ~SVphv_REHASH;
  -            }
  -	    return;
  -	default:
  -	    /* Hush gcc. There is a default.  */;
  -	}
  -	croak ("Out of range or illegal key %d (max is %d), value is %d"
  -	       " in set_integer_keyed_int", key, Ponie_I_MAX - 1, value);
  -	return;
  +        set_integer_keyed_int(interpreter, SELF, key, value);
       }
   
   
  
  
  
  1.1                  ponie/src/pmc/perl5cargo_cult_statics.c
  
  Index: perl5cargo_cult_statics.c
  ===================================================================
  /* perl5cargo_cult_statics.pmc -*- c -*-
   *  Copyright: 2005 The Perl Foundation.  All Rights Reserved.
   *  CVS Info
   *     $Id: perl5cargo_cult_statics.c,v 1.1 2005/04/30 21:59:21 nicholas Exp $
   *  Overview:
   *     These are functions for the temporary Perl5cargo_cult base class that
   *     are also needed within Perl5NULL until the data layout is changed
   *     properly. Code in here will be moved out into more suitable locations as
   *     it is refactored.
   *  Data Structure and Algorithms:
   *  History:
   *  Notes:
   *  References:
   */
  
  static void S_SvOK_off(PMC *pmc) {
      assert_not_ROK(MUMBLE(pmc)) 0;
      PERL5_FLAGS(pmc) &= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
      SvOOK_off(MUMBLE(pmc));
  }
  
  static void S_SvOK_off_exc_UV(PMC *pmc) {
      assert_not_ROK(MUMBLE(pmc)) 0;
      PERL5_FLAGS(pmc) &= ~(SVf_OK|SVf_AMAGIC|SVf_UTF8);
      SvOOK_off(MUMBLE(pmc));
  }
  
  static I32 S_SvMAGICAL(PMC *pmc) {
      return PERL5_FLAGS(pmc) & (SVs_GMG|SVs_SMG|SVs_RMG);
  }
  
  static INTVAL
  S_get_integer_keyed_int(PMC *pmc, INTVAL key) {
      switch (key) {
      case Ponie_I_SV_FLAGS:
          return PERL5_FLAGS(pmc);
      case Ponie_I_SV_TYPE:
          return PERL5_FLAGS(pmc) & SVTYPEMASK;
      case Ponie_I_SVp_OK:
          return PERL5_FLAGS(pmc) & (SVp_IOK|SVp_NOK|SVp_POK);
      case Ponie_I_SVf_OK:
          return PERL5_FLAGS(pmc) & SVf_OK;
  
      case Ponie_I_SVp_IOK:
          return PERL5_FLAGS(pmc) & SVp_IOK;
      case Ponie_I_SVf_IOK:
          return PERL5_FLAGS(pmc) & SVf_IOK;
      case Ponie_I_SVf_IVisUV:
          return PERL5_FLAGS(pmc) & SVf_IVisUV;
      case Ponie_I_SVpf_IOK:
          return PERL5_FLAGS(pmc) & (SVf_IOK|SVf_IOK);
      case Ponie_I_SVf_IOK_UV:
          return (PERL5_FLAGS(pmc) & (SVf_IOK|SVf_IVisUV))
              == (SVf_IOK|SVf_IVisUV);
      case Ponie_I_SVf_IOK_notUV:
          return (PERL5_FLAGS(pmc) & (SVf_IOK|SVf_IVisUV))
              == (SVf_IOK);
  
      case Ponie_I_SVp_NIOK:
          return PERL5_FLAGS(pmc) & (SVp_IOK|SVp_NOK);
      case Ponie_I_SVf_NIOK:
          return PERL5_FLAGS(pmc) & (SVf_IOK|SVf_NOK);
      case Ponie_I_SVpf_NIOK:
          croak ("Invalid key %d (Ponie_I_SVpf_NIOK)", key);
  
      case Ponie_I_SVp_NOK:
          return PERL5_FLAGS(pmc) & SVp_NOK;
      case Ponie_I_SVf_NOK:
          return PERL5_FLAGS(pmc) & SVf_NOK;
      case Ponie_I_SVpf_NOK:
          return PERL5_FLAGS(pmc) & (SVf_NOK|SVf_NOK);
  
      case Ponie_I_SVp_POK:
          return PERL5_FLAGS(pmc) & SVp_POK;
      case Ponie_I_SVf_POK:
          return PERL5_FLAGS(pmc) & SVf_POK;
      case Ponie_I_SVpf_POK:
          return PERL5_FLAGS(pmc) & (SVf_POK|SVf_POK);
      case Ponie_I_SVf_UTF8:
          return PERL5_FLAGS(pmc) & SVf_UTF8;
      case Ponie_I_SV_VOK:
          return S_SvMAGICAL(pmc) && mg_find(MUMBLE(pmc),'V');
      case Ponie_I_SVf_OOK:
          return PERL5_FLAGS(pmc) & SVf_OOK;
      case Ponie_I_SVf_FAKE:
          return PERL5_FLAGS(pmc) & SVf_FAKE;
      case Ponie_I_SVf_BREAK:
          return PERL5_FLAGS(pmc) & SVf_BREAK;
      case Ponie_I_SVf_ROK:
          return PERL5_FLAGS(pmc) & SVf_ROK;
      case Ponie_I_SV_WEAKREF:
          return (PERL5_FLAGS(pmc) & (SVf_ROK|SVprv_WEAKREF))
              == (SVf_ROK|SVprv_WEAKREF);
      case Ponie_I_SV_MAGICAL:
          return PERL5_FLAGS(pmc) & (SVs_GMG|SVs_SMG|SVs_RMG);
      case Ponie_I_SV_GMAGICAL:
          return PERL5_FLAGS(pmc) & SVs_GMG;
      case Ponie_I_SV_SMAGICAL:
          return PERL5_FLAGS(pmc) & SVs_SMG;
      case Ponie_I_SV_RMAGICAL:
          return PERL5_FLAGS(pmc) & SVs_RMG;
      case Ponie_I_SV_AMAGIC:
          return PERL5_FLAGS(pmc) & SVf_AMAGIC;
      case Ponie_I_SV_GAMAGIC:
          return PERL5_FLAGS(pmc) & (SVs_GMG|SVf_AMAGIC);
      case Ponie_I_SV_THINKFIRST:
          return PERL5_FLAGS(pmc) & SVf_THINKFIRST;
      case Ponie_I_SV_PADSTALE:
          return PERL5_FLAGS(pmc) & SVs_PADSTALE;
      case Ponie_I_SV_PADTMP:
          return PERL5_FLAGS(pmc) & SVs_PADTMP;
      case Ponie_I_SV_PADMY:
          return PERL5_FLAGS(pmc) & SVs_PADMY;
      case Ponie_I_SV_TEMP:
          return PERL5_FLAGS(pmc) & SVs_TEMP;
      case Ponie_I_SV_OBJECT:
          return PERL5_FLAGS(pmc) & SVs_OBJECT;
      case Ponie_I_SV_READONLY:
          return PERL5_FLAGS(pmc) & SVf_READONLY;
      case Ponie_I_SV_SCREAM:
          return PERL5_FLAGS(pmc) & SVp_SCREAM;
      case Ponie_I_SV_COMPILED:
          return PERL5_FLAGS(pmc) & SVpfm_COMPILED;
      case Ponie_I_SV_EVALED:
          return PERL5_FLAGS(pmc) & SVrepl_EVAL;
      case Ponie_I_SV_TAIL:
          return PERL5_FLAGS(pmc) & SVpbm_TAIL;
      case Ponie_I_SV_VALID:
          return PERL5_FLAGS(pmc) & SVpbm_VALID;
      case Ponie_I_HV_SHAREKEYS:
          return PERL5_FLAGS(pmc) & SVphv_SHAREKEYS;
      case Ponie_I_HV_HASKFLAGS:
          return PERL5_FLAGS(pmc) & SVphv_HASKFLAGS;
      case Ponie_I_HV_LAZYDEL:
          return PERL5_FLAGS(pmc) & SVphv_LAZYDEL;
      case Ponie_I_HV_REHASH:
          return PERL5_FLAGS(pmc) & SVphv_REHASH;
  
      default:
          croak ("Out of range or illegal key %d (max is %d) "
                 "in get_integer_keyed_int", key, Ponie_I_MAX - 1);
      }
      return 0;
  }
  
  STATIC void
  set_integer_keyed_int(Interp* interpreter, PMC *pmc, INTVAL key, INTVAL value)
  {
      switch (key) {
      case Ponie_I_SV_TYPE:
          /* Some of the internals needs to force the type.  */
          PERL5_FLAGS(pmc) &= ~SVTYPEMASK;
          PERL5_FLAGS(pmc) |= (value & SVTYPEMASK);
          return;
      case Ponie_I_SV_ZERO_FLAGS_SET_TYPE:
          PERL5_FLAGS(pmc)                = (value & SVTYPEMASK);
          return;
      case Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD:
          PERL5_FLAGS(pmc)                = SVTYPEMASK | SVf_BREAK;
          /*SvANY(sv) = (void *) 0xDEAD;*/
          ((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_any = 0xDEAD;
          return;
      case Ponie_I_SV_UPGRADE:
          if ((PERL5_FLAGS(pmc) & SVTYPEMASK) >= value)
              return;
          /* Fall through  */
      case Ponie_I_SV_UPGRADE_func:
          if (value < 0 || value >= Ponie_PMC_Perl5_MAX) {
              croak ("Out of range or illegal type %d (max is %d) "
                     "for sv upgrade", value, Ponie_PMC_Perl5_MAX - 1);
          }
          /* Yes, this is a hack. But so are .pmc files that aren't actually
             C, and don't like CPP directives within them, let alone allow
             #include  */
          /* DYNpmc.morph(PL_pmcname[value]); */
          VTABLE_morph(interpreter, pmc, PL_pmcname[value]);
          return;
  
      case Ponie_I_SVf_OK:
          if (!value) {
              /* Only legal thing to do is turn this off.  */
              S_SvOK_off(pmc);
              return;
          }
          break;
      case Ponie_I_SVpf_IOK_only:
          if (value) {
              /* Only legal thing to do is turn this on.  */
              S_SvOK_off(pmc);
              PERL5_FLAGS(pmc) |= (SVp_IOK|SVf_IOK);
              return;
          }
          break;
      case Ponie_I_SVf_OK_exc_UV:
          if (!value) {
              /* Only legal thing to do is turn this off.  */
              S_SvOK_off_exc_UV(pmc);
              return;
          }
          break;
      case Ponie_I_SVpf_IOK_only_exc_UV:
          if (value) {
              /* Only legal thing to do is turn this on.  */
              S_SvOK_off_exc_UV(pmc);
              PERL5_FLAGS(pmc) |= (SVp_IOK|SVf_IOK);
              return;
          }
          break;
  
      case Ponie_I_SVp_IOK:
          if (value) {
              SvRELEASE_IVX(MUMBLE(pmc));
              PERL5_FLAGS(pmc) |= SVp_IOK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVp_IOK;
          }
          return;
      case Ponie_I_SVf_IOK:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_IOK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_IOK;
          }
          return;
      case Ponie_I_SVpf_IOK:
          if (value) {
              SvRELEASE_IVX(MUMBLE(pmc));
              PERL5_FLAGS(pmc) |= (SVp_IOK|SVf_IOK);
          } else {
              PERL5_FLAGS(pmc) &= ~(SVp_IOK|SVf_IOK);
          }
          return;
      case Ponie_I_SVpf_IOK_UTF8:
          if (!value) {
              PERL5_FLAGS(pmc) &= ~(SVp_IOK|SVf_IOK|SVf_IVisUV);
              return;
          }
      case Ponie_I_SVf_IVisUV:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_IVisUV;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_IVisUV;
          }
          return;
  
      case Ponie_I_SVpf_NIOK:
          if (!value) {
              /* Only legal thing to do is turn this off.  */
              PERL5_FLAGS(pmc) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
              return;
          }
          break;
  
      case Ponie_I_SVp_NOK:
          if (value) {
              PERL5_FLAGS(pmc) |= SVp_NOK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVp_NOK;
          }
          return;
      case Ponie_I_SVf_NOK:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_NOK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_NOK;
          }
          return;
      case Ponie_I_SVpf_NOK:
          if (value) {
              PERL5_FLAGS(pmc) |= (SVp_NOK|SVf_NOK);
          } else {
              PERL5_FLAGS(pmc) &= ~(SVp_NOK|SVf_NOK);
          }
          return;
      case Ponie_I_SVpf_NOK_only:
          if (value) {
              /* Only legal thing to do is turn this on.  */
              S_SvOK_off(pmc);
              PERL5_FLAGS(pmc) |= (SVp_NOK|SVf_NOK);
              return;
          }
          break;
  
  
      case Ponie_I_SVp_POK:
          if (value) {
              assert_not_ROK(MUMBLE(pmc)) 0;
              PERL5_FLAGS(pmc) |= SVp_POK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVp_POK;
          }
          return;
      case Ponie_I_SVf_POK:
          if (value) {
              assert_not_ROK(MUMBLE(pmc)) 0;
              PERL5_FLAGS(pmc) |= SVf_POK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_POK;
          }   
          return;
      case Ponie_I_SVpf_POK:
          if (value) {
              assert_not_ROK(MUMBLE(pmc)) 0;
              PERL5_FLAGS(pmc) |= (SVp_POK|SVf_POK);
          } else {
              PERL5_FLAGS(pmc) &= ~(SVp_POK|SVf_POK);
          }
          return;
      case Ponie_I_SVpf_POK_only:
          if (value) {
              assert_not_ROK(MUMBLE(pmc)) 0;
              PERL5_FLAGS(pmc) &= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
              PERL5_FLAGS(pmc) |= (SVp_POK|SVf_POK);
              return;
          }
          break;
      case Ponie_I_SVpf_POK_only_UTF8:
          if (value) {
              assert_not_ROK(MUMBLE(pmc)) 0;
              PERL5_FLAGS(pmc) &= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV);
              PERL5_FLAGS(pmc) |= (SVp_POK|SVf_POK);
              return;
          }
          break;
      case Ponie_I_SVf_UTF8:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_UTF8;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_UTF8;
          }
          return;
      case Ponie_I_SVf_OOK:
          if (value) {
              PERL5_FLAGS(pmc) &= ~(SVp_IOK|SVf_IOK|SVf_IVisUV);
              PERL5_FLAGS(pmc) |= SVf_OOK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_OOK;
          }
          return;
      case Ponie_I_SVf_OOK_backoff:
          if (value) {
              if (PERL5_FLAGS(pmc) & SVf_OOK) {
                  sv_backoff(MUMBLE(pmc));
              }
              return;
          }
      case Ponie_I_SVf_FAKE:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_FAKE;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_FAKE;
          }
          return;
      case Ponie_I_SVf_BREAK:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_BREAK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_BREAK;
          }
          return;
      case Ponie_I_SVf_ROK:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_ROK;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_ROK;
          }
          return;
      case Ponie_I_SV_WEAKREF:
          if (value) {
              PERL5_FLAGS(pmc) |= (SVf_ROK|SVprv_WEAKREF);
          } else {
              PERL5_FLAGS(pmc) &= ~(SVf_ROK|SVprv_WEAKREF);
          }
          return;
      case Ponie_I_SVf_ROK_AMAGIC:
          if (!value) {
              PERL5_FLAGS(pmc) &= ~(SVf_ROK|SVf_AMAGIC);
              return;
          }
      case Ponie_I_SV_MAGICAL:
          if (value) {
              PERL5_FLAGS(pmc) |= (SVs_GMG|SVs_SMG|SVs_RMG);
          } else {
              PERL5_FLAGS(pmc) &= ~(SVs_GMG|SVs_SMG|SVs_RMG);
          }
          return;
      case Ponie_I_SV_GMAGICAL:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_GMG;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_GMG;
          }
          return;
      case Ponie_I_SV_SMAGICAL:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_SMG;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_SMG;
          }
          return;
      case Ponie_I_SV_RMAGICAL:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_RMG;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_RMG;
          }
          return;
      case Ponie_I_SV_AMAGIC:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_AMAGIC;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_AMAGIC;
          }
          return;
      case Ponie_I_SV_MAGICAL_SET:
          if (value & ~(SVs_GMG|SVs_SMG|SVs_RMG)) {
              croak("panic: Ponie_I_SV_MAGICAL_SET with value %08X, expect "
                    "only bits from %08X", value, (SVs_GMG|SVs_SMG|SVs_RMG));
          }
          PERL5_FLAGS(pmc) |= value;
          return;
      case Ponie_I_SV_NP_PRIVSHIFT:
          if (value) {
              PERL5_FLAGS(pmc) |= (PERL5_FLAGS(pmc) &
                                   (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
              return;
          }
      case Ponie_I_SV_PADSTALE:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_PADSTALE;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_PADSTALE;
          }
          return;
      case Ponie_I_SV_PADTMP:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_PADTMP;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_PADTMP;
          }
          return;
      case Ponie_I_SV_PADMY:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_PADMY;
              return;
          }
      case Ponie_I_SV_PADTYPED:
          if (value) {
              PERL5_FLAGS(pmc) |= SVpad_TYPED;
              return;
          }
      case Ponie_I_SV_PADOUR:
          if (value) {
              PERL5_FLAGS(pmc) |= SVpad_OUR;
              return;
          }
      case Ponie_I_SV_TEMP:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_TEMP;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_TEMP;
          }
          return;
      case Ponie_I_SV_OBJECT:
          if (value) {
              PERL5_FLAGS(pmc) |= SVs_OBJECT;
          } else {
              PERL5_FLAGS(pmc) &= ~SVs_OBJECT;
          }
          return;
      case Ponie_I_SV_READONLY:
          if (value) {
              PERL5_FLAGS(pmc) |= SVf_READONLY;
          } else {
              PERL5_FLAGS(pmc) &= ~SVf_READONLY;
          }
          return;
      case Ponie_I_SV_SCREAM:
          if (value) {
              PERL5_FLAGS(pmc) |= SVp_SCREAM;
          } else {
              PERL5_FLAGS(pmc) &= ~SVp_SCREAM;
          }
          return;
      case Ponie_I_SV_COMPILED:
          if (value) {
              PERL5_FLAGS(pmc) |= SVpfm_COMPILED;
          } else {
              PERL5_FLAGS(pmc) &= ~SVpfm_COMPILED;
          }
          return;
      case Ponie_I_SV_EVALED:
          if (value) {
              PERL5_FLAGS(pmc) |= SVrepl_EVAL;
          } else {
              PERL5_FLAGS(pmc) &= ~SVrepl_EVAL;
          }
          return;
      case Ponie_I_SV_TAIL:
          if (value) {
              PERL5_FLAGS(pmc) |= SVpbm_TAIL;
          } else {
              PERL5_FLAGS(pmc) &= ~SVpbm_TAIL;
          }
          return;
      case Ponie_I_SV_VALID:
          if (value) {
              PERL5_FLAGS(pmc) |= SVpbm_VALID;
          } else {
              PERL5_FLAGS(pmc) &= ~SVpbm_VALID;
          }
          return;
  
      case Ponie_I_HV_SHAREKEYS:
          if (value) {
              PERL5_FLAGS(pmc) |= SVphv_SHAREKEYS;
          } else {
              PERL5_FLAGS(pmc) &= ~SVphv_SHAREKEYS;
          }
          return;
      case Ponie_I_HV_HASKFLAGS:
          if (value) {
              PERL5_FLAGS(pmc) |= SVphv_HASKFLAGS;
          } else {
              PERL5_FLAGS(pmc) &= ~SVphv_HASKFLAGS;
          }
          return;
      case Ponie_I_HV_LAZYDEL:
          if (value) {
              PERL5_FLAGS(pmc) |= SVphv_LAZYDEL;
          } else {
              PERL5_FLAGS(pmc) &= ~SVphv_LAZYDEL;
          }
          return;
      case Ponie_I_HV_REHASH:
          if (value) {
              PERL5_FLAGS(pmc) |= SVphv_REHASH;
          } else {
              PERL5_FLAGS(pmc) &= ~SVphv_REHASH;
          }
          return;
      default:
          /* Hush gcc. There is a default.  */;
      }
      croak ("Out of range or illegal key %d (max is %d), value is %d"
             " in set_integer_keyed_int", key, Ponie_I_MAX - 1, value);
      return;
  }
  
  /*
   * Local variables:
   * c-indentation-style: bsd
   * c-basic-offset: 4
   * indent-tabs-mode: nil
   * End:
   *
   * vim: expandtab shiftwidth=4:
   */