up patchlevel &c
[p5sagit/p5-mst-13.2.git] / gv.c
diff --git a/gv.c b/gv.c
index 1c4c129..8df41c5 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1,6 +1,6 @@
 /*    gv.c
  *
- *    Copyright (c) 1991-1997, Larry Wall
+ *    Copyright (c) 1991-1999, Larry Wall
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
@@ -50,7 +50,7 @@ gv_IOadd(register GV *gv)
 }
 
 GV *
-gv_fetchfile(char *name)
+gv_fetchfile(const char *name)
 {
     dTHR;
     char smallbuf[256];
@@ -80,7 +80,7 @@ gv_fetchfile(char *name)
 }
 
 void
-gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
+gv_init(GV *gv, HV *stash, const char *name, STRLEN len, int multi)
 {
     dTHR;
     register GP *gp;
@@ -107,7 +107,7 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
     GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
     GvNAME(gv) = savepvn(name, len);
     GvNAMELEN(gv) = len;
-    if (multi)
+    if (multi || doproto)              /* doproto means it _was_ mentioned */
        GvMULTI_on(gv);
     if (doproto) {                     /* Replicate part of newSUB here. */
        SvIOK_off(gv);
@@ -152,7 +152,7 @@ gv_init_sv(GV *gv, I32 sv_type)
 }
 
 GV *
-gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
+gv_fetchmeth(HV *stash, const char *name, STRLEN len, I32 level)
 {
     AV* av;
     GV* topgv;
@@ -273,17 +273,17 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
 }
 
 GV *
-gv_fetchmethod(HV *stash, char *name)
+gv_fetchmethod(HV *stash, const char *name)
 {
     return gv_fetchmethod_autoload(stash, name, TRUE);
 }
 
 GV *
-gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload)
+gv_fetchmethod_autoload(HV *stash, const char *name, I32 autoload)
 {
     dTHR;
-    register char *nend;
-    char *nsplit = 0;
+    register const char *nend;
+    const char *nsplit = 0;
     GV* gv;
     
     for (nend = name; *nend; nend++) {
@@ -293,7 +293,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload)
            nsplit = ++nend;
     }
     if (nsplit) {
-       char *origname = name;
+       const char *origname = name;
        name = nsplit + 1;
        if (*nsplit == ':')
            --nsplit;
@@ -340,7 +340,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload)
 }
 
 GV*
-gv_autoload4(HV *stash, char *name, STRLEN len, I32 method)
+gv_autoload4(HV *stash, const char *name, STRLEN len, I32 method)
 {
     dTHR;
     static char autoload[] = "AUTOLOAD";
@@ -385,13 +385,13 @@ gv_autoload4(HV *stash, char *name, STRLEN len, I32 method)
 }
 
 HV*
-gv_stashpv(char *name, I32 create)
+gv_stashpv(const char *name, I32 create)
 {
     return gv_stashpvn(name, strlen(name), create);
 }
 
 HV*
-gv_stashpvn(char *name, U32 namelen, I32 create)
+gv_stashpvn(const char *name, U32 namelen, I32 create)
 {
     char smallbuf[256];
     char *tmpbuf;
@@ -430,14 +430,14 @@ gv_stashsv(SV *sv, I32 create)
 
 
 GV *
-gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
+gv_fetchpv(const char *nambeg, I32 add, I32 sv_type)
 {
     dTHR;
-    register char *name = nambeg;
+    register const char *name = nambeg;
     register GV *gv = 0;
     GV**gvp;
     I32 len;
-    register char *namend;
+    register const char *namend;
     HV *stash = 0;
     U32 add_gvflags = 0;
 
@@ -621,12 +621,6 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
            IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
        }
        break;
-
-    case 'a':
-    case 'b':
-       if (len == 1)
-           GvMULTI_on(gv);
-       break;
     case 'E':
        if (strnEQ(name, "EXPORT", 6))
            GvMULTI_on(gv);
@@ -641,20 +635,19 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                && AvFILLp(av) == -1)
            {
                char *pname;
-               av_push(av, newSVpv(pname = "NDBM_File",0));
+               av_push(av, newSVpvn(pname = "NDBM_File",9));
                gv_stashpvn(pname, 9, TRUE);
-               av_push(av, newSVpv(pname = "DB_File",0));
+               av_push(av, newSVpvn(pname = "DB_File",7));
                gv_stashpvn(pname, 7, TRUE);
-               av_push(av, newSVpv(pname = "GDBM_File",0));
+               av_push(av, newSVpvn(pname = "GDBM_File",9));
                gv_stashpvn(pname, 9, TRUE);
-               av_push(av, newSVpv(pname = "SDBM_File",0));
+               av_push(av, newSVpvn(pname = "SDBM_File",9));
                gv_stashpvn(pname, 9, TRUE);
-               av_push(av, newSVpv(pname = "ODBM_File",0));
+               av_push(av, newSVpvn(pname = "ODBM_File",9));
                gv_stashpvn(pname, 9, TRUE);
            }
        }
        break;
