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