diff options
author | M.J.T. Guy <mjtg@cus.cam.ac.uk> | 1997-08-07 00:00:00 +0000 |
---|---|---|
committer | Tim Bunce <Tim.Bunce@ig.co.uk> | 1997-08-07 00:00:00 +1200 |
commit | 74b5f52c9579e21851cb5b0b04ee78401a947eb0 (patch) | |
tree | de1e827fb106196320a1195df3122b69c2871119 /lib/dumpvar.pl | |
parent | 2b0d8408d8036d38c4729d9c464677da60605800 (diff) | |
download | perl-74b5f52c9579e21851cb5b0b04ee78401a947eb0.tar.gz |
[BUG:PATCH] dumpvar.pl parses some references incorrectly
dumpvar.pl parses stringified references incorrectly when extrovert
class names are used. For example,
x bless {}, '=ARRAY('
will crash the debugger.
Patch (for 5.004_01 or 5.004_02) attached.
p5p-msgid: E0wwAjQ-0004l6-00@ursa.cus.cam.ac.uk
Diffstat (limited to 'lib/dumpvar.pl')
-rw-r--r-- | lib/dumpvar.pl | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/dumpvar.pl b/lib/dumpvar.pl index 1fa8246da7..c32bc2fb5e 100644 --- a/lib/dumpvar.pl +++ b/lib/dumpvar.pl @@ -117,9 +117,9 @@ sub unwrap { # Check for reused addresses if (ref $v) { - ($address) = $v =~ /(0x[0-9a-f]+)/ ; + ($address) = $v =~ /(0x[0-9a-f]+)\)$/ ; if (defined $address) { - ($type) = $v =~ /=(.*?)\(/ ; + ($type) = $v =~ /=(.*?)\([^=]+$/ ; $address{$address}++ ; if ( $address{$address} > 1 ) { print "${sp}-> REUSED_ADDRESS\n" ; @@ -135,7 +135,7 @@ sub unwrap { } } - if ( ref $v eq 'HASH' or $type eq 'HASH') { + if ( UNIVERSAL::isa($v, 'HASH') ) { @sortKeys = sort keys(%$v) ; undef $more ; $tHashDepth = $#sortKeys ; @@ -168,7 +168,7 @@ sub unwrap { } print "$sp empty hash\n" unless @sortKeys; print "$sp$more" if defined $more ; - } elsif ( ref $v eq 'ARRAY' or $type eq 'ARRAY') { + } elsif ( UNIVERSAL::isa($v, 'ARRAY') ) { $tArrayDepth = $#{$v} ; undef $more ; $tArrayDepth = $#{$v} < $arrayDepth-1 ? $#{$v} : $arrayDepth-1 @@ -198,13 +198,13 @@ sub unwrap { } print "$sp empty array\n" unless @$v; print "$sp$more" if defined $more ; - } elsif ( ref $v eq 'SCALAR' or ref $v eq 'REF' or $type eq 'SCALAR' ) { + } elsif ( UNIVERSAL::isa($v, 'SCALAR') or ref $v eq 'REF' ) { print "$sp-> "; DumpElem $$v, $s; - } elsif ( ref $v eq 'CODE' or $type eq 'CODE' ) { + } elsif ( UNIVERSAL::isa($v, 'CODE') ) { print "$sp-> "; dumpsub (0, $v); - } elsif (ref $v eq 'GLOB') { + } elsif ( UNIVERSAL::isa($v, 'GLOB') ) { print "$sp-> ",&stringify($$v,1),"\n"; if ($globPrint) { $s += 3; |