From: Steve Peters Date: Wed, 19 Dec 2007 15:00:53 +0000 (+0000) Subject: Upgrade to B-Lint-1.11 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c97a6147af6fea02f9b15486129be65da0b7d977;p=p5sagit%2Fp5-mst-13.2.git Upgrade to B-Lint-1.11 p4raw-id: //depot/perl@32651 --- diff --git a/MANIFEST b/MANIFEST index 3ac0a6c..9d2e2d8 100644 --- a/MANIFEST +++ b/MANIFEST @@ -76,6 +76,7 @@ ext/B/B/Concise.pm Compiler Concise backend ext/B/B/Debug.pm Compiler Debug backend ext/B/B/Deparse.pm Compiler Deparse backend ext/B/B/Lint.pm Compiler Lint backend +ext/B/B/Lint/Debug.pm Adds debugging stringification to B:: ext/B/B.pm Compiler backend support functions and methods ext/B/B/Showlex.pm Compiler Showlex backend ext/B/B/Terse.pm Compiler Terse backend diff --git a/ext/B/B/Lint.pm b/ext/B/B/Lint.pm index fd89a7a..76bc9fd 100644 --- a/ext/B/B/Lint.pm +++ b/ext/B/B/Lint.pm @@ -1,6 +1,6 @@ package B::Lint; -our $VERSION = '1.09'; ## no critic +our $VERSION = '1.11'; ## no critic =head1 NAME @@ -185,6 +185,10 @@ This is only a very preliminary version. Malcolm Beattie, mbeattie@sable.ox.ac.uk. +=head1 ACKNOWLEDGEMENTS + +Sebastien Aperghis-Tramoni - bug fixes + =cut use strict; @@ -347,8 +351,8 @@ for ( my @elts = map +( $_->ARRAY )[$ix], @entire_pad; ($elt) = first { eval { $_->isa('B::SV') } ? $_ : (); - } - @elts[ 0, reverse 1 .. $#elts ]; + } + @elts[ 0, reverse 1 .. $#elts ]; return $elt; }; } @@ -511,7 +515,7 @@ IMPLICIT_FOO: { # scratchpad to find things. I suppose this is so a optree can be # shared between threads and all symbol table muckery will just get # written to a scratchpad. -*B::PADOP::lint = \&B::SVOP::lint; +*B::PADOP::lint = *B::PADOP::lint = \&B::SVOP::lint; sub B::SVOP::lint { my ($op) = @_; diff --git a/ext/B/B/Lint/Debug.pm b/ext/B/B/Lint/Debug.pm new file mode 100644 index 0000000..0a9b1be --- /dev/null +++ b/ext/B/B/Lint/Debug.pm @@ -0,0 +1,65 @@ +package B::Lint::Debug; + +=head1 NAME + +B::Lint::Debug - Adds debugging stringification to B:: + +=head1 DESCRIPTION + +This module injects stringification to a B::OP*/B::SPECIAL. This +should not be loaded unless you're debugging. + +=cut + +package B::SPECIAL; +use overload '""' => sub { + my $self = shift @_; + "SPECIAL($$self)"; +}; + +package B::OP; +use overload '""' => sub { + my $self = shift @_; + my $class = ref $self; + $class =~ s/\AB:://xms; + my $name = $self->name; + "$class($name)"; +}; + +package B::SVOP; +use overload '""' => sub { + my $self = shift @_; + my $class = ref $self; + $class =~ s/\AB:://xms; + my $name = $self->name; + "$class($name," . $self->sv . "," . $self->gv . ")"; +}; + +package B::SPECIAL; +sub DESTROY { } +our $AUTOLOAD; + +sub AUTOLOAD { + my $cx = 0; + print "AUTOLOAD $AUTOLOAD\n"; + + package DB; + while ( my @stuff = caller $cx ) { + + print "$cx: [@DB::args] [@stuff]\n"; + if ( ref $DB::args[0] ) { + if ( $DB::args[0]->can('padix') ) { + print " PADIX: " . $DB::args[0]->padix . "\n"; + } + if ( $DB::args[0]->can('targ') ) { + print " TARG: " . $DB::args[0]->targ . "\n"; + for ( B::Lint::cv()->PADLIST->ARRAY ) { + print +( $_->ARRAY )[ $DB::args[0]->targ ] . "\n"; + } + } + } + ++$cx; + } +} + +1;