change#1350 breaks things, back it out
Gurusamy Sarathy [Wed, 8 Jul 1998 08:55:03 +0000 (08:55 +0000)]
p4raw-link: @1350 on //depot/perl: a4bb25971c379e48da873823e220bdef09e90ab9

p4raw-id: //depot/perl@1376

embedvar.h
gv.c
interp.sym
intrpvar.h
perlvars.h

index 0822ff2..e0c0920 100644 (file)
 #define stdingv                        (curinterp->Istdingv)
 #define strchop                        (curinterp->Istrchop)
 #define strtab                 (curinterp->Istrtab)
-#define sub_generation         (curinterp->Isub_generation)
 #define sublex_info            (curinterp->Isublex_info)
 #define sv_arenaroot           (curinterp->Isv_arenaroot)
 #define sv_count               (curinterp->Isv_count)
 #define Istdingv               stdingv
 #define Istrchop               strchop
 #define Istrtab                        strtab
-#define Isub_generation                sub_generation
 #define Isublex_info           sublex_info
 #define Isv_arenaroot          sv_arenaroot
 #define Isv_count              sv_count
 #define stdingv                        Perl_stdingv
 #define strchop                        Perl_strchop
 #define strtab                 Perl_strtab
-#define sub_generation         Perl_sub_generation
 #define sublex_info            Perl_sublex_info
 #define sv_arenaroot           Perl_sv_arenaroot
 #define sv_count               Perl_sv_count
 #define sh_path                        (Perl_Vars.Gsh_path)
 #define sighandlerp            (Perl_Vars.Gsighandlerp)
 #define specialsv_list         (Perl_Vars.Gspecialsv_list)
+#define sub_generation         (Perl_Vars.Gsub_generation)
 #define subline                        (Perl_Vars.Gsubline)
 #define subname                        (Perl_Vars.Gsubname)
 #define sv_mutex               (Perl_Vars.Gsv_mutex)
 #define Gsh_path               sh_path
 #define Gsighandlerp           sighandlerp
 #define Gspecialsv_list                specialsv_list
+#define Gsub_generation                sub_generation
 #define Gsubline               subline
 #define Gsubname               subname
 #define Gsv_mutex              sv_mutex
 #define sh_path                        Perl_sh_path
 #define sighandlerp            Perl_sighandlerp
 #define specialsv_list         Perl_specialsv_list
+#define sub_generation         Perl_sub_generation
 #define subline                        Perl_subline
 #define subname                        Perl_subname
 #define sv_mutex               Perl_sv_mutex
diff --git a/gv.c b/gv.c
index 816caab..07c0b19 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -103,7 +103,6 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
     GvSV(gv) = NEWSV(72,0);
     GvLINE(gv) = curcop->cop_line;
     GvFILEGV(gv) = curcop->cop_filegv;
-    GvCVGEN(gv) = sub_generation - 1;   /* as old as possible */
     GvEGV(gv) = gv;
     sv_magic((SV*)gv, (SV*)gv, '*', name, len);
     GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
@@ -118,6 +117,7 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
        GvCV(gv) = compcv;
        LEAVE;
 
+       GvCVGEN(gv) = 0;
        sub_generation++;
        CvGV(GvCV(gv)) = (GV*)SvREFCNT_inc(gv);
        CvFILEGV(GvCV(gv)) = curcop->cop_filegv;
@@ -176,15 +176,13 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
            gv_init(topgv, stash, name, len, TRUE);
        if (cv = GvCV(topgv)) {
            /* If genuine method or valid cache entry, use it */
-           if (!GvCVGEN(topgv) || GvCVGEN(topgv) == sub_generation)
+           if (!GvCVGEN(topgv) || GvCVGEN(topgv) >= sub_generation)
                return topgv;
            /* Stale cached entry: junk it */
            SvREFCNT_dec(cv);
            GvCV(topgv) = cv = Nullcv;
            GvCVGEN(topgv) = 0;
        }
-       else if (GvCVGEN(topgv) == sub_generation)
-           return 0;  /* cache indicates sub doesn't exist */
     }
 
     gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
@@ -260,10 +258,6 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
                }
                return gv;
            }
-           else if (topgv && GvREFCNT(topgv) == 1) {
-               /* cache the fact that the method is not defined */
-               GvCVGEN(topgv) = sub_generation;
-           }
        }
     }
 
index 6270324..e491d05 100644 (file)
@@ -184,7 +184,6 @@ statusvalue_vms
 stdingv
 strchop
 strtab
-sub_generation
 sublex_info
 sv_count
 sv_objcount
index 9c105b2..c81a99a 100644 (file)
@@ -104,7 +104,6 @@ PERLVAR(Ibeginav,   AV *)           /* names of BEGIN subroutines */
 PERLVAR(Iendav,                AV *)           /* names of END subroutines */
 PERLVAR(Iinitav,       AV *)           /* names of INIT subroutines */
 PERLVAR(Istrtab,       HV *)           /* shared string table */
-PERLVARI(Isub_generation,U32,1)                /* incr to invalidate method cache */
 
 /* memory management */
 PERLVAR(Isv_count,     I32)            /* how many SV* are currently allocated */
index 4e9d3b8..115ec5a 100644 (file)
@@ -50,6 +50,7 @@ PERLVAR(Gan,          U32)            /* malloc sequence number */
 PERLVAR(Gcop_seqmax,   U32)            /* statement sequence number */
 PERLVAR(Gop_seqmax,    U16)            /* op sequence number */
 PERLVAR(Gevalseq,      U32)            /* eval sequence number */
+PERLVAR(Gsub_generation,U32)           /* incr to invalidate method cache */
 PERLVAR(Gorigenviron,  char **)
 PERLVAR(Gorigalen,     U32)
 PERLVAR(Gpidstatus,    HV *)           /* pid-to-status mappings for waitpid */