In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/805b10112885d8868f21f8e860792d65e1e6c19d?hp=ad2561310d3fa13cf664e8d8b8bb294a23cf9ea4>
- Log ----------------------------------------------------------------- commit 805b10112885d8868f21f8e860792d65e1e6c19d Author: David Mitchell <[email protected]> Date: Wed Aug 12 01:01:34 2009 +0100 ameliorate B::Deparse slowdown commit 2990415a45 improved the ability to deparse inlined constants, but at the cost of having to walk all the symbol tables when each new B::Deparse object is created. Make this scan instead only happen the first time its needed. ----------------------------------------------------------------------- Summary of changes: ext/B/B/Deparse.pm | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm index 9ba2442..5685d09 100644 --- a/ext/B/B/Deparse.pm +++ b/ext/B/B/Deparse.pm @@ -570,7 +570,6 @@ sub new { $self->{'ambient_warnings'} = undef; # Assume no lexical warnings $self->{'ambient_hints'} = 0; $self->{'ambient_hinthash'} = undef; - $self->{'inlined_constants'} = $self->scan_for_constants; $self->init(); while (my $arg = shift @_) { @@ -3655,10 +3654,16 @@ sub const { if (class($sv) eq "SPECIAL") { # sv_undef, sv_yes, sv_no return ('undef', '1', $self->maybe_parens("!1", $cx, 21))[$$sv-1]; - } elsif (class($sv) eq "NULL") { + } + if (class($sv) eq "NULL") { return 'undef'; - } elsif ($cx and my $const = $self->{'inlined_constants'}->{ 0 + $sv->object_2svref }) { - return $const; + } + if ($cx) { + unless ($self->{'inlined_constants'}) { + $self->{'inlined_constants'} = $self->scan_for_constants; + } + my $const = $self->{'inlined_constants'}->{ 0 + $sv->object_2svref }; + return $const if $const; } # convert a version object into the "v1.2.3" string in its V magic if ($sv->FLAGS & SVs_RMG) { -- Perl5 Master Repository
