Upgrade to B-Lint-1.11
Steve Peters [Wed, 19 Dec 2007 15:00:53 +0000 (15:00 +0000)]
p4raw-id: //depot/perl@32651

MANIFEST
ext/B/B/Lint.pm
ext/B/B/Lint/Debug.pm [new file with mode: 0644]

index 3ac0a6c..9d2e2d8 100644 (file)
--- 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
index fd89a7a..76bc9fd 100644 (file)
@@ -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 (file)
index 0000000..0a9b1be
--- /dev/null
@@ -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;