In perl.git, the branch smoke-me/cvgv has been created
<http://perl5.git.perl.org/perl.git/commitdiff/a44c1d12e78aadadfef718facb339f39b88dfe82?hp=0000000000000000000000000000000000000000>
at a44c1d12e78aadadfef718facb339f39b88dfe82 (commit)
- Log -----------------------------------------------------------------
commit a44c1d12e78aadadfef718facb339f39b88dfe82
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 20:26:04 2014 -0700
concise-xs.t needs to know about B::safename
M ext/B/t/concise-xs.t
commit c8458218d721952c424ad841ee407127e49903db
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 14:14:07 2014 -0700
Tweak Peek.t again
M ext/Devel-Peek/t/Peek.t
commit 509be5bf8d4b1b8a711fad7fabbb4607d8df5d60
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 13:40:41 2014 -0700
dump.c: Missing comma from CVf_HASEVAL output
M dump.c
commit c1f206b485d4de62f7098e0fe96968831fb35f2d
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 13:38:42 2014 -0700
Increase $B::Deparse::VERSION to 1.28
M lib/B/Deparse.pm
commit 1dc15a2906c010bcf5726406f9c97743fd1e2f26
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 13:38:23 2014 -0700
Teach Deparse about coderefs in stashes
M lib/B/Deparse.pm
commit 9eaaa93064ca54578afcfbf11a9f57ae5cf3908c
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 13:33:55 2014 -0700
Increase $B::VERSION to 1.51
M ext/B/B.pm
commit 9a79c192b91321e22b2a4e4df9b513826fd6505e
Author: Father Chrysostomos <[email protected]>
Date: Fri Sep 12 13:33:29 2014 -0700
Add safename() func to B
M ext/B/B.pm
M ext/B/t/b.t
commit df5ed70ba308d59107f823069ac4ffbdffcaf5a2
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 23:53:36 2014 -0700
Remove no-longer-used op.c:S_gv_ename
M embed.fnc
M embed.h
M op.c
M proto.h
commit 66c9a265dbe80f8a7fb1c96fd75ca7240c3bc5de
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 23:52:41 2014 -0700
Teach ck_entersub_args_proto about non-GV names
Now ck_subr no longer needs to vivify GVs:
$ ./miniperl -e 'sub foo{} BEGIN { warn $::{foo} } foo(); BEGIN { warn
$::{foo} }'
CODE(0x7fc98282ad98) at -e line 1.
CODE(0x7fc98282ad98) at -e line 1.
Previously it was like this:
$ ./miniperl -e 'sub foo{} BEGIN { warn $::{foo} } foo(); BEGIN { warn
$::{foo} }'
CODE(0x7f8ef082ad98) at -e line 1.
*main::foo at -e line 1.
M op.c
M t/op/symbolcache.t
commit 9eeea974410e70172473ad2859b09b4f93296f74
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 23:44:45 2014 -0700
Inline op.c:too_many_arguments_sv into its only caller
Iâm about to change this code anyway, and itâs easier in one spot.
M embed.fnc
M embed.h
M op.c
M proto.h
commit 969380fc2b48fd229c0da3728b408e3427bf1183
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 23:42:45 2014 -0700
Inline op.c:too_few_arguments_sv into its only caller
Iâm about to change this code anyway, and itâs easier in one spot.
M embed.fnc
M embed.h
M op.c
M proto.h
commit 77b146bd00ac3421aff85058a90183ed507bb56b
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 22:49:44 2014 -0700
Teach dump.c about CVf_LEXICAL
M dump.c
commit 48370563079c023fe9de40042d0199599823a63a
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 22:49:18 2014 -0700
Teach dump.c about CVf_NAMED
I should have added this in perl 5.18.
M dump.c
commit 3666438e852bec3169c6e76d285b0e3fe7604e29
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 17:59:11 2014 -0700
op.c:ck_subr: reify GVs based on call checker
Instead of faking up a GV to pass to the call checker if we have a
lexical sub, just get the GV from CvGV (since that will reify the GV,
even for lexical subs), unless the call checker has not specifically
requested GVs.
For now, we assume the default call checker cannot handle non-GV sub
names, as indeed it cannot. An imminent commit will rectify that.
The code in scope.c was getting the name hek from the proto CV (stowed
in magic on the pad name) if the CV in the pad had lost it. Now, the
proto CV can lose it at compile time via CvGV, so that does not work
anymore. Instead, just get it from the GV.
M op.c
M op.h
M scope.c
commit 91790f1fccd988a355a2c1c0a93bc98b6d9d9f79
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 22:53:42 2014 -0700
Use cv_name in pp_hot.c:sub_crush_depth
The next commit will allow lexical subs with GVs to reach this code
path, so use cv_name, since it knows how to handle those.
M pp_hot.c
commit 0b280710541b126c72ddb5b368fd0c1f0465d8ae
Author: Father Chrysostomos <[email protected]>
Date: Thu Sep 11 13:37:15 2014 -0700
Add cv_set_call_checker_flags
This is like cv_set_call_checker, except that it allows the caller to
decide whether the call checker needs a GV.
Currently the GV flag is recorded, but ck_subr does not do anything
with it yet.
M cv.h
M embed.fnc
M embed.h
M mg.h
M op.c
M proto.h
commit 8d6cd834f220f27b3bcd9e9bf3c059121d6d9361
Author: Father Chrysostomos <[email protected]>
Date: Wed Sep 10 22:06:10 2014 -0700
pad.c: Avoid struct name followed by colon
Some old clang++ versions have trouble with this. See ticket #112786.
M pad.c
commit 41560b5fb2164edf4ccf0b7941b7ddaa98c43c7a
Author: Father Chrysostomos <[email protected]>
Date: Wed Sep 10 22:01:15 2014 -0700
pad.c:cv_name: Reword docs for future extensibility
M pad.c
commit bdd6afa42dfa2ba0e97644945431d378afec44f7
Author: Father Chrysostomos <[email protected]>
Date: Wed Sep 10 20:29:19 2014 -0700
Avoid reifying GVs in rv2cv
\&foo no longer reifies GVs in the stash:
$ ./miniperl -e 'sub foo{} warn $::{foo}; \&foo; warn $::{foo}'
CODE(0x7fab6282ad98) at -e line 1.
CODE(0x7fab6282ad98) at -e line 1.
Sub calls still reify them though, because of the way ck_subr cur-
rently works.
Constant proxies are still upgraded to full GVs for now, just to mini-
mise the churn per patch.
This makes it possible for OP_GVs to point to things other than GVs,
and these things are stored in the pad under threads. Hence, pad_tidy
could turn on PADTMP, and then IS_PADGV becomes true when it is
upgraded to a glob, so refgen will fail assertions. There is actually
no need to turn on PADTMP in pad_tidy, since it will already be on for
op targets. (We need to get rid of IS_PADGV one of these days. It
doesnât actually do anything.)
M op.c
M pad.c
commit 90b56809e257d95b1743dfc37dd92388c0692d15
Author: Father Chrysostomos <[email protected]>
Date: Wed Sep 10 14:23:53 2014 -0700
op.c: ck_rvconst: Inline the noexpand var
It is only used once now, and its name is about to become confusing,
as GV_NOEXPAND will be used for all CVs.
M op.c
commit 85c6af26c2f296594679ff7334890a530b2f0138
Author: Father Chrysostomos <[email protected]>
Date: Sat Sep 6 22:59:36 2014 -0700
Increase $Attribute::Handlers::VERSION to 0.97
M dist/Attribute-Handlers/lib/Attribute/Handlers.pm
commit 4be0943bc46695183e9dc2a5501f1e440f72daed
Author: Father Chrysostomos <[email protected]>
Date: Sat Sep 6 16:22:53 2014 -0700
Tweak Peek.t
beab08741 introduced XSUB constants, but the code it added to
newATTRSUB does not set CvSTASH if there is already a CV stub. It
does set it if there is no sub there at all (because it goes through
newCONSTSUB).
Recent changes have made constant declarations like âsub foo(){}â
put just a constant reference in the stash if possible, the way con-
stant.pm does. When this gets upgraded to a typeglob, the CV is rei-
fied via newCONSTSUB, so it gets a CvSTASH pointer.
CvSTASH on a constant sub really makes no difference in practice.
Itâs mostly cosmetic.
This exercises the two code paths with the oldest perl installa-
tion I have:
$ /opt/bin/perl5.8.8 -MDevel::Peek -e 'BEGIN{\&foo} sub foo(){3} Dump \&foo'
SV = RV(0x9baa18) at 0x98d580
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x9b7398
SV = PVCV(0x9b4810) at 0x9b7398
REFCNT = 2
FLAGS = (POK,pPOK,CONST)
IV = 0
NV = 0
PROTOTYPE = ""
COMP_STASH = 0x98d4a8 "main" <----------
ROOT = 0x0
XSUB = 0x5bb44
XSUBANY = 10018864
GVGV::GV = 0x98df7c "main" :: "foo"
FILE = "-e"
DEPTH = 0
FLAGS = 0x200
OUTSIDE_SEQ = 96
PADLIST = 0x98e228
PADNAME = 0x98e24c(0x0) PAD = 0x98e264(0x22d560)
OUTSIDE = 0x98df34 (UNIQUE)
$ /opt/bin/perl5.8.8 -MDevel::Peek -e 'sub foo(){3} Dump \&foo'
SV = RV(0xc11018) at 0xbe3b80
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0xbe4570
SV = PVCV(0xc0ae10) at 0xbe4570
REFCNT = 2
FLAGS = (POK,pPOK,CONST)
IV = 0
NV = 0
PROTOTYPE = ""
COMP_STASH = 0x0 <--------------------------
ROOT = 0x0
XSUB = 0x5bb44
XSUBANY = 12469628
GVGV::GV = 0xbe3c40 "main" :: "foo"
FILE = "-e"
DEPTH = 0
FLAGS = 0x200
OUTSIDE_SEQ = 0
PADLIST = 0x0
OUTSIDE = 0x0 (null)
M ext/Devel-Peek/t/Peek.t
commit 06db503a5adc46285ce3ce700a0a864549b265bd
Author: Father Chrysostomos <[email protected]>
Date: Sat Sep 6 13:09:05 2014 -0700
Fix-ups for Attribute::Handlers
It was making unreliable assumptions about the contents of stashes.
M dist/Attribute-Handlers/lib/Attribute/Handlers.pm
commit 81e855121176411d076d4ccce9e19cff3eedb0bf
Author: Father Chrysostomos <[email protected]>
Date: Sun Aug 31 18:05:49 2014 -0700
sv.h: Expand comment about potential SVf_UTF8 conflict
M sv.h
commit f3591e260d397ee9c103cfecca0657ba1dc2eec1
Author: Father Chrysostomos <[email protected]>
Date: Sun Aug 31 20:13:21 2014 -0700
Avoid creating GVs when subs are declared
This patch changes âsub foo {...}â declarations to store subroutine
references in the stash, to save memory.
Typeglobs still notionally exist. Accessing CvGV(cv) will reify them.
Hence, currently the savings are lost when a sub call is compiled.
$ ./miniperl -e 'sub foo{} BEGIN { warn $::{foo} } foo(); BEGIN { warn
$::{foo} }'
CODE(0x7f8ef082ad98) at -e line 1.
*main::foo at -e line 1.
This optimisation is skipped if the subroutine declaration contains a
package separator.
Concerning the changes in caller.t, this code:
sub foo { print +(caller(0))[3],"\n" }
my $fooref = delete $::{foo};
$fooref -> ();
used to crash in 5.7.3 or thereabouts. It was fixed by 16658 (aka
07b8c804e8) to produce â(unknown)â instead. Then in 5.13.3 it was
changed (by 803f274) to produce âmain::__ANON__â instead. So the
tests are really checking that we donât get a crash. I think it is
acceptable that it has now changed to âmain::fooâ.
M embed.fnc
M gv.c
M op.c
M pp.c
M proto.h
M t/op/caller.t
M t/op/gv.t
M t/uni/gv.t
M t/uni/parser.t
M toke.c
M universal.c
commit 801724ecc66a1e04b770210abc09beffd2254b04
Author: Father Chrysostomos <[email protected]>
Date: Sat Sep 6 22:51:15 2014 -0700
Remove bogus gv-handling code from toke.c
This code was added by 211a4342c, which was actually restoring some
code that f74617600 removed.
Its purpose was to expand a proxy to a real GV after we found out that
we really are going to compile a sub call op.
This code is actually unreachable at present (sub call lookup via
rv2cv ops expands stub declarations, but not references to constants;
references to constants are not compiled to sub calls), which is a
good thing, because (1) it does not take UTF8 names into account and
(2) it does not work with rv2cv hooks or our subs, because it assumes
that the value of PL_tokenbuf is normative and can be used to
reify a glob.
M toke.c
commit ab56316ab7406bb5a5010b4c2aaac97dac33287d
Author: Father Chrysostomos <[email protected]>
Date: Thu Aug 28 18:26:36 2014 -0700
For lexical subs, reify CvGV from CvSTASH and CvNAME_HEK
From now on, the presence of a name hek implies a GV. Any access to
CvGV will cause that implicit GV to be reified.
M cv.h
M embed.fnc
M ext/B/t/b.t
M gv.c
M inline.h
M op.c
M pp_hot.c
M proto.h
M universal.c
-----------------------------------------------------------------------
--
Perl5 Master Repository