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