Missed FREAD in bytecode.h
[p5sagit/p5-mst-13.2.git] / gv.c
diff --git a/gv.c b/gv.c
index 9ef439b..11dc761 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -426,13 +426,17 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                tmpbuf[len++] = ':';
                tmpbuf[len] = '\0';
                gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
+               gv = gvp ? *gvp : Nullgv;
+               if (gv && gv != (GV*)&sv_undef) {
+                   if (SvTYPE(gv) != SVt_PVGV)
+                       gv_init(gv, stash, tmpbuf, len, (add & 2));
+                   else
+                       GvMULTI_on(gv);
+               }
                if (tmpbuf != autobuf)
                    Safefree(tmpbuf);
-
                if (!gv || gv == (GV*)&sv_undef)
                    return Nullgv;
-               else
-                   gv_init(gv, stash, nambeg, namend - nambeg, (add & 2));
 
                if (!(stash = GvHV(gv)))
                    stash = GvHV(gv) = newHV();