cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 14 Oct 2004 18:04:37 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/14 11:04:37

  Modified:    perl     sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  Move SvIOK_only() and SvIOK_only_UV() to PMC
  
  Revision  Changes    Path
  1.31      +4 -4      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -w -r1.30 -r1.31
  --- sv.h	14 Oct 2004 17:11:00 -0000	1.30
  +++ sv.h	14 Oct 2004 18:04:37 -0000	1.31
  @@ -428,6 +428,8 @@
     Ponie_I_SVf_IOK,
     Ponie_I_SVp_IOK,
     Ponie_I_SVpf_IOK,
  +  Ponie_I_SVpf_IOK_only,
  +  Ponie_I_SVpf_IOK_only_exc_UV,
     Ponie_I_SVf_NIOK,
     Ponie_I_SVp_NIOK,
     Ponie_I_SVpf_NIOK,
  @@ -601,10 +603,8 @@
   #define SvIOK(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVf_IOK))
   #define SvIOK_on(sv)		Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVpf_IOK, 1)
   #define SvIOK_off(sv)		Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVpf_IOK, 0)
  -#define SvIOK_only(sv)		((void)SvOK_off(sv), \
  -				    SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
  -#define SvIOK_only_UV(sv)	((void)SvOK_off_exc_UV(sv), \
  -				    SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
  +#define SvIOK_only(sv)		Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVpf_IOK_only, 1)
  +#define SvIOK_only_UV(sv)		Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SVpf_IOK_only_exc_UV, 1)
   
   #define SvIOK_UV(sv)		((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV))	\
   				 == (SVf_IOK|SVf_IVisUV))
  
  
  
  1.20      +31 -9     ponie/src/pmc/perl5cargo_cult.pmc
  
  Index: perl5cargo_cult.pmc
  ===================================================================
  RCS file: /cvs/public/ponie/src/pmc/perl5cargo_cult.pmc,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -w -r1.19 -r1.20
  --- perl5cargo_cult.pmc	14 Oct 2004 17:11:00 -0000	1.19
  +++ perl5cargo_cult.pmc	14 Oct 2004 18:04:37 -0000	1.20
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.19 2004/10/14 17:11:00 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.20 2004/10/14 18:04:37 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -17,6 +17,20 @@
   #undef HAS_OFF64_T
   #include "perl.h"
   
  +static void S_SvOK_off(PMC *pmc) {
  +    assert_not_ROK(MUMBLE(pmc)) 0;
  +    (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
  +	&= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
  +    SvOOK_off(MUMBLE(pmc));
  +}
  +
  +static void S_SvOK_off_exc_UV(PMC *pmc) {
  +    assert_not_ROK(MUMBLE(pmc)) 0;
  +    (((struct STRUCT_SV *)PMC_struct_val(pmc))->sv_flags)
  +	&= ~(SVf_OK|SVf_AMAGIC|SVf_UTF8);
  +    SvOOK_off(MUMBLE(pmc));
  +}
  +
   pmclass Perl5QQQ dynpmc {
   
       void init () {	
  @@ -119,18 +133,26 @@
   	case Ponie_I_SVf_OK:
   	    if (!value) {
   		/* Only legal thing to do is turn this off.  */
  -	      assert_not_ROK(MUMBLE(SELF)) 0;
  +		S_SvOK_off(SELF);
  +	    }
  +	case Ponie_I_SVpf_IOK_only:
  +	    if (value) {
  +		/* Only legal thing to do is turn this on.  */
  +		S_SvOK_off(SELF);
   	      (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		&= ~(SVf_OK|SVf_AMAGIC|SVf_IVisUV|SVf_UTF8);
  -	      SvOOK_off(MUMBLE(SELF));
  +		    |= (SVp_IOK|SVf_IOK);
   	    }
   	case Ponie_I_SVf_OK_exc_UV:
   	    if (!value) {
   		/* Only legal thing to do is turn this off.  */
  -	      assert_not_ROK(MUMBLE(SELF)) 0;
  +		S_SvOK_off_exc_UV(SELF);
  +	    }
  +	case Ponie_I_SVpf_IOK_only_exc_UV:
  +	    if (value) {
  +		/* Only legal thing to do is turn this on.  */
  +		S_SvOK_off_exc_UV(SELF);
   	      (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  -		&= ~(SVf_OK|SVf_AMAGIC|SVf_UTF8);
  -	      SvOOK_off(MUMBLE(SELF));
  +		    |= (SVp_IOK|SVf_IOK);
   	    }
   
   	case Ponie_I_SVp_IOK: