]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blobdiff - lib/B/RecDeparse.pm
This is 0.10
[perl/modules/B-RecDeparse.git] / lib / B / RecDeparse.pm
index a075c339ecc5b6885f40a4ff726674accd14fa77..286b28920ba06f29f1650448ac788b9b81d89f94 100644 (file)
@@ -1,6 +1,6 @@
 package B::RecDeparse;
 
-use 5.008001;
+use 5.008_001;
 
 use strict;
 use warnings;
@@ -17,11 +17,11 @@ B::RecDeparse - Deparse recursively into subroutines.
 
 =head1 VERSION
 
-Version 0.07
+Version 0.10
 
 =cut
 
-our $VERSION = '0.07';
+our $VERSION = '0.10';
 
 =head1 SYNOPSIS
 
@@ -65,8 +65,8 @@ The C<level> option expects an integer that specifies how many levels of recursi
 use constant {
  # p31268 made pp_entersub call single_delim
  FOOL_SINGLE_DELIM =>
-     ($^V ge v5.9.5)
-  || ($^V lt v5.9.0 and $^V ge v5.8.9)
+     ("$]" >= 5.009_005)
+  || ("$]" <  5.009 and "$]" >= 5.008_009)
   || ($Config{perl_patchlevel} && $Config{perl_patchlevel} >= 31268)
 };
 
@@ -190,12 +190,22 @@ sub pp_refgen {
  }
 }
 
+sub pp_srefgen {
+ my $self = shift;
+
+ return do {
+  local $self->{brd_sub} = 0;
+  $self->SUPER::pp_srefgen(@_);
+ }
+}
+
 sub pp_gv {
  my $self = shift;
 
  my $gv   = $self->gv_or_padgv($_[0]);
- my $name = $gv->NAME;
- my $cv   = $gv->CV;
+ my $cv   = $gv->FLAGS & B::SVf_ROK ? $gv->RV : undef;
+ my $name = $cv ? $cv->NAME_HEK || $cv->GV->NAME : $gv->NAME;
+ $cv    ||= $gv->CV;
  my $seen = $self->{brd_seen};
 
  my $body;
@@ -206,7 +216,7 @@ sub pp_gv {
   $body = do {
    local @{$self}{qw<brd_sub brd_cur>} = (0, $self->{brd_cur} + 1);
    local $seen->{$name} = 1;
-   'sub ' . $self->indent($self->deparse_sub($gv->CV));
+   'sub ' . $self->indent($self->deparse_sub($cv));
   };
 
   if (FOOL_SINGLE_DELIM) {
@@ -219,20 +229,41 @@ sub pp_gv {
  return $body;
 }
 
-=head2 C<compile>
+=pod
+
+The following functions and methods from L<B::Deparse> are reimplemented by this module :
+
+=over 4
+
+=item *
+
+C<compile>
+
+=item *
+
+C<init>
+
+=item *
+
+C<deparse_sub>
+
+=item *
+
+C<pp_entersub>
+
+=item *
 
-=head2 C<init>
+C<pp_refgen>
 
-=head2 C<deparse_sub>
+=item *
 
-=head2 C<pp_entersub>
+C<pp_srefgen>
 
-=head2 C<pp_refgen>
+=item *
 
-=head2 C<pp_gv>
+C<pp_gv>
 
-Functions and methods from L<B::Deparse> reimplemented by this module.
-Never call them directly.
+=back
 
 Otherwise, L<B::RecDeparse> inherits all methods from L<B::Deparse>.
 
@@ -267,7 +298,7 @@ Tests code coverage report is available at L<http://www.profvince.com/perl/cover
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008,2009,2010,2011,2013 Vincent Pit, all rights reserved.
+Copyright 2008,2009,2010,2011,2013,2014,2015 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.