-#ifdef OVERLOAD
     case 'O':
         if (strEQ(name, "OVERLOAD")) {
             HV* hv = GvHVn(gv);
@@ -662,7 +655,6 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
             hv_magic(hv, gv, 'A');
         }
         break;
-#endif /* OVERLOAD */
     case 'S':
        if (strEQ(name, "SIG")) {
            HV *hv;
@@ -828,7 +820,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
 }
 
 void
-gv_fullname3(SV *sv, GV *gv, char *prefix)
+gv_fullname3(SV *sv, GV *gv, const char *prefix)
 {
     HV *hv = GvSTASH(gv);
     if (!hv) {
@@ -842,7 +834,7 @@ gv_fullname3(SV *sv, GV *gv, char *prefix)
 }
 
 void
-gv_efullname3(SV *sv, GV *gv, char *prefix)
+gv_efullname3(SV *sv, GV *gv, const char *prefix)
 {
     GV *egv = GvEGV(gv);
     if (!egv)
@@ -1005,7 +997,6 @@ register GV *gv;
 }
 #endif                 /* Microport 2.4 hack */
 
-#ifdef OVERLOAD
 /* Updates and caches the CV's */
 
 bool
@@ -1019,6 +1010,7 @@ Gv_AMupdate(HV *stash)
   MAGIC* mg=mg_find((SV*)stash,'c');
   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
   AMT amt;
+  STRLEN n_a;
 
   if (mg && amtp->was_ok_am == PL_amagic_generation
       && amtp->was_ok_sub == PL_sub_generation)
@@ -1066,7 +1058,7 @@ Gv_AMupdate(HV *stash)
             default:
               if (!SvROK(sv)) {
                 if (!SvOK(sv)) break;
-               gv = gv_fetchmethod(stash, SvPV(sv, PL_na));
+               gv = gv_fetchmethod(stash, SvPV(sv, n_a));
                 if (gv) cv = GvCV(gv);
                 break;
               }
@@ -1083,7 +1075,7 @@ Gv_AMupdate(HV *stash)
               break;
             case SVt_PVGV:
               if (!(cv = GvCVu((GV*)sv)))
-                cv = sv_2cv(sv, &stash, &gv, TRUE);
+                cv = sv_2cv(sv, &stash, &gv, FALSE);
               break;
           }
           if (cv) filled=1;
@@ -1127,7 +1119,7 @@ Gv_AMupdate(HV *stash)
                GV *ngv;
                
                DEBUG_o( deb("Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n", 
-                            SvPV(GvSV(gv), PL_na), cp, HvNAME(stash)) );
+                            SvPV(GvSV(gv), n_a), cp, HvNAME(stash)) );
                if (!SvPOK(GvSV(gv)) 
                    || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
                                                       FALSE)))
@@ -1138,7 +1130,7 @@ Gv_AMupdate(HV *stash)
                              (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
                              cp, HvNAME(stash));
                    } else
-                       croak("Cannot resolve method `%.256s' overloading `%s' in package `%.256s'", 
+                       croak("Can't resolve method `%.256s' overloading `%s' in package `%.256s'", 
                              (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
                              cp, HvNAME(stash));
                }
@@ -1482,5 +1474,3 @@ amagic_call(SV *left, SV *right, int method, int flags)
     }
   }
 }
-#endif /* OVERLOAD */
-