cvs commit: ponie/src/pmc perl5cargo_cult.pmc perl5iv.pmc perl5null.pmc perl5nv.pmc perl5pv.pmc perl5pvav.pmc perl5pvbm.pmc perl5pvcv.pmc perl5pvfm.pmc perl5pvgv.pmc perl5pvhv.pmc perl5pvio.pmc perl5pviv.pmc perl5pvlv.pmc perl5pvmg.pmc perl5pvnv.pmc perl5rv.pmc
[email protected] (Nicholas Clark) 30 Apr 2005 13:10:29 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 05/04/30 06:10:29
Modified: perl sv.c sv.h
src/pmc perl5cargo_cult.pmc perl5iv.pmc perl5null.pmc
perl5nv.pmc perl5pv.pmc perl5pvav.pmc perl5pvbm.pmc
perl5pvcv.pmc perl5pvfm.pmc perl5pvgv.pmc
perl5pvhv.pmc perl5pvio.pmc perl5pviv.pmc
perl5pvlv.pmc perl5pvmg.pmc perl5pvnv.pmc
perl5rv.pmc
Log:
Phase 1 of migrating all the sv_clear functionality into the PMCs
Revision Changes Path
1.69 +2 -64 ponie/perl/sv.c
Index: sv.c
===================================================================
RCS file: /cvs/public/ponie/perl/sv.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- sv.c 30 Apr 2005 09:12:44 -0000 1.68
+++ sv.c 30 Apr 2005 13:10:28 -0000 1.69
@@ -5664,7 +5664,6 @@
void
Perl_sv_clear(pTHX_ register SV *sv)
{
- HV* stash;
assert(sv);
assert(SvREFCNT(sv) == 0);
@@ -5672,8 +5671,7 @@
if (PL_defstash) { /* Still have a symbol table? */
dSP;
CV* destructor;
-
-
+ HV* stash;
do {
stash = SvSTASH(sv);
@@ -5726,7 +5724,6 @@
if (SvFLAGS(sv) & SVpad_TYPED)
SvREFCNT_dec(SvSTASH(sv));
}
- stash = NULL;
switch (SvTYPE(sv)) {
case SVt_PVIO:
if (IoIFP(sv) &&
@@ -5771,7 +5768,6 @@
ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
of stash until current sv is completely gone.
-- JohnPC, 27 Mar 1998 */
- stash = GvSTASH(sv);
/* FALL THROUGH */
case SVt_PVMG:
case SVt_PVNV:
@@ -5824,65 +5820,7 @@
break;
*/
}
-
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- break;
- case SVt_IV:
- case SVt_NV:
- case SVt_RV:
- assert(SvANY(sv) == 0);
- break;
- case SVt_PV:
- del_XPV(SvANY(sv));
- break;
- case SVt_PVIV:
- del_XPVIV(SvANY(sv));
- break;
- case SVt_PVNV:
- del_XPVNV(SvANY(sv));
- break;
- case SVt_PVMG:
- del_XPVMG(SvANY(sv));
- break;
- case SVt_PVLV:
- del_XPVLV(SvANY(sv));
- break;
- case SVt_PVAV:
- del_XPVAV(SvANY(sv));
- break;
- case SVt_PVHV:
- del_XPVHV(SvANY(sv));
- break;
- case SVt_PVCV:
- del_XPVCV(SvANY(sv));
- break;
- case SVt_PVGV:
- del_XPVGV(SvANY(sv));
- /* code duplication for increased performance. */
- Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv),
- Ponie_I_SV_ZERO_FLAGS_SET_TYPE,
- SVTYPEMASK);
- SvBREAK_on(sv);
- /* decrease refcount of the stash that owns this GV, if any */
- SvANY(sv) = (void *) 0xDEAD;
- if (stash)
- SvREFCNT_dec(stash);
- return; /* not break, SvFLAGS reset already happened */
- case SVt_PVBM:
- del_XPVBM(SvANY(sv));
- break;
- case SVt_PVFM:
- del_XPVFM(SvANY(sv));
- break;
- case SVt_PVIO:
- del_XPVIO(SvANY(sv));
- break;
- }
- Parrot_PMC_set_intval_intkey(PL_Parrot,MUMBLE(sv),
- Ponie_I_SV_ZERO_FLAGS_SET_TYPE, SVTYPEMASK);
- SvBREAK_on(sv);
- SvANY(sv) = (void *) 0xDEAD;
+ Parrot_PMC_set_pointer_intkey(PL_Parrot,MUMBLE(sv), Ponie_P_CLEAR, 0);
}
/*
1.72 +2 -0 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- sv.h 30 Apr 2005 08:11:43 -0000 1.71
+++ sv.h 30 Apr 2005 13:10:29 -0000 1.72
@@ -250,6 +250,7 @@
Ponie_P_PVX_0, /* Clear SvPVX pointer */
Ponie_P_GET_UPGRADE, /* Pull data from SvANY and free it */
Ponie_P_SET_UPGRADE, /* Allocate SvANY and push data to it */
+ Ponie_P_CLEAR, /* Free SvANY and things hanging from it */
Ponie_P_UNGLOB, /* Special things for sv_unglob */
Ponie_P_NEWRV_HACK, /* Special things for newSVrv */
Ponie_P_REPLACE, /* Special things for sv_replace */
@@ -261,6 +262,7 @@
Ponie_I_SV_UPGRADE, /* Does the macro version with the < type test. */
Ponie_I_SV_UPGRADE_func, /* Unconditional - direct call to sv_upgrade */
Ponie_I_SV_ZERO_FLAGS_SET_TYPE,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
Ponie_I_SV_FLAGS, /* Read only */
Ponie_I_SVf_BREAK,
Ponie_I_SVp_OK,
1.53 +7 -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.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- perl5cargo_cult.pmc 30 Apr 2005 10:18:59 -0000 1.52
+++ perl5cargo_cult.pmc 30 Apr 2005 13:10:29 -0000 1.53
@@ -704,6 +704,12 @@
((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
= (value & SVTYPEMASK);
return;
+ case Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD:
+ ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
+ = SVTYPEMASK | SVf_BREAK;
+ /*SvANY(sv) = (void *) 0xDEAD;*/
+ ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_any = 0xDEAD;
+ return;
case Ponie_I_SV_UPGRADE:
if ((((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags & SVTYPEMASK) >= value)
return;
1.3 +7 -1 ponie/src/pmc/perl5iv.pmc
Index: perl5iv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5iv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5iv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5iv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -43,6 +43,12 @@
SvIV_set(sv, val->iv);
break;
}
+ case Ponie_P_CLEAR:
+ assert(SvANY(MUMBLE(SELF)) == 0);
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
default:
SUPER(key, value);
}
1.3 +6 -1 ponie/src/pmc/perl5null.pmc
Index: perl5null.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5null.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5null.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5null.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -24,6 +24,11 @@
case Ponie_P_SET_UPGRADE:
Perl_croak(aTHX_ "Can't upgrade to undef");
break;
+ case Ponie_P_CLEAR:
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
default:
SUPER(key, value);
}
1.3 +7 -1 ponie/src/pmc/perl5nv.pmc
Index: perl5nv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5nv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5nv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5nv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -41,6 +41,12 @@
SvNV_set(sv, val->nv);
break;
}
+ case Ponie_P_CLEAR:
+ assert(SvANY(MUMBLE(SELF)) == 0);
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
default:
SUPER(key, value);
}
1.3 +11 -1 ponie/src/pmc/perl5pv.pmc
Index: perl5pv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5pv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5pv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -65,6 +65,16 @@
SvLEN_set(sv, val->len);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.3 +11 -1 ponie/src/pmc/perl5pvav.pmc
Index: perl5pvav.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvav.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5pvav.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5pvav.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -43,6 +43,16 @@
AvFLAGS(sv) = AVf_REAL;
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVAV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.3 +11 -1 ponie/src/pmc/perl5pvbm.pmc
Index: perl5pvbm.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvbm.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5pvbm.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5pvbm.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -47,6 +47,16 @@
BmPREVIOUS(sv) = 0;
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVBM(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pvcv.pmc
Index: perl5pvcv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvcv.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvcv.pmc 30 Apr 2005 09:20:19 -0000 1.3
+++ perl5pvcv.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -38,6 +38,16 @@
SvSTASH_set(sv, val->stash);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVCV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pvfm.pmc
Index: perl5pvfm.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvfm.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvfm.pmc 30 Apr 2005 09:20:19 -0000 1.3
+++ perl5pvfm.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -44,6 +44,16 @@
SvSTASH_set(sv, val->stash);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVFM(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +18 -3 ponie/src/pmc/perl5pvgv.pmc
Index: perl5pvgv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvgv.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvgv.pmc 29 Apr 2005 23:47:21 -0000 1.3
+++ perl5pvgv.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -53,9 +53,24 @@
{
SELF->vtable = Parrot_base_vtables[PL_pmcname[SVt_PVMG]];
break;
- default:
- SUPER(key, value);
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+ HV *stash = GvSTASH(sv);
+
+ del_XPVGV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+
+ /* decrease refcount of the stash that owns this GV, if any */
+ if (stash)
+ SvREFCNT_dec(stash);
+ break;
+ }
+ default:
+ SUPER(key, value);
}
}
}
1.3 +11 -1 ponie/src/pmc/perl5pvhv.pmc
Index: perl5pvhv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvhv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5pvhv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5pvhv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -44,6 +44,16 @@
HvNAME(sv) = 0;
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVHV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pvio.pmc
Index: perl5pvio.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvio.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvio.pmc 30 Apr 2005 09:20:19 -0000 1.3
+++ perl5pvio.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -46,6 +46,16 @@
IoPAGE_LEN(sv) = 60;
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVIO(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pviv.pmc
Index: perl5pviv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pviv.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pviv.pmc 29 Apr 2005 23:47:21 -0000 1.3
+++ perl5pviv.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -64,6 +64,16 @@
SvNOK_off(sv);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVIV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.3 +11 -1 ponie/src/pmc/perl5pvlv.pmc
Index: perl5pvlv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvlv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5pvlv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5pvlv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -53,6 +53,16 @@
GvFLAGS(sv) = 0;
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVLV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pvmg.pmc
Index: perl5pvmg.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvmg.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvmg.pmc 29 Apr 2005 23:47:21 -0000 1.3
+++ perl5pvmg.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -68,6 +68,16 @@
SvSTASH_set(sv, val->stash);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVMG(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ }
+ break;
default:
SUPER(key, value);
}
1.4 +11 -1 ponie/src/pmc/perl5pvnv.pmc
Index: perl5pvnv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5pvnv.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- perl5pvnv.pmc 29 Apr 2005 23:47:21 -0000 1.3
+++ perl5pvnv.pmc 30 Apr 2005 13:10:29 -0000 1.4
@@ -63,6 +63,16 @@
SvNV_set(sv, val->nv);
break;
}
+ case Ponie_P_CLEAR:
+ {
+ SV *sv = MUMBLE(SELF);
+
+ del_XPVNV(SvANY(sv));
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
+ }
default:
SUPER(key, value);
}
1.3 +7 -1 ponie/src/pmc/perl5rv.pmc
Index: perl5rv.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5rv.pmc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- perl5rv.pmc 29 Apr 2005 23:47:21 -0000 1.2
+++ perl5rv.pmc 30 Apr 2005 13:10:29 -0000 1.3
@@ -38,6 +38,12 @@
SvRV_set(sv, val->rv);
break;
}
+ case Ponie_P_CLEAR:
+ assert(SvANY(MUMBLE(SELF)) == 0);
+ Parrot_PMC_set_intval_intkey(PL_Parrot,SELF,
+ Ponie_I_SV_ZERO_FLAGS_SET_TYPEMASK_BREAK_DEAD,
+ 0);
+ break;
default:
SUPER(key, value);
}