summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embedvar.h6
-rw-r--r--gv.c10
-rw-r--r--interp.sym1
-rw-r--r--intrpvar.h1
-rw-r--r--perlvars.h1
5 files changed, 6 insertions, 13 deletions
diff --git a/embedvar.h b/embedvar.h
index 0822ff2b4e..e0c09203e8 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -241,7 +241,6 @@
#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)
@@ -417,7 +416,6 @@
#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
@@ -655,7 +653,6 @@
#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
@@ -883,6 +880,7 @@
#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)
@@ -993,6 +991,7 @@
#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
@@ -1103,6 +1102,7 @@
#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 816caabcef..07c0b19b6f 100644
--- 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;
- }
}
}
diff --git a/interp.sym b/interp.sym
index 6270324e90..e491d05148 100644
--- a/interp.sym
+++ b/interp.sym
@@ -184,7 +184,6 @@ statusvalue_vms
stdingv
strchop
strtab
-sub_generation
sublex_info
sv_count
sv_objcount
diff --git a/intrpvar.h b/intrpvar.h
index 9c105b22dd..c81a99a7a1 100644
--- a/intrpvar.h
+++ b/intrpvar.h
@@ -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 */
diff --git a/perlvars.h b/perlvars.h
index 4e9d3b8689..115ec5a864 100644
--- a/perlvars.h
+++ b/perlvars.h
@@ -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 */