Re: [perl #40055] B::Deparse double do
Rick Delaney [Thu, 3 Aug 2006 17:30:06 +0000 (13:30 -0400)]
Message-ID: <20060803213006.GU21381@localhost.localdomain>

p4raw-id: //depot/perl@28656

ext/B/B/Deparse.pm
ext/B/t/deparse.t

index 6bb2f68..8764113 100644 (file)
@@ -2674,6 +2674,10 @@ sub pp_null {
        return $self->pp_list($op, $cx);
     } elsif ($op->first->name eq "enter") {
        return $self->pp_leave($op, $cx);
+    } elsif ($op->first->name eq "leave") {
+       return $self->pp_leave($op->first, $cx);
+    } elsif ($op->first->name eq "scope") {
+       return $self->pp_scope($op->first, $cx);
     } elsif ($op->targ == OP_STRINGIFY) {
        return $self->dquote($op, $cx);
     } elsif (!null($op->first->sibling) and
index c1fa6c2..02ea83c 100644 (file)
@@ -24,7 +24,7 @@ use warnings;
 use strict;
 use Config;
 
-print "1..40\n";
+print "1..42\n";
 
 use B::Deparse;
 my $deparse = B::Deparse->new() or print "not ";
@@ -63,13 +63,12 @@ while (<DATA>) {
     }
     else {
        my $deparsed = $deparse->coderef2text( $coderef );
-       my $regex = quotemeta($expected);
-       do {
-           no warnings 'misc';
-           $regex =~ s/\s+/\s+/g;
-       };
+       my $regex = $expected;
+       $regex =~ s/(\S+)/\Q$1/g;
+       $regex =~ s/\s+/\\s+/g;
+       $regex = '^\{\s*' . $regex . '\s*\}$';
 
-       my $ok = ($deparsed =~ /^\{\s*$regex\s*\}$/);
+       my $ok = ($deparsed =~ /$regex/);
        print (($ok ? "ok " : "not ok ") . $i++ . "\n");
        if (!$ok) {
            print "# EXPECTED:\n";
@@ -324,3 +323,9 @@ print $_ foreach (reverse 1, 2..5);
 # 34  (bug #38684)
 our @ary;
 @ary = split(' ', 'foo', 0);
+####
+# 35 (bug #40055)
+do { () }; 
+####
+# 36 (ibid.)
+do { my $x = 1; $x };