in reply to where is sv_setrv?
According to newSVrv, it's
SV_CHECK_THINKFIRST_COW_DROP(rv); (void)SvAMAGIC_off(rv); if (SvTYPE(rv) >= SVt_PVMG) { const U32 refcnt = SvREFCNT(rv); SvREFCNT(rv) = 0; sv_clear(rv); SvFLAGS(rv) = 0; SvREFCNT(rv) = refcnt; sv_upgrade(rv, SVt_IV); } else if (SvROK(rv)) { SvREFCNT_dec(SvRV(rv)); } else if (SvTYPE(rv) < SVt_PV && SvTYPE(rv) != SVt_IV) { sv_upgrade(rv, SVt_IV); } else if (SvTYPE(rv) >= SVt_PV) { SvPV_free(rv); SvLEN_set(rv, 0); SvCUR_set(rv, 0); } SvOK_off(rv); SvRV_set(rv, sv); SvROK_on(rv); SvREFCNT_inc(sv); SvSETMAGIC(rv);
Or you could use
sv_replace(rv, newRV_inc(sv)) SvSETMAGIC(rv);
Update: Fixed ref count as per reply.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: where is sv_setrv?
by patcat88 (Deacon) on Dec 17, 2011 at 16:55 UTC | |
by ikegami (Patriarch) on Dec 19, 2011 at 07:20 UTC | |
by patcat88 (Deacon) on Dec 20, 2011 at 16:49 UTC | |
by ikegami (Patriarch) on Dec 20, 2011 at 21:27 UTC |