cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 15 Oct 2004 14:05:42 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/15 07:05:42

  Modified:    perl     sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  Weakrefs and THINKFIRST into the PMC
  
  Revision  Changes    Path
  1.38      +5 -5      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -w -r1.37 -r1.38
  --- sv.h	15 Oct 2004 13:41:38 -0000	1.37
  +++ sv.h	15 Oct 2004 14:05:41 -0000	1.38
  @@ -721,12 +721,12 @@
   */
   #define Gv_AMG(stash)           (PL_amagic_generation && Gv_AMupdate(stash))
   
  -#define SvWEAKREF(sv)		((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
  -				  == (SVf_ROK|SVprv_WEAKREF))
  -#define SvWEAKREF_on(sv)	(SvFLAGS(sv) |=  (SVf_ROK|SVprv_WEAKREF))
  -#define SvWEAKREF_off(sv)	(SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
  +#define SvWEAKREF(sv)		((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF))
  +#define SvWEAKREF_on(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF, 1)
  +#define SvWEAKREF_off(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_WEAKREF, 0)
   
  -#define SvTHINKFIRST(sv)	(SvFLAGS(sv) & SVf_THINKFIRST)
  +
  +#define SvTHINKFIRST(sv)	((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_THINKFIRST))
   
   #define SvPADSTALE(sv)		(SvFLAGS(sv) & SVs_PADSTALE)
   #define SvPADSTALE_on(sv)	(SvFLAGS(sv) |= SVs_PADSTALE)
  
  
  
  1.28      +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.27
  retrieving revision 1.28
  diff -u -w -r1.27 -r1.28
  --- perl5cargo_cult.pmc	15 Oct 2004 13:41:38 -0000	1.27
  +++ perl5cargo_cult.pmc	15 Oct 2004 14:05:42 -0000	1.28
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.27 2004/10/15 13:41:38 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.28 2004/10/15 14:05:42 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -150,6 +150,9 @@
   	case Ponie_I_SVf_ROK:
   	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
   			 & SVf_ROK;
  +	case Ponie_I_SV_WEAKREF:
  +	    return (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  +                    & (SVf_ROK|SVprv_WEAKREF)) == (SVf_ROK|SVprv_WEAKREF);
   	case Ponie_I_SV_MAGICAL:
   	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
   			 & (SVs_GMG|SVs_SMG|SVs_RMG);
  @@ -168,6 +171,9 @@
   	case Ponie_I_SV_GAMAGIC:
   	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
   			 & (SVs_GMG|SVf_AMAGIC);
  +	case Ponie_I_SV_THINKFIRST:
  +	    return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
  +			 & SVf_THINKFIRST;
   
   	default:
   	    croak ("Out of range or illegal key %d (max is %d) "
  @@ -394,6 +400,15 @@
                       &= ~SVf_ROK;
               }
   	    return;
  +	case Ponie_I_SV_WEAKREF:
  +	    if (value) {
  +		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +		    |= (SVf_ROK|SVprv_WEAKREF);
  +	    } else {
  +                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +                    &= ~(SVf_ROK|SVprv_WEAKREF);
  +            }
  +	    return;
   	case Ponie_I_SVf_ROK_AMAGIC:
   	    if (!value) {
   		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)