This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make dquote_static.c available to ext/re/
[perl5.git] / gv.c
diff --git a/gv.c b/gv.c
index 72016bf..65c2971 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -121,9 +121,9 @@ Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
 #else
        sv_setpvn(GvSV(gv), name, namelen);
 #endif
-       if (PERLDB_LINE || PERLDB_SAVESRC)
-           hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
     }
+    if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
+           hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
     if (tmpbuf != smallbuf)
        Safefree(tmpbuf);
     return gv;
@@ -963,6 +963,46 @@ Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
 }
 
+STATIC void
+S_gv_magicalize_isa(pTHX_ GV *gv, const char *nambeg, I32 add)
+{
+    AV* av;
+
+    PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
+
+    av = GvAVn(gv);
+    GvMULTI_on(gv);
+    sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
+            NULL, 0);
+    /* NOTE: No support for tied ISA */
+    if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
+       && AvFILLp(av) == -1)
+       {
+           av_push(av, newSVpvs("NDBM_File"));
+           gv_stashpvs("NDBM_File", GV_ADD);
+           av_push(av, newSVpvs("DB_File"));
+           gv_stashpvs("DB_File", GV_ADD);
+           av_push(av, newSVpvs("GDBM_File"));
+           gv_stashpvs("GDBM_File", GV_ADD);
+           av_push(av, newSVpvs("SDBM_File"));
+           gv_stashpvs("SDBM_File", GV_ADD);
+           av_push(av, newSVpvs("ODBM_File"));
+           gv_stashpvs("ODBM_File", GV_ADD);
+       }
+}
+
+STATIC void
+S_gv_magicalize_overload(pTHX_ GV *gv)
+{
+    HV* hv;
+
+    PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD;
+
+    hv = GvHVn(gv);
+    GvMULTI_on(gv);
+    hv_magic(hv, NULL, PERL_MAGIC_overload);
+}
+
 GV *
 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
                       const svtype sv_type)
@@ -1216,35 +1256,11 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
                break;
            case 'I':
                if (strEQ(name2, "SA"))
-               magicalize_isa: {
-                   AV* const av = GvAVn(gv);
-                   GvMULTI_on(gv);
-                   sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
-                            NULL, 0);
-                   /* NOTE: No support for tied ISA */
-                   if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
-                       && AvFILLp(av) == -1)
-                       {
-                           av_push(av, newSVpvs("NDBM_File"));
-                           gv_stashpvs("NDBM_File", GV_ADD);
-                           av_push(av, newSVpvs("DB_File"));
-                           gv_stashpvs("DB_File", GV_ADD);
-                           av_push(av, newSVpvs("GDBM_File"));
-                           gv_stashpvs("GDBM_File", GV_ADD);
-                           av_push(av, newSVpvs("SDBM_File"));
-                           gv_stashpvs("SDBM_File", GV_ADD);
-                           av_push(av, newSVpvs("ODBM_File"));
-                           gv_stashpvs("ODBM_File", GV_ADD);
-                       }
-               }
+                   gv_magicalize_isa(gv, nambeg, add);
                break;
            case 'O':
                if (strEQ(name2, "VERLOAD"))
-               magicalize_overload: {
-                   HV* const hv = GvHVn(gv);
-                   GvMULTI_on(gv);
-                   hv_magic(hv, NULL, PERL_MAGIC_overload);
-               }
+                   gv_magicalize_overload(gv);
                break;
            case 'V':
                if (strEQ(name2, "ERSION"))
@@ -1280,12 +1296,12 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
                break;
            case 'I':
                if (strEQ(name2, "SA")) {
-                   goto magicalize_isa;
+                   gv_magicalize_isa(gv, nambeg, add);
                }
                break;
            case 'O':
                if (strEQ(name2, "VERLOAD")) {
-                   goto magicalize_overload;
+                   gv_magicalize_overload(gv);
                }
                break;
            case 'S':