We can now sv_upgrade(sv, SVt_PVHV), so do so, to simplify the code.
Nicholas Clark [Thu, 3 Jan 2008 16:27:13 +0000 (16:27 +0000)]
p4raw-id: //depot/perl@32815

mro.c

diff --git a/mro.c b/mro.c
index 5f9bcfe..f4014a8 100644 (file)
--- a/mro.c
+++ b/mro.c
@@ -554,19 +554,12 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash)
         HE *he = hv_fetch_ent(PL_isarev, sv, TRUE, 0);
 
        /* That fetch should not fail.  But if it had to create a new SV for
-          us, then we can detect it, because it will not be the correct type.
-          Probably faster and cleaner for us to free that scalar [very little
-          code actually executed to free it] and create a new HV than to
-          copy&paste [SIN!] the code from newHV() to allow us to upgrade the
-          new SV from SVt_NULL.  */
+          us, then will need to upgrade it to an HV (which sv_upgrade() can
+          now do for us. */
 
         mroisarev = (HV*)HeVAL(he);
 
-       if(SvTYPE(mroisarev) != SVt_PVHV) {
-           SvREFCNT_dec(mroisarev);
-           mroisarev = newHV();
-           HeVAL(he) = (SV *)mroisarev;
-        }
+       SvUPGRADE((SV*)mroisarev, SVt_PVHV);
 
        /* This hash only ever contains PL_sv_yes. Storing it over itself is
           almost as cheap as calling hv_exists, so on aggregate we expect to