diff options
author | David Mitchell <davem@iabyn.com> | 2015-08-11 16:21:07 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2015-08-17 11:16:23 +0100 |
commit | 71afaecef1b2593c92e9603a00232b189f376700 (patch) | |
tree | bba6044a7f3f2ad5114eced0a7edb0806dbc8c89 | |
parent | 90ce4d0578578878b213fa81e151eead287da29e (diff) | |
download | perl-71afaecef1b2593c92e9603a00232b189f376700.tar.gz |
Eliminate PL_sawalias, GPf_ALIASED_SV
These two commits:
v5.21.3-759-gff2a62e "Skip no-common-vars optimisation for aliases"
v5.21.4-210-gc997e36 "Make list assignment respect foreach aliasing"
added a run-time mechanism to detect aliased package variables,
by either "*pkg = ...," or "for $pkg (...)", and used that information
to enable the OPpASSIGN_COMMON mechanism at runtime for detecting common
elements in a list assign, e.g.
for $alias ($a, ...) {
($a,$b) = (1,$alias);
}
The previous commit but one changed the OPpASSIGN_COMMON mechanism such
that it no longer uses PL_sawalias. So this var and the mechanism for
setting it can now be removed.
This commit removes:
* the PL_sawalias variable
* the GPf_ALIASED_SV GP flag
* the SAVEt_GP_ALIASED_SV and save_aliased_sv() save type.
-rw-r--r-- | dump.c | 2 | ||||
-rw-r--r-- | embed.fnc | 1 | ||||
-rw-r--r-- | embed.h | 1 | ||||
-rw-r--r-- | embedvar.h | 1 | ||||
-rw-r--r-- | ext/B/t/b.t | 6 | ||||
-rw-r--r-- | gv.h | 6 | ||||
-rw-r--r-- | intrpvar.h | 3 | ||||
-rw-r--r-- | pp_ctl.c | 1 | ||||
-rw-r--r-- | pp_hot.c | 6 | ||||
-rw-r--r-- | proto.h | 3 | ||||
-rw-r--r-- | scope.c | 28 | ||||
-rw-r--r-- | scope.h | 2 | ||||
-rw-r--r-- | sv.c | 21 |
13 files changed, 3 insertions, 78 deletions
@@ -2032,7 +2032,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo Perl_dump_indent(aTHX_ level, file, " GPFLAGS = 0x%"UVxf " (%s)\n", (UV)GvGPFLAGS(sv), - GvALIASED_SV(sv) ? "ALIASED_SV" : ""); + ""); Perl_dump_indent(aTHX_ level, file, " LINE = %"IVdf"\n", (IV)GvLINE(sv)); Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", GvFILE(sv)); do_gv_dump (level, file, " EGV", GvEGV(sv)); @@ -1257,7 +1257,6 @@ Ap |void |savestack_grow_cnt |I32 need Amp |void |save_aelem |NN AV* av|SSize_t idx|NN SV **sptr Ap |void |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \ |const U32 flags -p |void |save_aliased_sv|NN GV* gv Ap |I32 |save_alloc |I32 size|I32 pad Ap |void |save_aptr |NN AV** aptr Ap |AV* |save_ary |NN GV* gv @@ -1304,7 +1304,6 @@ #define rsignal_restore(a,b) Perl_rsignal_restore(aTHX_ a,b) #define rsignal_save(a,b,c) Perl_rsignal_save(aTHX_ a,b,c) #define rxres_save(a,b) Perl_rxres_save(aTHX_ a,b) -#define save_aliased_sv(a) Perl_save_aliased_sv(aTHX_ a) #define save_strlen(a) Perl_save_strlen(aTHX_ a) #define sawparens(a) Perl_sawparens(aTHX_ a) #define scalar(a) Perl_scalar(aTHX_ a) diff --git a/embedvar.h b/embedvar.h index 9ed30e02df..c6213c090f 100644 --- a/embedvar.h +++ b/embedvar.h @@ -270,7 +270,6 @@ #define PL_savestack (vTHX->Isavestack) #define PL_savestack_ix (vTHX->Isavestack_ix) #define PL_savestack_max (vTHX->Isavestack_max) -#define PL_sawalias (vTHX->Isawalias) #ifndef PL_sawampersand #define PL_sawampersand (vTHX->Isawampersand) #endif diff --git a/ext/B/t/b.t b/ext/B/t/b.t index 1420f91fcf..4638c3e577 100644 --- a/ext/B/t/b.t +++ b/ext/B/t/b.t @@ -209,12 +209,6 @@ is($gv_ref->SAFENAME(), "gv", "Test SAFENAME()"); like($gv_ref->FILE(), qr/b\.t$/, "Testing FILE()"); is($gv_ref->SvTYPE(), B::SVt_PVGV, "Test SvTYPE()"); is($gv_ref->FLAGS() & B::SVTYPEMASK, B::SVt_PVGV, "Test SVTYPEMASK"); -is($gv_ref->GPFLAGS & B::GPf_ALIASED_SV, 0, 'GPFLAGS are unset'); -{ - local *gv = \my $x; - is($gv_ref->GPFLAGS & B::GPf_ALIASED_SV, B::GPf_ALIASED_SV, - 'GPFLAGS gets GPf_ALIASED_SV set'); -} # The following return B::SPECIALs. is(ref B::sv_yes(), "B::SPECIAL", "B::sv_yes()"); @@ -198,12 +198,6 @@ Return the CV from the GV. #define GvIMPORTED_CV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_CV) #define GvIMPORTED_CV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_CV) -#define GPf_ALIASED_SV 1 - -#define GvALIASED_SV(gv) (GvGPFLAGS(gv) & GPf_ALIASED_SV) -#define GvALIASED_SV_on(gv) (GvGPFLAGS(gv) |= GPf_ALIASED_SV) -#define GvALIASED_SV_off(gv) (GvGPFLAGS(gv) &= ~GPf_ALIASED_SV) - #ifndef PERL_CORE # define GvIN_PAD(gv) 0 # define GvIN_PAD_on(gv) NOOP diff --git a/intrpvar.h b/intrpvar.h index 6ee88b31d2..142542a030 100644 --- a/intrpvar.h +++ b/intrpvar.h @@ -60,9 +60,6 @@ PERLVAR(I, markstack, I32 *) /* stack_sp locations we're PERLVAR(I, markstack_ptr, I32 *) PERLVAR(I, markstack_max, I32 *) -PERLVARI(I, sawalias, bool, FALSE) /* must enable common-vars - pessimisation */ - #ifdef PERL_HASH_RANDOMIZE_KEYS #ifdef USE_PERL_PERTURB_KEYS PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */ @@ -2145,7 +2145,6 @@ PP(pp_enteriter) save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV); *svp = newSV(0); itervar = (void *)gv; - save_aliased_sv(gv); } else { SV * const sv = POPs; @@ -47,7 +47,6 @@ PP(pp_const) PP(pp_nextstate) { PL_curcop = (COP*)PL_op; - PL_sawalias = 0; TAINT_NOT; /* Each statement is presumed innocent */ PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp; FREETMPS; @@ -63,8 +62,6 @@ PP(pp_gvsv) PUSHs(save_scalar(cGVOP_gv)); else PUSHs(GvSVn(cGVOP_gv)); - if (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv)) - PL_sawalias = TRUE; RETURN; } @@ -99,9 +96,6 @@ PP(pp_gv) { dSP; XPUSHs(MUTABLE_SV(cGVOP_gv)); - if (isGV(cGVOP_gv) - && (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv))) - PL_sawalias = TRUE; RETURN; } @@ -2659,9 +2659,6 @@ PERL_CALLCONV void Perl_save_adelete(pTHX_ AV *av, SSize_t key); PERL_CALLCONV void Perl_save_aelem_flags(pTHX_ AV* av, SSize_t idx, SV **sptr, const U32 flags); #define PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS \ assert(av); assert(sptr) -PERL_CALLCONV void Perl_save_aliased_sv(pTHX_ GV* gv); -#define PERL_ARGS_ASSERT_SAVE_ALIASED_SV \ - assert(gv) PERL_CALLCONV I32 Perl_save_alloc(pTHX_ I32 size, I32 pad); PERL_CALLCONV void Perl_save_aptr(pTHX_ AV** aptr); #define PERL_ARGS_ASSERT_SAVE_APTR \ @@ -720,16 +720,6 @@ Perl_save_alloc(pTHX_ I32 size, I32 pad) return start; } -void -Perl_save_aliased_sv(pTHX_ GV *gv) -{ - dSS_ADD; - PERL_ARGS_ASSERT_SAVE_ALIASED_SV; - SS_ADD_PTR(gp_ref(GvGP(gv))); - SS_ADD_UV(SAVEt_GP_ALIASED_SV | cBOOL(GvALIASED_SV(gv)) << 8); - SS_ADD_END(2); -} - #define ARG0_SV MUTABLE_SV(arg0.any_ptr) @@ -1252,24 +1242,6 @@ Perl_leave_scope(pTHX_ I32 base) case SAVEt_READONLY_OFF: SvREADONLY_off(ARG0_SV); break; - case SAVEt_GP_ALIASED_SV: { - /* The GP may have been abandoned, leaving the savestack with - the only remaining reference to it. */ - GP * const gp = (GP *)ARG0_PTR; - if (gp->gp_refcnt == 1) { - GV * const gv = (GV *)sv_2mortal(newSV_type(SVt_PVGV)); - isGV_with_GP_on(gv); - GvGP_set(gv,gp); - gp_free(gv); - isGV_with_GP_off(gv); - } - else { - gp->gp_refcnt--; - if (uv >> 8) gp->gp_flags |= GPf_ALIASED_SV; - else gp->gp_flags &= ~GPf_ALIASED_SV; - } - break; - } default: Perl_croak(aTHX_ "panic: leave_scope inconsistency %u", type); } @@ -21,7 +21,7 @@ /* one arg */ -#define SAVEt_GP_ALIASED_SV 4 +/*** SPARE 4 ***/ #define SAVEt_BOOL 5 #define SAVEt_COMPILE_WARNINGS 6 #define SAVEt_COMPPAD 7 @@ -4119,18 +4119,7 @@ Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr) && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) { GvFLAGS(dstr) |= import_flag; } - if (import_flag == GVf_IMPORTED_SV) { - if (intro) { - save_aliased_sv((GV *)dstr); - } - /* Turn off the flag if sref is not referenced elsewhere, - even by weak refs. (SvRMAGICAL is a pessimistic check for - back refs.) */ - if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref)) - GvALIASED_SV_off(dstr); - else - GvALIASED_SV_on(dstr); - } + if (stype == SVt_PVHV) { const char * const name = GvNAME((GV*)dstr); const STRLEN len = GvNAMELEN(dstr); @@ -14163,13 +14152,6 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param) ptr = POPPTR(ss,ix); TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param); break; - case SAVEt_GP_ALIASED_SV: { - GP * gp_ptr = (GP *)POPPTR(ss,ix); - GP * new_gp_ptr = gp_dup(gp_ptr, param); - TOPPTR(nss,ix) = new_gp_ptr; - new_gp_ptr->gp_refcnt++; - break; - } default: Perl_croak(aTHX_ "panic: ss_dup inconsistency (%"IVdf")", (IV) type); @@ -14404,7 +14386,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, PL_minus_F = proto_perl->Iminus_F; PL_doswitches = proto_perl->Idoswitches; PL_dowarn = proto_perl->Idowarn; - PL_sawalias = proto_perl->Isawalias; #ifdef PERL_SAWAMPERSAND PL_sawampersand = proto_perl->Isawampersand; #endif |