cvs commit: ponie/src/pmc perl5cargo_cult.pmc
[email protected] (Nicholas Clark) 15 Oct 2004 14:05:42 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 04/10/15 07:05:42
Modified: perl sv.h
src/pmc perl5cargo_cult.pmc
Log:
Weakrefs and THINKFIRST into the PMC
Revision Changes Path
1.38 +5 -5 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -w -r1.37 -r1.38
--- sv.h 15 Oct 2004 13:41:38 -0000 1.37
+++ sv.h 15 Oct 2004 14:05:41 -0000 1.38
@@ -721,12 +721,12 @@
*/
#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash))
-#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
- == (SVf_ROK|SVprv_WEAKREF))
-#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))
-#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
+#define SvWEAKREF(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF))
+#define SvWEAKREF_on(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF, 1)
+#define SvWEAKREF_off(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF, 0)
-#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)
+
+#define SvTHINKFIRST(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_THINKFIRST))
#define SvPADSTALE(sv) (SvFLAGS(sv) & SVs_PADSTALE)
#define SvPADSTALE_on(sv) (SvFLAGS(sv) |= SVs_PADSTALE)
1.28 +16 -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.27
retrieving revision 1.28
diff -u -w -r1.27 -r1.28
--- perl5cargo_cult.pmc 15 Oct 2004 13:41:38 -0000 1.27
+++ perl5cargo_cult.pmc 15 Oct 2004 14:05:42 -0000 1.28
@@ -1,7 +1,7 @@
/* Perl5QQQ.pmc -*- c -*-
* Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perl5cargo_cult.pmc,v 1.27 2004/10/15 13:41:38 nicholas Exp $
+ * $Id: perl5cargo_cult.pmc,v 1.28 2004/10/15 14:05:42 nicholas Exp $
* Overview:
* These are the vtable functions for the Perl5QQQ base class
* Data Structure and Algorithms:
@@ -150,6 +150,9 @@
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);
@@ -168,6 +171,9 @@
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;
default:
croak ("Out of range or illegal key %d (max is %d) "
@@ -394,6 +400,15 @@
&= ~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)