cvs commit: ponie/src/pmc perl5av.pmc

[email protected] (Arthur Bergman) 25 Feb 2004 16:08:16 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/02/25 08:08:15

  Modified:    perl     av.c av.h embed.fnc embed.h global.sym proto.h sv.c
                        sv.h
               src/pmc  perl5av.pmc
  Log:
  Array storage is now completely inside the PMC!
  
  Revision  Changes    Path
  1.3       +4 -1      ponie/perl/av.c
  
  Index: av.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/av.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -w -r1.2 -r1.3
  --- av.c	20 Feb 2004 09:45:56 -0000	1.2
  +++ av.c	25 Feb 2004 16:08:15 -0000	1.3
  @@ -22,7 +22,10 @@
   #include "perl.h"
   #include "parrot/extend.h"
   
  -
  +SV*** Perl_macro_AvARRAY (pTHX_ AV *av) {
  +  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
  +  return &(data->xav_array);
  +}
   
   U8* Perl_macro_AvFLAGS (pTHX_ AV *av) {
     XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
  
  
  
  1.3       +1 -1      ponie/perl/av.h
  
  Index: av.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/av.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -w -r1.2 -r1.3
  --- av.h	20 Feb 2004 09:45:56 -0000	1.2
  +++ av.h	25 Feb 2004 16:08:15 -0000	1.3
  @@ -61,7 +61,7 @@
   
   #define Nullav Null(AV*)
   
  -#define AvARRAY(av)	((SV**)((XPVAV*)  SvANY(av))->xav_array)
  +#define AvARRAY(av)	( * Perl_macro_AvARRAY(aTHX_  (AV*)av) )
   #define AvALLOC(av)	( * Perl_macro_AvALLOC(aTHX_  (AV*)av) )
   #define AvMAX(av)	( * Perl_macro_AvMAX(aTHX_    (AV*)av) )
   #define AvFILLp(av)     ( * Perl_macro_AvFILLp(aTHX_  (AV*)av) )
  
  
  
  1.6       +4 -1      ponie/perl/embed.fnc
  
  Index: embed.fnc
  ===================================================================
  RCS file: /cvs/public/ponie/perl/embed.fnc,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- embed.fnc	20 Feb 2004 09:45:56 -0000	1.5
  +++ embed.fnc	25 Feb 2004 16:08:15 -0000	1.6
  @@ -968,13 +968,16 @@
   Adp	|int	|nothreadhook
   
   
  -
  +Ap	|SV***	|macro_AvARRAY	|AV *
   Ap      |U8*|macro_AvFLAGS  |AV *
   Ap      |SV***|macro_AvALLOC  |AV *
   Ap      |SV**|macro_AvARYLEN  |AV *
   Ap      |SSize_t*|macro_AvFILLp  |AV *
   Ap      |SSize_t*|macro_AvMAX  |AV *
   Ap	|char**	|macro_SvPVX	|SV *
  +Ap	|IV*	|macro_SvIVX	|SV *
  +Ap	|NV*	|macro_SvNVX	|SV *
  +Ap	|UV*	|macro_SvUVX	|SV *
   Ap	|char**	|macro_LvTYPE	|SV *
   Ap	|SV**	|macro_LvTARG	|SV *
   
  
  
  
  1.6       +8 -0      ponie/perl/embed.h
  
  Index: embed.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/embed.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- embed.h	20 Feb 2004 09:45:56 -0000	1.5
  +++ embed.h	25 Feb 2004 16:08:15 -0000	1.6
  @@ -1255,12 +1255,16 @@
   #define sv_nolocking		Perl_sv_nolocking
   #define sv_nounlocking		Perl_sv_nounlocking
   #define nothreadhook		Perl_nothreadhook
  +#define macro_AvARRAY		Perl_macro_AvARRAY
   #define macro_AvFLAGS		Perl_macro_AvFLAGS
   #define macro_AvALLOC		Perl_macro_AvALLOC
   #define macro_AvARYLEN		Perl_macro_AvARYLEN
   #define macro_AvFILLp		Perl_macro_AvFILLp
   #define macro_AvMAX		Perl_macro_AvMAX
   #define macro_SvPVX		Perl_macro_SvPVX
  +#define macro_SvIVX		Perl_macro_SvIVX
  +#define macro_SvNVX		Perl_macro_SvNVX
  +#define macro_SvUVX		Perl_macro_SvUVX
   #define macro_LvTYPE		Perl_macro_LvTYPE
   #define macro_LvTARG		Perl_macro_LvTARG
   #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
  @@ -3745,12 +3749,16 @@
   #define sv_nolocking(a)		Perl_sv_nolocking(aTHX_ a)
   #define sv_nounlocking(a)	Perl_sv_nounlocking(aTHX_ a)
   #define nothreadhook()		Perl_nothreadhook(aTHX)
  +#define macro_AvARRAY(a)	Perl_macro_AvARRAY(aTHX_ a)
   #define macro_AvFLAGS(a)	Perl_macro_AvFLAGS(aTHX_ a)
   #define macro_AvALLOC(a)	Perl_macro_AvALLOC(aTHX_ a)
   #define macro_AvARYLEN(a)	Perl_macro_AvARYLEN(aTHX_ a)
   #define macro_AvFILLp(a)	Perl_macro_AvFILLp(aTHX_ a)
   #define macro_AvMAX(a)		Perl_macro_AvMAX(aTHX_ a)
   #define macro_SvPVX(a)		Perl_macro_SvPVX(aTHX_ a)
  +#define macro_SvIVX(a)		Perl_macro_SvIVX(aTHX_ a)
  +#define macro_SvNVX(a)		Perl_macro_SvNVX(aTHX_ a)
  +#define macro_SvUVX(a)		Perl_macro_SvUVX(aTHX_ a)
   #define macro_LvTYPE(a)		Perl_macro_LvTYPE(aTHX_ a)
   #define macro_LvTARG(a)		Perl_macro_LvTARG(aTHX_ a)
   #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
  
  
  
  1.6       +4 -0      ponie/perl/global.sym
  
  Index: global.sym
  ===================================================================
  RCS file: /cvs/public/ponie/perl/global.sym,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- global.sym	20 Feb 2004 09:45:56 -0000	1.5
  +++ global.sym	25 Feb 2004 16:08:15 -0000	1.6
  @@ -628,12 +628,16 @@
   Perl_sv_nolocking
   Perl_sv_nounlocking
   Perl_nothreadhook
  +Perl_macro_AvARRAY
   Perl_macro_AvFLAGS
   Perl_macro_AvALLOC
   Perl_macro_AvARYLEN
   Perl_macro_AvFILLp
   Perl_macro_AvMAX
   Perl_macro_SvPVX
  +Perl_macro_SvIVX
  +Perl_macro_SvNVX
  +Perl_macro_SvUVX
   Perl_macro_LvTYPE
   Perl_macro_LvTARG
   Perl_Slab_Alloc
  
  
  
  1.6       +4 -1      ponie/perl/proto.h
  
  Index: proto.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/proto.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- proto.h	20 Feb 2004 09:45:56 -0000	1.5
  +++ proto.h	25 Feb 2004 16:08:15 -0000	1.6
  @@ -926,13 +926,16 @@
   PERL_CALLCONV int	Perl_nothreadhook(pTHX);
   
   
  -
  +PERL_CALLCONV SV***	Perl_macro_AvARRAY(pTHX_ AV *);
   PERL_CALLCONV U8*	Perl_macro_AvFLAGS(pTHX_ AV *);
   PERL_CALLCONV SV***	Perl_macro_AvALLOC(pTHX_ AV *);
   PERL_CALLCONV SV**	Perl_macro_AvARYLEN(pTHX_ AV *);
   PERL_CALLCONV SSize_t*	Perl_macro_AvFILLp(pTHX_ AV *);
   PERL_CALLCONV SSize_t*	Perl_macro_AvMAX(pTHX_ AV *);
   PERL_CALLCONV char**	Perl_macro_SvPVX(pTHX_ SV *);
  +PERL_CALLCONV IV*	Perl_macro_SvIVX(pTHX_ SV *);
  +PERL_CALLCONV NV*	Perl_macro_SvNVX(pTHX_ SV *);
  +PERL_CALLCONV UV*	Perl_macro_SvUVX(pTHX_ SV *);
   PERL_CALLCONV char**	Perl_macro_LvTYPE(pTHX_ SV *);
   PERL_CALLCONV SV**	Perl_macro_LvTARG(pTHX_ SV *);
   
  
  
  
  1.7       +32 -3     ponie/perl/sv.c
  
  Index: sv.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -w -r1.6 -r1.7
  --- sv.c	20 Feb 2004 09:45:56 -0000	1.6
  +++ sv.c	25 Feb 2004 16:08:15 -0000	1.7
  @@ -195,6 +195,7 @@
       SvANY(sv) = 0;
       SvREFCNT(sv) = 1;
       SvFLAGS(sv) = 0;
  +    SvPMC_off(sv);
       return sv;
   }
   #  define new_SV(p) (p)=S_new_SV(aTHX)
  @@ -211,6 +212,7 @@
   	SvANY(p) = 0;					\
   	SvREFCNT(p) = 1;				\
   	SvFLAGS(p) = 0;					\
  +        SvPMC_off(p);                                   \
       } STMT_END
   #endif
   
  @@ -1263,6 +1265,32 @@
   #define new_XPVIO()	my_safemalloc(sizeof(XPVIO))
   #define del_XPVIO(p)	my_safefree(p)
   
  +UV* Perl_macro_SvUVX (pTHX_ SV *sv) {
  +  if(SvPMC(sv)) {
  +    XPVUV* data = (XPVUV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(sv));
  +    return &(data->xuv_uv);
  +  }
  +  return &((XPVUV*)SvANY(sv))->xuv_uv;
  +}
  +
  +
  +NV* Perl_macro_SvNVX (pTHX_ SV *sv) {
  +  if(SvPMC(sv)) {
  +    XPVNV* data = (XPVNV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(sv));
  +    return &(data->xnv_nv);
  +  }
  +  return &((XPVNV*)SvANY(sv))->xnv_nv;
  +}
  +
  +
  +IV* Perl_macro_SvIVX (pTHX_ SV *sv) {
  +  if(SvPMC(sv)) {
  +    XPVIV* data = (XPVIV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(sv));
  +    return &(data->xiv_iv);
  +  }
  +  return &((XPVIV*)SvANY(sv))->xiv_iv;
  +}
  +
   
   char** Perl_macro_SvPVX (pTHX_ SV *sv) {
     if(SvPMC(sv)) {
  @@ -1487,12 +1515,13 @@
   	SvPMC_on(sv);
   	if (pv)
   	    Safefree(pv);
  +	SvPVX(sv)       =  0;
   	AvMAX(sv)	= -1;
   	AvFILLp(sv)	= -1;
  -	/*	SvIVX(sv)	= 0;
  +     	SvIVX(sv)	= 0;
   	SvNVX(sv)	= 0.0;
  -	SvMAGIC(sv)	= magic;
  -	SvSTASH(sv)	= stash; */
  +	//SvMAGIC(sv)	= magic;
  +		//SvSTASH(sv)	= stash; 
   	AvALLOC(sv)	= 0;
   	AvARYLEN(sv)	= 0;
   	AvFLAGS(sv)	= 0; 
  
  
  
  1.6       +4 -3      ponie/perl/sv.h
  
  Index: sv.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- sv.h	7 Jan 2004 14:13:59 -0000	1.5
  +++ sv.h	25 Feb 2004 16:08:15 -0000	1.6
  @@ -737,11 +737,12 @@
   #define SvRV(sv) ((XRV*)  SvANY(sv))->xrv_rv
   #define SvRVx(sv) SvRV(sv)
   
  -#define SvIVX(sv) ((XPVIV*)  SvANY(sv))->xiv_iv
  +#define SvIVX(sv) (* Perl_macro_SvIVX(aTHX_ (SV*) sv))
  +#define SvUVX(sv) (* Perl_macro_SvUVX(aTHX_ (SV*) sv))
  +#define SvNVX(sv) (* Perl_macro_SvNVX(aTHX_ (SV*) sv))
  +
   #define SvIVXx(sv) SvIVX(sv)
  -#define SvUVX(sv) ((XPVUV*)  SvANY(sv))->xuv_uv
   #define SvUVXx(sv) SvUVX(sv)
  -#define SvNVX(sv)  ((XPVNV*)SvANY(sv))->xnv_nv
   #define SvNVXx(sv) SvNVX(sv)
   
   #define SvPVX(sv)   (* Perl_macro_SvPVX(aTHX_ (SV*) sv))
  
  
  
  1.2       +2 -3      ponie/src/pmc/perl5av.pmc
  
  Index: perl5av.pmc
  ===================================================================
  RCS file: /cvs/public/ponie/src/pmc/perl5av.pmc,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -w -r1.1 -r1.2
  --- perl5av.pmc	24 Feb 2004 12:01:18 -0000	1.1
  +++ perl5av.pmc	25 Feb 2004 16:08:15 -0000	1.2
  @@ -1,7 +1,7 @@
   /* Perl5AV.pmc
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perl5av.pmc,v 1.1 2004/02/24 12:01:18 sky Exp $
  + *     $Id: perl5av.pmc,v 1.2 2004/02/25 16:08:15 sky Exp $
    *  Overview:
    *     These are the vtable functions for the Perl5AV base class
    *  Data Structure and Algorithms:
  @@ -20,10 +20,9 @@
   pmclass Perl5AV need_ext {
   
       void init () {	
  -	printf("INIT AV");
   	PMC_data(SELF) = malloc(sizeof(struct xpvav));
  -	printf("INIT AV");
       }
  +
   
       void init_pmc (PMC* initializer) {
   	abort();