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. */;
}