diff options
author | Father Chrysostomos <sprout@cpan.org> | 2014-12-08 22:16:05 -0800 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2014-12-09 05:42:47 -0800 |
commit | 74a9453a18ff8c4f52f48455c0b4a622e295160a (patch) | |
tree | 6e0a72fffa3adb7acf65da151f5f66a8626a6b3f /pad.c | |
parent | a70f21d0d169a526a6bafd2465e01e1ca8d16234 (diff) | |
download | perl-74a9453a18ff8c4f52f48455c0b4a622e295160a.tar.gz |
Unify format and named-sub pad weakref code
Diffstat (limited to 'pad.c')
-rw-r--r-- | pad.c | 12 |
1 files changed, 3 insertions, 9 deletions
@@ -801,6 +801,7 @@ Perl_pad_add_anon(pTHX_ CV* func, I32 optype) PADNAME * const name = newPADNAMEpvn("&", 1); PERL_ARGS_ASSERT_PAD_ADD_ANON; + assert (SvTYPE(func) == SVt_PVCV); pad_peg("add_anon"); /* These two aren't used; just make sure they're not equal to @@ -810,18 +811,11 @@ Perl_pad_add_anon(pTHX_ CV* func, I32 optype) ix = pad_alloc(optype, SVs_PADMY); padnamelist_store(PL_comppad_name, ix, name); /* XXX DAPM use PL_curpad[] ? */ - if (SvTYPE(func) == SVt_PVCV || !CvOUTSIDE(func)) - av_store(PL_comppad, ix, (SV*)func); - else { - SV *rv = newRV_noinc((SV *)func); - sv_rvweaken(rv); - assert (SvTYPE(func) == SVt_PVFM); - av_store(PL_comppad, ix, rv); - } + av_store(PL_comppad, ix, (SV*)func); /* to avoid ref loops, we never have parent + child referencing each * other simultaneously */ - if (CvOUTSIDE(func) && SvTYPE(func) == SVt_PVCV) { + if (CvOUTSIDE(func)) { assert(!CvWEAKOUTSIDE(func)); CvWEAKOUTSIDE_on(func); SvREFCNT_dec_NN(CvOUTSIDE(func)); |