From c1bf42f3e6ad8f1c3d821a2ae616c5703f66237c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 31 May 2010 13:19:22 +0100 Subject: [PATCH] In Perl_pad_add_name(), use sv_upgrade() directly rather than new[AH]V(). As newAV() and newHV() are now merely wrappers around sv_upgrade(), and the existing SV is always brand new and of type SVt_NULL, call them on it, rather than disposing of it as a side effect of storing a(nother new) SV. Also, no need to set SvPADMY() again, as it is already set. Resolves RT #73092. --- pad.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pad.c b/pad.c index f297e54..477ee0f 100644 --- a/pad.c +++ b/pad.c @@ -420,13 +420,13 @@ Perl_pad_add_name(pTHX_ const char *name, const STRLEN len, const U32 flags, PL_min_intro_pending = offset; PL_max_intro_pending = offset; /* if it's not a simple scalar, replace with an AV or HV */ - /* XXX DAPM since slot has been allocated, replace - * av_store with PL_curpad[offset] ? */ + assert(SvTYPE(PL_curpad[offset]) == SVt_NULL); + assert(SvREFCNT(PL_curpad[offset]) == 1); if (*name == '@') - av_store(PL_comppad, offset, MUTABLE_SV(newAV())); + sv_upgrade(PL_curpad[offset], SVt_PVAV); else if (*name == '%') - av_store(PL_comppad, offset, MUTABLE_SV(newHV())); - SvPADMY_on(PL_curpad[offset]); + sv_upgrade(PL_curpad[offset], SVt_PVHV); + assert(SvPADMY(PL_curpad[offset])); DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad addname: %ld \"%s\" new lex=0x%"UVxf"\n", (long)offset, name, PTR2UV(PL_curpad[offset]))); -- 1.8.3.1