summaryrefslogtreecommitdiff
path: root/pad.c
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2014-12-08 22:16:05 -0800
committerFather Chrysostomos <sprout@cpan.org>2014-12-09 05:42:47 -0800
commit74a9453a18ff8c4f52f48455c0b4a622e295160a (patch)
tree6e0a72fffa3adb7acf65da151f5f66a8626a6b3f /pad.c
parenta70f21d0d169a526a6bafd2465e01e1ca8d16234 (diff)
downloadperl-74a9453a18ff8c4f52f48455c0b4a622e295160a.tar.gz
Unify format and named-sub pad weakref code
Diffstat (limited to 'pad.c')
-rw-r--r--pad.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/pad.c b/pad.c
index b8fcf676f8..10e957afec 100644
--- a/pad.c
+++ b/pad.c
@@ -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));