develooper Front page | perl.perl5.changes | Postings from February 2018

[perl.git] branch blead updated. v5.27.8-149-g1e2cfe157c

From:
Father Chrysostomos
Date:
February 4, 2018 20:22
Subject:
[perl.git] branch blead updated. v5.27.8-149-g1e2cfe157c
Message ID:
E1eiQnx-0000vl-Qy@git.dc.perl.space
In perl.git, the branch blead has been updated

<https://perl5.git.perl.org/perl.git/commitdiff/1e2cfe157cae98578de3c274bc64b8ea032b91e0?hp=2ea7b253ec46e8acd1ff2b09220c60eed34cd337>

- Log -----------------------------------------------------------------
commit 1e2cfe157cae98578de3c274bc64b8ea032b91e0
Author: Father Chrysostomos <sprout@cpan.org>
Date:   Sun Feb 4 11:13:56 2018 -0800

    Disable CV-in-stash optimization
    
    outside of the main package.
    
    Instead of actually reverting to the previous logic that excluded
    packages other that main as a side effect of the logic being
    faulty, this time I am checking for the main package explicitly.

-----------------------------------------------------------------------

Summary of changes:
 op.c       | 3 +++
 t/op/sub.t | 1 +
 2 files changed, 4 insertions(+)

diff --git a/op.c b/op.c
index 373822a349..c6f228b2e0 100644
--- a/op.c
+++ b/op.c
@@ -9847,9 +9847,12 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
 	   Also, we may be called from load_module at run time, so
 	   PL_curstash (which sets CvSTASH) may not point to the stash the
 	   sub is stored in.  */
+	/* XXX This optimization is currently disabled for packages other
+	       than main, since there was too much CPAN breakage.  */
 	const I32 flags =
 	   ec ? GV_NOADD_NOINIT
 	      :   (IN_PERL_RUNTIME && PL_curstash != CopSTASH(PL_curcop))
+	       || PL_curstash != PL_defstash
 	       || memchr(name, ':', namlen) || memchr(name, '\'', namlen)
 		    ? gv_fetch_flags
 		    : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL;
diff --git a/t/op/sub.t b/t/op/sub.t
index 5de358ebf3..c8bf72d680 100644
--- a/t/op/sub.t
+++ b/t/op/sub.t
@@ -399,6 +399,7 @@ is ref($main::{rt_129916}), 'CODE', 'simple sub stored as CV in stash (main::)';
     sub foo { 42 }
 }
 {
+    local $::TODO = "disabled for now";
     is ref($RT129916::{foo}), 'CODE', 'simple sub stored as CV in stash (non-main::)';
 }
 

-- 
Perl5 Master Repository



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About