cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 15 Oct 2004 22:13:31 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/15 15:13:31

  Modified:    perl     hv.h sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  Hash flag operations moved to PMC
  
  Revision  Changes    Path
  1.9       +17 -17    ponie/perl/hv.h
  
  Index: hv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/hv.h,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -w -r1.8 -r1.9
  --- hv.h	24 Jun 2004 11:01:48 -0000	1.8
  +++ hv.h	15 Oct 2004 22:13:31 -0000	1.9
  @@ -197,9 +197,9 @@
   #define HvTOTALKEYS(hv)		(*Perl_macro_HvTOTALKEYS(aTHX_ (HV*)(hv)))
   #define HvPLACEHOLDERS(hv)	(*Perl_macro_HvPLACEHOLDERS(aTHX_ (HV*)(hv)))
   
  -#define HvSHAREKEYS(hv)		(SvFLAGS(hv) & SVphv_SHAREKEYS)
  -#define HvSHAREKEYS_on(hv)	(SvFLAGS(hv) |= SVphv_SHAREKEYS)
  -#define HvSHAREKEYS_off(hv)	(SvFLAGS(hv) &= ~SVphv_SHAREKEYS)
  +#define HvSHAREKEYS(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_SHAREKEYS))
  +#define HvSHAREKEYS_on(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_SHAREKEYS, 1)
  +#define HvSHAREKEYS_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_SHAREKEYS, 0)
   
   /* This is an optimisation flag. It won't be set if all hash keys have a 0
    * flag. Currently the only flags relate to utf8.
  @@ -209,24 +209,24 @@
    * any utf8 keys.
    * See HVhek_ENABLEHVKFLAGS for the trigger.
    */
  -#define HvHASKFLAGS(hv)		(SvFLAGS(hv) & SVphv_HASKFLAGS)
  -#define HvHASKFLAGS_on(hv)	(SvFLAGS(hv) |= SVphv_HASKFLAGS)
  -#define HvHASKFLAGS_off(hv)	(SvFLAGS(hv) &= ~SVphv_HASKFLAGS)
  -
  -#define HvLAZYDEL(hv)		(SvFLAGS(hv) & SVphv_LAZYDEL)
  -#define HvLAZYDEL_on(hv)	(SvFLAGS(hv) |= SVphv_LAZYDEL)
  -#define HvLAZYDEL_off(hv)	(SvFLAGS(hv) &= ~SVphv_LAZYDEL)
  -
  -#define HvREHASH(hv)		(SvFLAGS(hv) & SVphv_REHASH)
  -#define HvREHASH_on(hv)		(SvFLAGS(hv) |= SVphv_REHASH)
  -#define HvREHASH_off(hv)	(SvFLAGS(hv) &= ~SVphv_REHASH)
  +#define HvHASKFLAGS(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_HASKFLAGS))
  +#define HvHASKFLAGS_on(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_HASKFLAGS, 1)
  +#define HvHASKFLAGS_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_HASKFLAGS, 0)
  +
  +#define HvLAZYDEL(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_LAZYDEL))
  +#define HvLAZYDEL_on(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_LAZYDEL, 1)
  +#define HvLAZYDEL_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_LAZYDEL, 0)
  +
  +#define HvREHASH(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_REHASH))
  +#define HvREHASH_on(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_REHASH, 1)
  +#define HvREHASH_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_REHASH, 0)
   
   /* Maybe amagical: */
   /* #define HV_AMAGICmb(hv)      (SvFLAGS(hv) & (SVpgv_badAM | SVpgv_AM)) */
   
  -#define HV_AMAGIC(hv)        (SvFLAGS(hv) &   SVpgv_AM)
  -#define HV_AMAGIC_on(hv)     (SvFLAGS(hv) |=  SVpgv_AM)
  -#define HV_AMAGIC_off(hv)    (SvFLAGS(hv) &= ~SVpgv_AM)
  +#define HvAMAGIC(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_AMAGIC))
  +#define HvAMAGIC_on(sv)		Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_AMAGIC, 1)
  +#define HvAMAGIC_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_HV_AMAGIC, 0)
   
   /*
   #define HV_AMAGICbad(hv)     (SvFLAGS(hv) & SVpgv_badAM)
  
  
  
  1.45      +5 -0      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -w -r1.44 -r1.45
  --- sv.h	15 Oct 2004 16:58:04 -0000	1.44
  +++ sv.h	15 Oct 2004 22:13:31 -0000	1.45
  @@ -239,6 +239,11 @@
     Ponie_I_SV_EVALED,
     Ponie_I_SV_TAIL,
     Ponie_I_SV_VALID,
  +  Ponie_I_HV_SHAREKEYS,
  +  Ponie_I_HV_HASKFLAGS,
  +  Ponie_I_HV_LAZYDEL,
  +  Ponie_I_HV_REHASH,
  +  Ponie_I_HV_AMAGIC,
     Ponie_I_MAX
   } Ponie_integers;
   
  
  
  
  1.34      +49 -1     ponie/src/pmc/perl5cargo_cult.pmc
  
  Index: perl5cargo_cult.pmc
  ===================================================================
  RCS file: /cvs/public/ponie/src/pmc/perl5cargo_cult.pmc,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -w -r1.33 -r1.34
  --- perl5cargo_cult.pmc	15 Oct 2004 16:58:05 -0000	1.33
  +++ perl5cargo_cult.pmc	15 Oct 2004 22:13:31 -0000	1.34
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.33 2004/10/15 16:58:05 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.34 2004/10/15 22:13:31 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -210,6 +210,18 @@
   	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) "
  @@ -604,6 +616,42 @@
               }
   	    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.  */;
   	}