Re: [PATCH] more anonymous stash cleanups
Abhijit Menon-Sen [Mon, 18 Jun 2001 15:50:32 +0000 (20:50 +0530)]
Message-ID: <20010618155032.A13223@lustre.linux.in>

Plus the comment left in as suggested by NI-S.

p4raw-id: //depot/perl@10680

sv.c

diff --git a/sv.c b/sv.c
index 4352fd4..84c778c 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -8159,9 +8159,7 @@ Perl_sv_dup(pTHX_ SV *sstr)
        }
        HvPMROOT((HV*)dstr)     = HvPMROOT((HV*)sstr);          /* XXX */
        HvNAME((HV*)dstr)       = SAVEPV(HvNAME((HV*)sstr));
-        /* If HvNAME() is set hv _may_ be a stash 
-           - record it for possible callback 
-         */
+    /* Record stashes for possible cloning in Perl_clone_using(). */
        if(HvNAME((HV*)dstr))
            av_push(PL_clone_callbacks, dstr);
        break;
@@ -9310,27 +9308,23 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
         PL_ptr_table = NULL;
     }
     
-    /* For the (possible) stashes identified above 
-         - check that they are stashes
-         - if they are see if the ->CLONE method is defined
-         - if it is call it 
-     */
+    /* Call the ->CLONE method, if it exists, for each of the stashes
+       identified by sv_dup() above.
+    */
     while(av_len(PL_clone_callbacks) != -1) {
         HV* stash = (HV*) av_shift(PL_clone_callbacks);
-        if (gv_stashpv(HvNAME(stash),0)) {
-            GV* cloner = gv_fetchmethod_autoload(stash,"CLONE",0);
-            if (cloner && GvCV(cloner)) {
-                dSP;
-                ENTER;
-                SAVETMPS;
-                PUSHMARK(SP);
-                XPUSHs(newSVpv(HvNAME(stash),0));
-                PUTBACK;
-                call_sv((SV*)GvCV(cloner), G_DISCARD);
-                FREETMPS;
-                LEAVE;
-            }
-        }
+       GV* cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
+       if (cloner && GvCV(cloner)) {
+           dSP;
+           ENTER;
+           SAVETMPS;
+           PUSHMARK(SP);
+           XPUSHs(newSVpv(HvNAME(stash), 0));
+           PUTBACK;
+           call_sv((SV*)GvCV(cloner), G_DISCARD);
+           FREETMPS;
+           LEAVE;
+       }
     }
 
 #ifdef PERL_OBJECT