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: