Make B::Deparse handle the _ prototype
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Sun, 18 Jan 2009 22:15:36 +0000 (23:15 +0100)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Sun, 18 Jan 2009 22:15:36 +0000 (23:15 +0100)
This notably fixes:
[perl #62484] B::Deparse hangs on called subs with $;_ prototype

ext/B/B/Deparse.pm

index c398ddb..1407b38 100644 (file)
@@ -3230,7 +3230,7 @@ sub check_proto {
     # An unbackslashed @ or % gobbles up the rest of the args
     1 while $proto =~ s/(?<!\\)([@%])[^\]]+$/$1/;
     while ($proto) {
-       $proto =~ s/^(\\?[\$\@&%*]|\\\[[\$\@&%*]+\]|;)//;
+       $proto =~ s/^(\\?[\$\@&%*_]|\\\[[\$\@&%*]+\]|;)//;
        my $chr = $1;
        if ($chr eq "") {
            return "&" if @args;
@@ -3242,7 +3242,7 @@ sub check_proto {
        } else {
            $arg = shift @args;
            last unless $arg;
-           if ($chr eq "\$") {
+           if ($chr eq "\$" || $chr eq "_") {
                if (want_scalar $arg) {
                    push @reals, $self->deparse($arg, 6);
                } else {