Front page | perl.perl5.porters |
Postings from April 2001
[PATCH B::Deparse] C<$x = /(.)/> ne C<($x) = /(.)/>
Thread Next
From:
Robin Houston
Date:
April 26, 2001 13:08
Subject:
[PATCH B::Deparse] C<$x = /(.)/> ne C<($x) = /(.)/>
Message ID:
20010426210832.A28419@puffinry.freeserve.co.uk
Well, it's a more general problem with assignments. You need the
parens in order to force list context.
.robin.
--- ext/B/B/Deparse.pm.sent2 Thu Apr 26 20:53:30 2001
+++ ext/B/B/Deparse.pm Thu Apr 26 20:59:15 2001
@@ -1581,6 +1581,7 @@
sub SWAP_CHILDREN () { 1 }
sub ASSIGN () { 2 } # has OP= variant
+sub LIST_CONTEXT () { 4 } # Assignment is in list context
my(%left, %right);
@@ -1683,6 +1684,7 @@
($left, $right) = ($right, $left);
}
$left = $self->deparse_binop_left($op, $left, $prec);
+ $left = "($left)" if $flags & LIST_CONTEXT && $left =~ /^\$/;
$right = $self->deparse_binop_right($op, $right, $prec);
return $self->maybe_parens("$left $opname$eq $right", $cx, $prec);
}
@@ -1729,7 +1731,7 @@
sub pp_scmp { binop(@_, "cmp", 14) }
sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
-sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN) }
+sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
# `.' is special because concats-of-concats are optimized to save copying
# by making all but the first concat stacked. The effect is as if the
Thread Next
-
[PATCH B::Deparse] C<$x = /(.)/> ne C<($x) = /(.)/>
by Robin Houston