[perl #78810] PERLDB_NOOPT ignored by adjacent nextstate optimisation
authorFather Chrysostomos <sprout@cpan.org>
Fri, 26 Nov 2010 22:24:30 +0000 (14:24 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 26 Nov 2010 22:38:50 +0000 (14:38 -0800)
As mentioned in the RT ticket, ac56e7d did not take PERLDB_NOOPT
into account.

ext/B/t/concise.t
op.c

index a6a1a78..b59701d 100644 (file)
@@ -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 2115c66..5346a89 100644 (file)
--- 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;