Add the missing assignment to op_last that change 31798 missed out.
Nicholas Clark [Wed, 12 Sep 2007 23:10:58 +0000 (23:10 +0000)]
With this, state $zok = ...; will deparse.

p4raw-id: //depot/perl@31857

ext/B/B/Deparse.pm
op.c

index d0b18be..024f3eb 100644 (file)
@@ -2557,6 +2557,14 @@ sub pp_cond_expr {
     return $head . join($cuddle, "", @elsifs) . $false;
 }
 
+sub pp_once {
+    my ($self, $op, $cx) = @_;
+    my $cond = $op->first;
+    my $true = $cond->sibling;
+
+    return $self->deparse($true, $cx);
+}
+
 sub loop_common {
     my $self = shift;
     my($op, $cx, $init) = @_;
diff --git a/op.c b/op.c
index 1ebc84c..d3fabf3 100644 (file)
--- a/op.c
+++ b/op.c
@@ -7065,6 +7065,11 @@ Perl_ck_sassign(pTHX_ OP *o)
            condop->op_targ = target;
            other->op_targ = target;
 
+           /* Because we change the type of the op here, we will skip the
+              assinment binop->op_last = binop->op_first->op_sibling; at the
+              end of Perl_newBINOP(). So need to do it here. */
+           cBINOPo->op_last = cBINOPo->op_first->op_sibling;
+
            return nullop;
        }
     }