summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2010-11-26 14:24:30 -0800
committerFather Chrysostomos <sprout@cpan.org>2010-11-26 14:38:50 -0800
commitbcc76ee34baf39636d60454c7d178f030ac755e3 (patch)
tree631e0a86251c9559d9a9d22be36b60ea8baec39b
parent4c540399ef7fb5ef4e3a1dc7391da46f9d1c571c (diff)
downloadperl-bcc76ee34baf39636d60454c7d178f030ac755e3.tar.gz
[perl #78810] PERLDB_NOOPT ignored by adjacent nextstate optimisation
As mentioned in the RT ticket, ac56e7d did not take PERLDB_NOOPT into account.
-rw-r--r--ext/B/t/concise.t12
-rw-r--r--op.c2
2 files changed, 12 insertions, 2 deletions
diff --git a/ext/B/t/concise.t b/ext/B/t/concise.t
index a6a1a7846a..b59701d2f5 100644
--- a/ext/B/t/concise.t
+++ b/ext/B/t/concise.t
@@ -10,7 +10,7 @@ BEGIN {
require 'test.pl'; # we use runperl from 'test.pl', so can't use Test::More
}
-plan tests => 157;
+plan tests => 158;
require_ok("B::Concise");
@@ -425,4 +425,14 @@ $out = runperl ( switches => ["-MO=Concise,-src,-stash=FOO,-main"],
like($out, qr/FUNC: \*FOO::bar/,
"stash rendering works on inlined package");
+# Test that consecutive nextstate ops are not nulled out when PERLDBf_NOOPT
+# is set.
+# XXX Does this test belong here?
+
+$out = runperl ( switches => ["-MO=Concise"],
+ prog => 'BEGIN{$^P = 0x04} 1 if 0; print',
+ stderr => 1 );
+like $out, qr/nextstate.*nextstate/s,
+ 'nulling of nextstate-nextstate happeneth not when $^P | PERLDBf_NOOPT';
+
__END__
diff --git a/op.c b/op.c
index 2115c66298..5346a89803 100644
--- a/op.c
+++ b/op.c
@@ -9317,7 +9317,7 @@ Perl_rpeep(pTHX_ register OP *o)
/* Two NEXTSTATEs in a row serve no purpose. Except if they happen
to carry two labels. For now, take the easier option, and skip
this optimisation if the first NEXTSTATE has a label. */
- if (!CopLABEL((COP*)o)) {
+ if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
OP *nextop = o->op_next;
while (nextop && nextop->op_type == OP_NULL)
nextop = nextop->op_next;