cvs commit: ponie/src/pmc perl5cargo_cult.pmc

[email protected] (Nicholas Clark) 3 Nov 2004 20:46:12 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/11/03 12:46:12

  Modified:    perl     sv.c sv.h
               src/pmc  perl5cargo_cult.pmc
  Log:
  Move SvPVX, SvLEN and SvCUR into the PMC
  
  Revision  Changes    Path
  1.49      +3 -20     ponie/perl/sv.c
  
  Index: sv.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.c,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- sv.c	3 Nov 2004 16:46:56 -0000	1.48
  +++ sv.c	3 Nov 2004 20:46:11 -0000	1.49
  @@ -1112,35 +1112,18 @@
     return Parrot_PMC_get_pointer_intkey(PL_Parrot,MUMBLE(sv), Ponie_P_IVX);
   }
   
  -
   char** Perl_macro_SvPVX (pTHX_ SV *sv) {
  -  assert (!SvROK(sv));
  -  if(SvPMC(sv)) {
  -    XPV* data = (XPV*) /**/ SvANY(sv);
  -    return &(data->xpv_pv);
  -  }
  -  return &((XPV*)SvANY(sv))->xpv_pv;
  -  
  +  return Parrot_PMC_get_pointer_intkey(PL_Parrot,MUMBLE(sv), Ponie_P_PVX);
   }
   
   STRLEN* Perl_macro_SvLEN (pTHX_ SV *sv) {
  -  if(SvPMC(sv)) {
  -    XPV* data = (XPV*) /**/ SvANY(sv);
  -    return &(data->xpv_len);
  -  }
  -  return &((XPV*)SvANY(sv))->xpv_len;
  -  
  +  return Parrot_PMC_get_pointer_intkey(PL_Parrot,MUMBLE(sv), Ponie_P_LEN);
   }
   
   STRLEN* Perl_macro_SvCUR (pTHX_ SV *sv) {
  -  if(SvPMC(sv)) {
  -    XPV* data = (XPV*) /**/ SvANY(sv);
  -    return &(data->xpv_cur);
  -  }
  -  return &((XPV*)SvANY(sv))->xpv_cur;
  +  return Parrot_PMC_get_pointer_intkey(PL_Parrot,MUMBLE(sv), Ponie_P_CUR);
   }
   
  -
   U8* Perl_macro_BmRARE (pTHX_ SV *sv) {
     if(SvPMC(sv)) {
       XPVBM* data = (XPVBM*) /**/ SvANY(sv);
  
  
  
  1.52      +3 -0      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- sv.h	3 Nov 2004 16:46:56 -0000	1.51
  +++ sv.h	3 Nov 2004 20:46:11 -0000	1.52
  @@ -192,6 +192,9 @@
   typedef enum {
     Ponie_P_ANY,	/* SvANY pointer  */
     Ponie_P_RV,	/* SvRV pointer	  */
  +  Ponie_P_PVX,	/* SvPVX pointer  */
  +  Ponie_P_CUR,	/* SvCUR pointer  */
  +  Ponie_P_LEN,	/* SvLEN pointer  */
     Ponie_P_IVX,	/* SvIVX pointer  */
     Ponie_P_UVX,	/* SvIVX pointer  */
     Ponie_P_AVOFF,	/* SvIVX pointer  */
  
  
  
  1.39      +31 -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.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- perl5cargo_cult.pmc	3 Nov 2004 16:46:57 -0000	1.38
  +++ perl5cargo_cult.pmc	3 Nov 2004 20:46:11 -0000	1.39
  @@ -1,7 +1,7 @@
   /* Perl5QQQ.pmc -*- c -*-
    *  Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5cargo_cult.pmc,v 1.38 2004/11/03 16:46:57 nicholas Exp $
  + *     $Id: perl5cargo_cult.pmc,v 1.39 2004/11/03 20:46:11 nicholas Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5QQQ base class
    *  Data Structure and Algorithms:
  @@ -64,6 +64,36 @@
               assert (!(((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags & SVp_POK));
   	    return &(PMC_pmc_val(SELF));
   	    /*return &(((struct xrv*)((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_any)->xrv_rv);*/
  +	case Ponie_P_PVX:
  +            {
  +                struct STRUCT_SV* sv = PMC_struct_val(SELF);
  +                XPV *any;
  +
  +                assert (sv);
  +                any = (XPV *)sv->sv_any;
  +                assert (any);
  +                return &(any->xpv_pv);
  +            }
  +	case Ponie_P_LEN:
  +            {
  +                struct STRUCT_SV* sv = PMC_struct_val(SELF);
  +                XPV *any;
  +
  +                assert (sv);
  +                any = (XPV *)sv->sv_any;
  +                assert (any);
  +                return &(any->xpv_len);
  +            }
  +	case Ponie_P_CUR:
  +            {
  +                struct STRUCT_SV* sv = PMC_struct_val(SELF);
  +                XPV *any;
  +
  +                assert (sv);
  +                any = (XPV *)sv->sv_any;
  +                assert (any);
  +                return &(any->xpv_cur);
  +            }
   	case Ponie_P_IVX:
   	case Ponie_P_UVX:
   	case Ponie_P_AVOFF: