summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2015-08-11 16:21:07 +0100
committerDavid Mitchell <davem@iabyn.com>2015-08-17 11:16:23 +0100
commit71afaecef1b2593c92e9603a00232b189f376700 (patch)
treebba6044a7f3f2ad5114eced0a7edb0806dbc8c89
parent90ce4d0578578878b213fa81e151eead287da29e (diff)
downloadperl-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.c2
-rw-r--r--embed.fnc1
-rw-r--r--embed.h1
-rw-r--r--embedvar.h1
-rw-r--r--ext/B/t/b.t6
-rw-r--r--gv.h6
-rw-r--r--intrpvar.h3
-rw-r--r--pp_ctl.c1
-rw-r--r--pp_hot.c6
-rw-r--r--proto.h3
-rw-r--r--scope.c28
-rw-r--r--scope.h2
-rw-r--r--sv.c21
13 files changed, 3 insertions, 78 deletions
diff --git a/dump.c b/dump.c
index 7369a9a5ca..778e34507c 100644
--- a/dump.c
+++ b/dump.c
@@ -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));
diff --git a/embed.fnc b/embed.fnc
index 74011e0442..12c0551963 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -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
diff --git a/embed.h b/embed.h
index c03c0f5fc6..0611ea9327 100644
--- a/embed.h
+++ b/embed.h
@@ -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()");
diff --git a/gv.h b/gv.h
index a6bb749443..69414ec2c8 100644
--- a/gv.h
+++ b/gv.h
@@ -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 */
diff --git a/pp_ctl.c b/pp_ctl.c
index cc6a55f76e..5b58f47684 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -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;
diff --git a/pp_hot.c b/pp_hot.c
index b32a7063d6..a6c65c24f3 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -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;
}
diff --git a/proto.h b/proto.h
index 5b960a239c..a3bd488b44 100644
--- a/proto.h
+++ b/proto.h
@@ -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 \
diff --git a/scope.c b/scope.c
index 5699d7cbd7..9768c30734 100644
--- a/scope.c
+++ b/scope.c
@@ -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);
}
diff --git a/scope.h b/scope.h
index 97ef3faa91..0de5b7777a 100644
--- a/scope.h
+++ b/scope.h
@@ -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
diff --git a/sv.c b/sv.c
index 79d2719da8..cd1bbf528e 100644
--- a/sv.c
+++ b/sv.c
@@ -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