cvs commit: ponie/src/pmc perl5cargo_cult.pmc
[email protected] (Nicholas Clark) 15 Oct 2004 15:52:26 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 04/10/15 08:52:25
Modified: perl sv.h
src/pmc perl5cargo_cult.pmc
Log:
SvTYPE and SvUPGRADE into PMCs
Revision Changes Path
1.42 +71 -70 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -w -r1.41 -r1.42
--- sv.h 15 Oct 2004 15:28:35 -0000 1.41
+++ sv.h 15 Oct 2004 15:52:25 -0000 1.42
@@ -173,10 +173,79 @@
#define SvREFCNT_dec(sv) sv_free((SV*)(sv))
#endif
+/* All the things get_pointer_keyed_int can return. */
+
+typedef enum {
+ Ponie_P_ANY, /* SvANY pointer */
+ Ponie_P_RV, /* SvRV pointer */
+ Ponie_P_IVX, /* SvIVX pointer */
+ Ponie_P_UVX, /* SvIVX pointer */
+ Ponie_P_AVOFF, /* SvIVX pointer */
+ Ponie_P_HVKEYS, /* SvIVX pointer */
+ Ponie_P_NVX, /* SvNVX pointer */
+ Ponie_P_HVPLACEHOLDERS, /* SvNVX pointer */
+ Ponie_P_MAX
+} Ponie_pointers;
+
+typedef enum {
+ Ponie_I_SV_TYPE,
+ Ponie_I_SVp_OK,
+ Ponie_I_SVf_OK,
+ Ponie_I_SVf_OK_exc_UV,
+ Ponie_I_SVf_IOK,
+ Ponie_I_SVp_IOK,
+ Ponie_I_SVpf_IOK,
+ Ponie_I_SVpf_IOK_UTF8,
+ Ponie_I_SVpf_IOK_only,
+ Ponie_I_SVpf_IOK_only_exc_UV,
+ Ponie_I_SVf_IOK_UV,
+ Ponie_I_SVf_IOK_notUV,
+ Ponie_I_SVf_IVisUV,
+ Ponie_I_SVf_NIOK,
+ Ponie_I_SVp_NIOK,
+ Ponie_I_SVpf_NIOK,
+ Ponie_I_SVf_NOK,
+ Ponie_I_SVp_NOK,
+ Ponie_I_SVpf_NOK,
+ Ponie_I_SVpf_NOK_only,
+ Ponie_I_SVf_POK,
+ Ponie_I_SVp_POK,
+ Ponie_I_SVpf_POK,
+ Ponie_I_SVpf_POK_only,
+ Ponie_I_SVpf_POK_only_UTF8,
+ Ponie_I_SVf_UTF8,
+ Ponie_I_SV_VOK,
+ Ponie_I_SVf_OOK,
+ 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,
+ Ponie_I_SV_AMAGIC,
+ Ponie_I_SV_GAMAGIC,
+ Ponie_I_SV_WEAKREF,
+ Ponie_I_SV_THINKFIRST,
+ Ponie_I_SV_PADSTALE,
+ Ponie_I_SV_PADTMP,
+ Ponie_I_SV_PADMY,
+ Ponie_I_SV_TEMP,
+ Ponie_I_SV_OBJECT,
+ Ponie_I_SV_READONLY,
+ Ponie_I_SV_SCREAM,
+ Ponie_I_SV_COMPILED,
+ Ponie_I_SV_EVALED,
+ Ponie_I_SV_TAIL,
+ Ponie_I_SV_VALID,
+ Ponie_I_MAX
+} Ponie_integers;
+
+
#define SVTYPEMASK 0xff
-#define SvTYPE(sv) (SvFLAGS(sv) & SVTYPEMASK)
+#define SvTYPE(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_TYPE))
-#define SvUPGRADE(sv, mt) (SvTYPE(sv) >= mt || sv_upgrade(sv, mt))
+#define SvUPGRADE(sv, mt) (Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_TYPE, mt), TRUE)
#define SVs_PADSTALE 0x00000100 /* lexical has gone out of scope */
#define SVs_PADTMP 0x00000200 /* in use as tmp */
@@ -406,74 +475,6 @@
#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */
#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge) */
-
-/* All the things get_pointer_keyed_int can return. */
-
-typedef enum {
- Ponie_P_ANY, /* SvANY pointer */
- Ponie_P_RV, /* SvRV pointer */
- Ponie_P_IVX, /* SvIVX pointer */
- Ponie_P_UVX, /* SvIVX pointer */
- Ponie_P_AVOFF, /* SvIVX pointer */
- Ponie_P_HVKEYS, /* SvIVX pointer */
- Ponie_P_NVX, /* SvNVX pointer */
- Ponie_P_HVPLACEHOLDERS, /* SvNVX pointer */
- Ponie_P_MAX
-} Ponie_pointers;
-
-typedef enum {
- Ponie_I_SVp_OK,
- Ponie_I_SVf_OK,
- Ponie_I_SVf_OK_exc_UV,
- Ponie_I_SVf_IOK,
- Ponie_I_SVp_IOK,
- Ponie_I_SVpf_IOK,
- Ponie_I_SVpf_IOK_UTF8,
- Ponie_I_SVpf_IOK_only,
- Ponie_I_SVpf_IOK_only_exc_UV,
- Ponie_I_SVf_IOK_UV,
- Ponie_I_SVf_IOK_notUV,
- Ponie_I_SVf_IVisUV,
- Ponie_I_SVf_NIOK,
- Ponie_I_SVp_NIOK,
- Ponie_I_SVpf_NIOK,
- Ponie_I_SVf_NOK,
- Ponie_I_SVp_NOK,
- Ponie_I_SVpf_NOK,
- Ponie_I_SVpf_NOK_only,
- Ponie_I_SVf_POK,
- Ponie_I_SVp_POK,
- Ponie_I_SVpf_POK,
- Ponie_I_SVpf_POK_only,
- Ponie_I_SVpf_POK_only_UTF8,
- Ponie_I_SVf_UTF8,
- Ponie_I_SV_VOK,
- Ponie_I_SVf_OOK,
- 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,
- Ponie_I_SV_AMAGIC,
- Ponie_I_SV_GAMAGIC,
- Ponie_I_SV_WEAKREF,
- Ponie_I_SV_THINKFIRST,
- Ponie_I_SV_PADSTALE,
- Ponie_I_SV_PADTMP,
- Ponie_I_SV_PADMY,
- Ponie_I_SV_TEMP,
- Ponie_I_SV_OBJECT,
- Ponie_I_SV_READONLY,
- Ponie_I_SV_SCREAM,
- Ponie_I_SV_COMPILED,
- Ponie_I_SV_EVALED,
- Ponie_I_SV_TAIL,
- Ponie_I_SV_VALID,
- Ponie_I_MAX
-} Ponie_integers;
-
/* The following macros define implementation-independent predicates on SVs. */
/*
1.32 +9 -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.31
retrieving revision 1.32
diff -u -w -r1.31 -r1.32
--- perl5cargo_cult.pmc 15 Oct 2004 15:28:35 -0000 1.31
+++ perl5cargo_cult.pmc 15 Oct 2004 15:52:25 -0000 1.32
@@ -1,7 +1,7 @@
/* Perl5QQQ.pmc -*- c -*-
* Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perl5cargo_cult.pmc,v 1.31 2004/10/15 15:28:35 nicholas Exp $
+ * $Id: perl5cargo_cult.pmc,v 1.32 2004/10/15 15:52:25 nicholas Exp $
* Overview:
* These are the vtable functions for the Perl5QQQ base class
* Data Structure and Algorithms:
@@ -80,6 +80,9 @@
INTVAL get_integer_keyed_int(INTVAL key) {
switch (key) {
+ case Ponie_I_SV_TYPE:
+ return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
+ & SVTYPEMASK;
case Ponie_I_SVp_OK:
return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
& (SVp_IOK|SVp_NOK|SVp_POK);
@@ -217,6 +220,11 @@
void set_integer_keyed_int(INTVAL key, INTVAL value) {
switch (key) {
+ case Ponie_I_SV_TYPE:
+ if ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags & SVTYPEMASK) < value)
+ sv_upgrade(MUMBLE(SELF), value);
+ return;
+
case Ponie_I_SVf_OK:
if (!value) {
/* Only legal thing to do is turn this off. */