cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 4 Nov 2004 12:35:32 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/11/04 04:35:32

  Modified:    perl     embed.fnc embed.h global.sym proto.h sv.c sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  SvFLAGS() outside sv.c is now read only, calling into the PMC to get a value.
  Inside sv.c it uses a static function to get lvalue access to the flags.
  This should hinder intruders who want to alter the flags without the PMC
  being aware of it. (A fair proportion of sv.c needing to move inside the PMC)
  
  Revision  Changes    Path
  1.33      +0 -1      ponie/perl/embed.fnc
  
  Index: embed.fnc
  ===================================================================
  RCS file: /cvs/public/ponie/perl/embed.fnc,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- embed.fnc	16 Oct 2004 10:27:59 -0000	1.32
  +++ embed.fnc	4 Nov 2004 12:35:31 -0000	1.33
  @@ -989,7 +989,6 @@
   Ap      |IV*|macro_AvOFF  |AV *
   
   Ap	|void**	|macro_SvANY	|SV *
  -Ap	|U32*	|macro_SvFLAGS	|SV *
   Ap	|U32*	|macro_SvREFCNT	|SV *
   Ap	|char**	|macro_SvPVX	|SV *
   Ap	|STRLEN*	|macro_SvCUR	|SV *
  
  
  
  1.23      +0 -2      ponie/perl/embed.h
  
  Index: embed.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/embed.h,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- embed.h	16 Oct 2004 10:27:59 -0000	1.22
  +++ embed.h	4 Nov 2004 12:35:31 -0000	1.23
  @@ -1270,7 +1270,6 @@
   #define macro_AvMAX		Perl_macro_AvMAX
   #define macro_AvOFF		Perl_macro_AvOFF
   #define macro_SvANY		Perl_macro_SvANY
  -#define macro_SvFLAGS		Perl_macro_SvFLAGS
   #define macro_SvREFCNT		Perl_macro_SvREFCNT
   #define macro_SvPVX		Perl_macro_SvPVX
   #define macro_SvCUR		Perl_macro_SvCUR
  @@ -3827,7 +3826,6 @@
   #define macro_AvMAX(a)		Perl_macro_AvMAX(aTHX_ a)
   #define macro_AvOFF(a)		Perl_macro_AvOFF(aTHX_ a)
   #define macro_SvANY(a)		Perl_macro_SvANY(aTHX_ a)
  -#define macro_SvFLAGS(a)	Perl_macro_SvFLAGS(aTHX_ a)
   #define macro_SvREFCNT(a)	Perl_macro_SvREFCNT(aTHX_ a)
   #define macro_SvPVX(a)		Perl_macro_SvPVX(aTHX_ a)
   #define macro_SvCUR(a)		Perl_macro_SvCUR(aTHX_ a)
  
  
  
  1.17      +0 -1      ponie/perl/global.sym
  
  Index: global.sym
  ===================================================================
  RCS file: /cvs/public/ponie/perl/global.sym,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- global.sym	16 Oct 2004 10:27:59 -0000	1.16
  +++ global.sym	4 Nov 2004 12:35:31 -0000	1.17
  @@ -650,7 +650,6 @@
   Perl_macro_AvMAX
   Perl_macro_AvOFF
   Perl_macro_SvANY
  -Perl_macro_SvFLAGS
   Perl_macro_SvREFCNT
   Perl_macro_SvPVX
   Perl_macro_SvCUR
  
  
  
  1.33      +0 -1      ponie/perl/proto.h
  
  Index: proto.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/proto.h,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- proto.h	16 Oct 2004 10:27:59 -0000	1.32
  +++ proto.h	4 Nov 2004 12:35:31 -0000	1.33
  @@ -947,7 +947,6 @@
   PERL_CALLCONV IV*	Perl_macro_AvOFF(pTHX_ AV *);
   
   PERL_CALLCONV void**	Perl_macro_SvANY(pTHX_ SV *);
  -PERL_CALLCONV U32*	Perl_macro_SvFLAGS(pTHX_ SV *);
   PERL_CALLCONV U32*	Perl_macro_SvREFCNT(pTHX_ SV *);
   PERL_CALLCONV char**	Perl_macro_SvPVX(pTHX_ SV *);
   PERL_CALLCONV STRLEN*	Perl_macro_SvCUR(pTHX_ SV *);
  
  
  
  1.56      +1 -1      ponie/perl/sv.c
  
  Index: sv.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.c,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- sv.c	4 Nov 2004 10:26:27 -0000	1.55
  +++ sv.c	4 Nov 2004 12:35:31 -0000	1.56
  @@ -1064,7 +1064,7 @@
   	   ->sv_any);
   }
   U32*
  -Perl_macro_SvFLAGS (pTHX_ SV *sv) {
  +S_macro_SvFLAGS_RW (pTHX_ SV *sv) {
     return &(((struct STRUCT_SV*)Parrot_PMC_get_pointer(PL_Parrot,MUMBLE(sv)))
   	   ->sv_flags);
   }
  
  
  
  1.59      +3 -2      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- sv.h	4 Nov 2004 10:26:27 -0000	1.58
  +++ sv.h	4 Nov 2004 12:35:31 -0000	1.59
  @@ -139,10 +139,10 @@
   #if defined(PERL_CORE) && defined(PERL_IN_SV_C)
   /* sv.c will be replaced with PMC code to clone things etc, so little point
      in re-working it to avoid all LVALUE accesses at this point.  */
  -#  define SvFLAGS(sv)	(*Perl_macro_SvFLAGS(aTHX_ (SV *) (sv)))
  +#  define SvFLAGS(sv)	(*S_macro_SvFLAGS_RW(aTHX_ (SV *) (sv)))
   #else
   /* No longer an LVALUE */
  -#  define SvFLAGS(sv)	(0 + *Perl_macro_SvFLAGS(aTHX_ (SV *) (sv)))
  +#  define SvFLAGS(sv)	((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_FLAGS))
   #endif
   
   #define SvPMC(sv)       1
  @@ -249,6 +249,7 @@
     Ponie_I_SV_TYPE,
     Ponie_I_SV_UPGRADE,
     Ponie_I_SV_ZERO_FLAGS_SET_TYPE,
  +  Ponie_I_SV_FLAGS,	/* Read only  */
     Ponie_I_SVf_BREAK,
     Ponie_I_SVp_OK,
     Ponie_I_SVf_OK,
  
  
  
  1.45      +3 -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.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- perl5cargo_cult.pmc	4 Nov 2004 10:26:27 -0000	1.44
  +++ perl5cargo_cult.pmc	4 Nov 2004 12:35:32 -0000	1.45
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.44 2004/11/04 10:26:27 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.45 2004/11/04 12:35:32 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -528,6 +528,8 @@
   
       INTVAL get_integer_keyed_int(INTVAL key) {
   	switch (key) {
  +	case Ponie_I_SV_FLAGS:
  +            return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags;
   	case Ponie_I_SV_TYPE:
               return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
                   & SVTYPEMASK;