summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Cozens <simon@netthink.co.uk>2000-12-10 19:06:19 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2000-12-11 15:35:07 +0000
commit1e1dbab6eed49955498a66ce3beedbd7ea33dc21 (patch)
treee28c26af071f6ca2caa7951953b0623527d8a0b2
parent7d3a9d88333294f7510d5755825d4f26422ffba1 (diff)
downloadperl-1e1dbab6eed49955498a66ce3beedbd7ea33dc21.tar.gz
Re: [ID 20001204.007] -MO=Deparse -we '{234;}' failing
Message-ID: <20001210190619.B21402@deep-dark-truthful-mirror.perlhacker.org> p4raw-id: //depot/perl@8079
-rw-r--r--ext/B/B/Deparse.pm6
-rwxr-xr-xt/lib/b.t16
2 files changed, 17 insertions, 5 deletions
diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm
index 7d1675290b..37c08554c9 100644
--- a/ext/B/B/Deparse.pm
+++ b/ext/B/B/Deparse.pm
@@ -1792,7 +1792,7 @@ sub pp_leaveloop {
my $state = $kid->first;
my $cuddle = $self->{'cuddle'};
my($expr, @exprs);
- for (; $$state != $$cont; $state = $state->sibling) {
+ for (; $$state != $$cont and can $state "sibling"; $state = $state->sibling) {
$expr = "";
if (is_state $state) {
$expr = $self->deparse($state, 0);
@@ -1803,8 +1803,12 @@ sub pp_leaveloop {
push @exprs, $expr if $expr;
}
$kid = join(";\n", @exprs);
+ if (class($cont) eq "LISTOP") {
$cont = $cuddle . "continue {\n\t" .
$self->deparse($cont, 0) . "\n\b}\cK";
+ } else {
+ $cont = "\cK";
+ }
} else {
$cont = "\cK";
$kid = $self->deparse($kid, 0);
diff --git a/t/lib/b.t b/t/lib/b.t
index ee49213621..cd5d61a1cf 100755
--- a/t/lib/b.t
+++ b/t/lib/b.t
@@ -10,7 +10,7 @@ use warnings;
use strict;
use Config;
-print "1..15\n";
+print "1..17\n";
my $test = 1;
@@ -78,9 +78,6 @@ LINE: while (defined($_ = <ARGV>)) {
@F = split(/\s+/, $_, 0);
'???'
}
-continue {
- '???'
-}
EOF
print "# [$a]\n\# vs\n# [$b]\nnot " if $a ne $b;
@@ -146,3 +143,14 @@ if ($is_thread) {
print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s;
}
ok;
+
+# Bug 20001204.07
+{
+my $foo = $deparse->coderef2text(sub { { 234; }});
+# Constants don't get optimised here.
+print "not " unless $foo =~ /{.*{.*234;.*}.*}/sm;
+ok;
+$foo = $deparse->coderef2text(sub { { 234; } continue { 123; } });
+print "not " unless $foo =~ /{.*{.*234;.*}.*continue.*{.*123.*}/sm;
+ok;
+}