cvs commit: ponie/src/pmc perl5cargo_cult.pmc
[email protected] (Nicholas Clark) 16 Oct 2004 11:31:48 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 04/10/16 04:31:47
Modified: perl mg.c sv.h
src/pmc perl5cargo_cult.pmc
Log:
The magic related operations (PRIVSHIFT setting of public flags, setting
G/R/S magic in one) are also needed by scope.c, so make them explict
operations that the PMC can perform.
Revision Changes Path
1.7 +4 -14 ponie/perl/mg.c
Index: mg.c
===================================================================
RCS file: /cvs/public/ponie/perl/mg.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -r1.6 -r1.7
--- mg.c 16 Oct 2004 07:59:37 -0000 1.6
+++ mg.c 16 Oct 2004 11:31:47 -0000 1.7
@@ -87,12 +87,7 @@
SvMAGICAL_off(sv);
SvREADONLY_off(sv);
- /* SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
- becomes */
- if (SvPOKp(sv))
- SvPOK_on(sv);
- if (SvNOKp(sv))
- SvNOK_on(sv);
+ SV_PRIVSHIFT(sv);
}
/*
@@ -2649,17 +2644,12 @@
if (mgs->mgs_flags) {
/* SvFLAGS(sv) |= mgs->mgs_flags; */
- if (mgs->mgs_flags & SVf_READONLY)
- SvREADONLY_on(sv);
- if (mgs->mgs_flags & SVs_GMG)
- SvGMAGICAL_on(sv);
- if (mgs->mgs_flags & SVs_RMG)
- SvRMAGICAL_on(sv);
- if (mgs->mgs_flags & SVs_SMG)
- SvSMAGICAL_on(sv);
if (mgs->mgs_flags & ~(SVf_READONLY|SVs_GMG|SVs_RMG|SVs_SMG))
Perl_croak(aTHX_ "panic: restore_magic flags %08X",
mgs->mgs_flags);
+ if (mgs->mgs_flags & SVf_READONLY)
+ SvREADONLY_on(sv);
+ SvMAGICAL_set(sv, mgs->mgs_flags & ~SVf_READONLY);
}
else
mg_magical(sv);
1.47 +10 -0 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -w -r1.46 -r1.47
--- sv.h 15 Oct 2004 23:04:41 -0000 1.46
+++ sv.h 16 Oct 2004 11:31:47 -0000 1.47
@@ -215,6 +215,7 @@
Ponie_I_SVpf_POK_only,
Ponie_I_SVpf_POK_only_UTF8,
Ponie_I_SVf_UTF8,
+ Ponie_I_SV_NP_PRIVSHIFT,
Ponie_I_SV_VOK,
Ponie_I_SVf_OOK,
Ponie_I_SVf_FAKE,
@@ -226,6 +227,7 @@
Ponie_I_SV_RMAGICAL,
Ponie_I_SV_AMAGIC,
Ponie_I_SV_GAMAGIC,
+ Ponie_I_SV_MAGICAL_SET,
Ponie_I_SV_WEAKREF,
Ponie_I_SV_THINKFIRST,
Ponie_I_SV_PADSTALE,
@@ -294,6 +296,10 @@
#define PRIVSHIFT 8 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
+#ifdef PERL_CORE
+#define SV_PRIVSHIFT(sv) Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_NP_PRIVSHIFT, 1)
+#endif
+
/* Some private flags. */
/* SVpad_OUR may be set on SVt_PV{NV,MG,GV} types */
@@ -707,6 +713,10 @@
#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)
+#ifdef PERL_CORE
+#define SvMAGICAL_set(sv,val) (Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_MAGICAL_SET,val))
+#endif
+
#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)
1.36 +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.35
retrieving revision 1.36
diff -u -w -r1.35 -r1.36
--- perl5cargo_cult.pmc 15 Oct 2004 23:04:42 -0000 1.35
+++ perl5cargo_cult.pmc 16 Oct 2004 11:31:47 -0000 1.36
@@ -1,7 +1,7 @@
/* Perl5QQQ.pmc -*- c -*-
* Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perl5cargo_cult.pmc,v 1.35 2004/10/15 23:04:42 nicholas Exp $
+ * $Id: perl5cargo_cult.pmc,v 1.36 2004/10/16 11:31:47 nicholas Exp $
* Overview:
* These are the vtable functions for the Perl5QQQ base class
* Data Structure and Algorithms:
@@ -519,6 +519,21 @@
&= ~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)