cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 16 Oct 2004 11:31:48 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/16 04:31:47

  Modified:    perl     mg.c sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  The magic related operations (PRIVSHIFT setting of public flags, setting
  G/R/S magic in one) are also needed by scope.c, so make them explict
  operations that the PMC can perform.
  
  Revision  Changes    Path
  1.7       +4 -14     ponie/perl/mg.c
  
  Index: mg.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/mg.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -w -r1.6 -r1.7
  --- mg.c	16 Oct 2004 07:59:37 -0000	1.6
  +++ mg.c	16 Oct 2004 11:31:47 -0000	1.7
  @@ -87,12 +87,7 @@
   
       SvMAGICAL_off(sv);
       SvREADONLY_off(sv);
  -    /* SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
  -       becomes  */
  -    if (SvPOKp(sv))
  -      SvPOK_on(sv);
  -    if (SvNOKp(sv))
  -      SvNOK_on(sv);
  +    SV_PRIVSHIFT(sv);
   }
   
   /*
  @@ -2649,17 +2644,12 @@
   
   	if (mgs->mgs_flags) {
   	    /* SvFLAGS(sv) |= mgs->mgs_flags; */
  -	    if (mgs->mgs_flags & SVf_READONLY)
  -		SvREADONLY_on(sv);
  -	    if (mgs->mgs_flags & SVs_GMG)
  -		SvGMAGICAL_on(sv);
  -	    if (mgs->mgs_flags & SVs_RMG)
  -		SvRMAGICAL_on(sv);
  -	    if (mgs->mgs_flags & SVs_SMG)
  -		SvSMAGICAL_on(sv);
   	    if (mgs->mgs_flags & ~(SVf_READONLY|SVs_GMG|SVs_RMG|SVs_SMG))
   		Perl_croak(aTHX_ "panic: restore_magic flags %08X",
   			   mgs->mgs_flags);
  +	    if (mgs->mgs_flags & SVf_READONLY)
  +		SvREADONLY_on(sv);
  +	    SvMAGICAL_set(sv, mgs->mgs_flags & ~SVf_READONLY);
   	}
   	else
   	    mg_magical(sv);
  
  
  
  1.47      +10 -0     ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -w -r1.46 -r1.47
  --- sv.h	15 Oct 2004 23:04:41 -0000	1.46
  +++ sv.h	16 Oct 2004 11:31:47 -0000	1.47
  @@ -215,6 +215,7 @@
     Ponie_I_SVpf_POK_only,
     Ponie_I_SVpf_POK_only_UTF8,
     Ponie_I_SVf_UTF8,
  +  Ponie_I_SV_NP_PRIVSHIFT,
     Ponie_I_SV_VOK,
     Ponie_I_SVf_OOK,
     Ponie_I_SVf_FAKE,
  @@ -226,6 +227,7 @@
     Ponie_I_SV_RMAGICAL,
     Ponie_I_SV_AMAGIC,
     Ponie_I_SV_GAMAGIC,
  +  Ponie_I_SV_MAGICAL_SET,
     Ponie_I_SV_WEAKREF,
     Ponie_I_SV_THINKFIRST,
     Ponie_I_SV_PADSTALE,
  @@ -294,6 +296,10 @@
   
   #define PRIVSHIFT 8	/* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
   
  +#ifdef PERL_CORE
  +#define SV_PRIVSHIFT(sv)	Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_NP_PRIVSHIFT, 1)
  +#endif
  +
   /* Some private flags. */
   
   /* SVpad_OUR may be set on SVt_PV{NV,MG,GV} types */
  @@ -707,6 +713,10 @@
   #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)
   
  +#ifdef PERL_CORE
  +#define SvMAGICAL_set(sv,val)	(Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_MAGICAL_SET,val))
  +#endif
  +
   #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)
  
  
  
  1.36      +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.35
  retrieving revision 1.36
  diff -u -w -r1.35 -r1.36
  --- perl5cargo_cult.pmc	15 Oct 2004 23:04:42 -0000	1.35
  +++ perl5cargo_cult.pmc	16 Oct 2004 11:31:47 -0000	1.36
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.35 2004/10/15 23:04:42 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.36 2004/10/16 11:31:47 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -519,6 +519,21 @@
                       &= ~SVf_AMAGIC;
               }
   	    return;
  +	case Ponie_I_SV_MAGICAL_SET:
  +            if (value & ~(SVs_GMG|SVs_SMG|SVs_RMG)) {
  +                croak("panic: Ponie_I_SV_MAGICAL_SET with value %08X, expect "
  +                      "only bits from %08X", value, (SVs_GMG|SVs_SMG|SVs_RMG));
  +            }
  +            (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +                |= value;
  +            return;
  +        case Ponie_I_SV_NP_PRIVSHIFT:
  +            if (value) {
  +                (((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)
  +                    |= ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags) &
  +                        (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
  +                return;
  +            }
   	case Ponie_I_SV_PADSTALE:
   	    if (value) {
   		(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags)