From 36fa4a92fa2e187f9965ef5bcea070fe4a0025fd Mon Sep 17 00:00:00 2001 From: Gurusamy Sarathy Date: Wed, 8 Jul 1998 08:55:03 +0000 Subject: [PATCH] change#1350 breaks things, back it out p4raw-link: @1350 on //depot/perl: a4bb25971c379e48da873823e220bdef09e90ab9 p4raw-id: //depot/perl@1376 --- embedvar.h | 6 +++--- gv.c | 10 ++-------- interp.sym | 1 - intrpvar.h | 1 - perlvars.h | 1 + 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/embedvar.h b/embedvar.h index 0822ff2..e0c0920 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 816caab..07c0b19 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 6270324..e491d05 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 9c105b2..c81a99a 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 4e9d3b8..115ec5a 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 */ -- 2.7.4