cvs commit: ponie/src/pmc perl5cargo_cult.pmc
[email protected] (Nicholas Clark) 15 Oct 2004 12:17:18 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 04/10/15 05:17:18
Modified: perl sv.h
src/pmc perl5cargo_cult.pmc
Log:
3 basic magic flags into the PMC
Revision Changes Path
1.36 +16 -15 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -w -r1.35 -r1.36
--- sv.h 15 Oct 2004 10:49:58 -0000 1.35
+++ sv.h 15 Oct 2004 12:17:17 -0000 1.36
@@ -452,6 +452,7 @@
Ponie_I_SVf_FAKE,
Ponie_I_SVf_ROK,
Ponie_I_SVf_ROK_AMAGIC,
+ Ponie_I_SV_MAGICAL,
Ponie_I_SV_GMAGICAL,
Ponie_I_SV_SMAGICAL,
Ponie_I_SV_RMAGICAL,
@@ -691,21 +692,21 @@
#define SvROK_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVf_ROK, 1)
#define SvROK_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVf_ROK_AMAGIC, 0)
-#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))
-#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))
-#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))
-
-#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)
-#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)
-#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)
-
-#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)
-#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)
-#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)
-
-#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)
-#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)
-#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)
+#define SvMAGICAL(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_MAGICAL))
+#define SvMAGICAL_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_MAGICAL, 1)
+#define SvMAGICAL_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_MAGICAL, 0)
+
+#define SvGMAGICAL(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_GMAGICAL))
+#define SvGMAGICAL_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_GMAGICAL, 1)
+#define SvGMAGICAL_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_GMAGICAL, 0)
+
+#define SvSMAGICAL(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_SMAGICAL))
+#define SvSMAGICAL_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_SMAGICAL, 1)
+#define SvSMAGICAL_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_SMAGICAL, 0)
+
+#define SvRMAGICAL(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_RMAGICAL))
+#define SvRMAGICAL_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_RMAGICAL, 1)
+#define SvRMAGICAL_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_RMAGICAL, 0)
#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC)
#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC)
1.26 +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.25
retrieving revision 1.26
diff -u -w -r1.25 -r1.26
--- perl5cargo_cult.pmc 15 Oct 2004 11:37:52 -0000 1.25
+++ perl5cargo_cult.pmc 15 Oct 2004 12:17:17 -0000 1.26
@@ -1,7 +1,7 @@
/* Perl5QQQ.pmc -*- c -*-
* Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perl5cargo_cult.pmc,v 1.25 2004/10/15 11:37:52 nicholas Exp $
+ * $Id: perl5cargo_cult.pmc,v 1.26 2004/10/15 12:17:17 nicholas Exp $
* Overview:
* These are the vtable functions for the Perl5QQQ base class
* Data Structure and Algorithms:
@@ -150,6 +150,18 @@
case Ponie_I_SVf_ROK:
return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
& SVf_ROK;
+ 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;
default:
croak ("Out of range or illegal key %d (max is %d) "
@@ -382,6 +394,42 @@
&= ~(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;
default:
/* Hush gcc. There is a default. */;