]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blobdiff - lib/B/RecDeparse.pm
Bump copyright year
[perl/modules/B-RecDeparse.git] / lib / B / RecDeparse.pm
index 4f7b6361b923df0890348b39038f68f1167a5aa6..a9ace562920d0a516f32958bcc93b4f41f35e9a6 100644 (file)
@@ -5,9 +5,11 @@ use 5.008;
 use strict;
 use warnings;
 
+use B ();
+
 use Config;
 
-use base qw/B::Deparse/;
+use base qw<B::Deparse>;
 
 =head1 NAME
 
@@ -114,8 +116,9 @@ sub compile {
 sub init {
  my $self = shift;
 
- $self->{brd_cur} = 0;
- $self->{brd_sub} = 0;
+ $self->{brd_cur}  = 0;
+ $self->{brd_sub}  = 0;
+ $self->{brd_seen} = { };
 
  $self->SUPER::init(@_);
 }
@@ -137,6 +140,19 @@ if (FOOL_SINGLE_DELIM) {
  }
 }
 
+sub deparse_sub {
+ my $self = shift;
+ my $cv   = $_[0];
+
+ my $name;
+ unless ($cv->CvFLAGS & B::CVf_ANON()) {
+  $name = $cv->GV->SAFENAME;
+ }
+
+ local $self->{brd_seen}->{$name} = 1 if defined $name;
+ return $self->SUPER::deparse_sub(@_);
+}
+
 sub pp_entersub {
  my $self = shift;
 
@@ -162,14 +178,17 @@ sub pp_refgen {
 sub pp_gv {
  my $self = shift;
 
+ my $gv   = $self->gv_or_padgv($_[0]);
+ my $name = $gv->NAME;
+ my $seen = $self->{brd_seen};
+
  my $body;
- if ($self->{brd_sub} <= 0 || !$self->_recurse) {
+ if ($self->{brd_sub} <= 0 || !$self->_recurse || $seen->{$name}) {
   $body = $self->SUPER::pp_gv(@_);
  } else {
-  my $gv = $self->gv_or_padgv($_[0]);
-
   $body = do {
-   local @{$self}{qw/brd_sub brd_cur/} = (0, $self->{brd_cur} + 1);
+   local @{$self}{qw<brd_sub brd_cur>} = (0, $self->{brd_cur} + 1);
+   local $seen->{$name} = 1;
    'sub ' . $self->indent($self->deparse_sub($gv->CV));
   };
 
@@ -187,6 +206,8 @@ sub pp_gv {
 
 =head2 C<init>
 
+=head2 C<deparse_sub>
+
 =head2 C<pp_entersub>
 
 =head2 C<pp_refgen>
@@ -225,7 +246,7 @@ Tests code coverage report is available at L<http://www.profvince.com/perl/cover
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008,2009,2010 Vincent Pit, all rights reserved.
+Copyright 2008,2009,2010,2011 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.