The temporary SV created in Perl_save_helem_flags() to store the key
Nicholas Clark [Mon, 1 Dec 2008 22:17:55 +0000 (22:17 +0000)]
can be freed immediately after it is used, as it is unrelated to
anything else. This folds SvREFCNT_dec()s on two code paths into one.

p4raw-id: //depot/perl@34973

scope.c

diff --git a/scope.c b/scope.c
index 78d796b..1e06671 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -902,19 +902,18 @@ Perl_leave_scope(pTHX_ I32 base)
            sv = MUTABLE_SV(SSPOPPTR);
            hv = MUTABLE_HV(SSPOPPTR);
            ptr = hv_fetch_ent(hv, sv, 1, 0);
+           SvREFCNT_dec(sv);
            if (ptr) {
                const SV * const oval = HeVAL((HE*)ptr);
                if (oval && oval != &PL_sv_undef) {
                    ptr = &HeVAL((HE*)ptr);
                    if (SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
                        SvREFCNT_inc_void(*(SV**)ptr);
-                   SvREFCNT_dec(sv);
                    av = MUTABLE_AV(hv); /* what to refcnt_dec */
                    goto restore_sv;
                }
            }
            SvREFCNT_dec(hv);
-           SvREFCNT_dec(sv);
            SvREFCNT_dec(value);
            break;
        case SAVEt_OP: