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();