This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse: Better constant-dumping heuristics
authorFather Chrysostomos <sprout@cpan.org>
Sun, 24 Sep 2017 21:14:00 +0000 (14:14 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 8 Oct 2017 20:06:05 +0000 (13:06 -0700)
commita9cafc7854aa42b0323fc25662391f1e8d27a24b
treee5da31b5d988e984d3212bea2b3e44aa33f7cfc5
parent975601e92683a5f503e101106ecaa4f7c8b9d483
Deparse: Better constant-dumping heuristics

Constants created via sub foo () { 1 } are stored in the stash as
simple scalar references, under the CV-in-stash optimisation.  That
optimisation currently only applies to the main package, but will
shortly be extended to other packages.  This means B::Deparse’s
heuristics for dumping the constants needs to be improved, to avoid
dumping B::Deparse’s own constants for every program.

The heuristic I am using (since CvFILE is not present on a scalar ref)
is to record whether other subroutines in the same package as the con-
stant are being dumped by virtue of having CvFILE pointing to a file
that is being dumped.  This assumption is that constants and subroutines
in the same package are likely to be in the same file.
lib/B/Deparse.pm
lib/B/Deparse.t