[Jifty-commit] r5467 - B-Generate/trunk/lib/B
Jifty commits
jifty-commit at lists.jifty.org
Fri May 16 03:15:43 EDT 2008
Author: clkao
Date: Fri May 16 03:15:43 2008
New Revision: 5467
Modified:
B-Generate/trunk/lib/B/Generate.xs
Log:
provide SVOP_new_svrv which deref the sv so we can associate
for example PVCV with an SVOP.
Modified: B-Generate/trunk/lib/B/Generate.xs
==============================================================================
--- B-Generate/trunk/lib/B/Generate.xs (original)
+++ B-Generate/trunk/lib/B/Generate.xs Fri May 16 03:15:43 2008
@@ -394,6 +394,40 @@
return 0; /* Not reached */
}
+/* svop_new */
+
+SV *__svop_new(pTHX_ SV *class, SV *type, I32 flags, SV *sv)
+{
+ dXSARGS;
+ OP *o;
+ SV *result;
+
+ SV **sparepad = PL_curpad;
+ PL_curpad = AvARRAY(PL_comppad);
+ OP *saveop = PL_op;
+ I32 typenum = op_name_to_num(type); /* XXX More classes here! */
+ if (typenum == OP_GVSV) {
+ if (*(SvPV_nolen(sv)) == '$')
+ sv = (SV*)gv_fetchpv(SvPVX(sv)+1, TRUE, SVt_PV);
+ else
+ Perl_croak(aTHX_
+ "First character to GVSV was not dollar");
+ } else
+ if (SvTYPE(sv) != SVt_PVCV) {
+ sv = newSVsv(sv); // copy it unless it's cv
+ }
+ o = newSVOP(typenum, flags, SvREFCNT_inc(sv));
+#ifdef PERL_CUSTOM_OPS
+ if (typenum == OP_CUSTOM)
+ o->op_ppaddr = custom_op_ppaddr(SvPV_nolen(type));
+#endif
+ //PL_curpad = sparepad;
+ result = sv_newmortal();
+ sv_setiv(newSVrv(result, "B::SVOP"), PTR2IV(o));
+ PL_op = saveop;
+ return result;
+}
+
/* Pre-5.7 compatibility */
#ifndef op_clear
void op_clear(OP* o) {
@@ -1133,38 +1167,25 @@
B::SVOP o
void
+SVOP_new_svrv(class, type, flags, sv)
+ SV * class
+ SV * type
+ I32 flags
+ SV * sv
+ CODE:
+ ST(0) = __svop_new(aTHX_ class, type, flags, SvRV(sv));
+
+
+void
SVOP_new(class, type, flags, sv)
SV * class
SV * type
I32 flags
SV * sv
- SV** sparepad = NO_INIT
- OP *o = NO_INIT
- OP *saveop = NO_INIT
- SV* param = NO_INIT
- I32 typenum = NO_INIT
CODE:
- sparepad = PL_curpad;
- PL_curpad = AvARRAY(PL_comppad);
- saveop = PL_op;
- typenum = op_name_to_num(type); /* XXX More classes here! */
- if (typenum == OP_GVSV) {
- if (*(SvPV_nolen(sv)) == '$')
- param = (SV*)gv_fetchpv(SvPVX(sv)+1, TRUE, SVt_PV);
- else
- Perl_croak(aTHX_
- "First character to GVSV was not dollar");
- } else
- param = newSVsv(sv);
- o = newSVOP(typenum, flags, param);
-#ifdef PERL_CUSTOM_OPS
- if (typenum == OP_CUSTOM)
- o->op_ppaddr = custom_op_ppaddr(SvPV_nolen(type));
-#endif
- //PL_curpad = sparepad;
- ST(0) = sv_newmortal();
- sv_setiv(newSVrv(ST(0), "B::SVOP"), PTR2IV(o));
- PL_op = saveop;
+ ST(0) = __svop_new(aTHX_ class, type, flags, sv);
+
+
#define PADOP_padix(o) o->op_padix
#define PADOP_sv(o) (o->op_padix ? PL_curpad[o->op_padix] : Nullsv)
More information about the Jifty-commit
mailing list