Change 28488 by rgs@marais on 2006/07/05 20:00:10
Fix a bug on setting PpASSIGN_CMMN on a AASSIGN op when the left
side is made out a list declared with our(). In this case PpLVAL_INTR
isn't set on the left op, so we just remove that check. Add new tests.
Affected files
//depot/perl/op.c#830 edit
//depot/perl/t/op/array.t#27 edit
Differences
//depot/perl/op.c#830 (text)
Index: perl/op.c
perl/op.c#829~28465~2006-07-02 12:30:49.000000000 -0700
perl/op.c2006-07-05 13:00:10.000000000 -0700
@@ -3783,7 +3783,6 @@
* to store these values, evil chicanery is done with SvCUR().
*/
-if (!(left->op_private & PpLVAL_INTR)) {
P *lastop = o;
PL_generation++;
for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
@@ -3837,7 +3836,6 @@
}
if (curop != o)
o->op_private |= PpASSIGN_CMMN;
-}
if (right && right->op_type == P_SPLIT) {
P* tmpop = ((LISTP*)right)->op_first;
if (tmpop && (tmpop->op_type == P_PUSHRE)) {
//depot/perl/t/op/array.t#27 (xtext)
Index: perl/t/op/array.t
perl/t/op/array.t#26~26186~2005-11-21 19:32:04.000000000 -0800
perl/t/op/array.t2006-07-05 13:00:10.000000000 -0700
@@ -7,7 +7,7 @@
require 'test.pl';
-plan (117);
+plan (125);
#
# @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them
@@ -176,7 +176,6 @@
# try the same with my
{
-
my @bee = @bee;
is("@bee", "foo bar burbl blah");# 54
{
@@ -202,6 +201,29 @@
is("@bee", "foo bar burbl blah");# 63
}
+# try the same with our (except that previous values aren't restored)
+{
+ our @bee = @bee;
+ is("@bee", "foo bar burbl blah");
+ {
+our (undef,@bee) = @bee;
+is("@bee", "bar burbl blah");
+{
+ our @bee = ('XXX',@bee,'YYY');
+ is("@bee", "XXX bar burbl blah YYY");
+ {
+our @bee = our @bee = qw(foo bar burbl blah);
+is("@bee", "foo bar burbl blah");
+{
+ our (@bim) = our(@bee) = qw(foo bar);
+ is("@bee", "foo bar");
+ is("@bim", "foo bar");
+}
+ }
+}
+ }
+}
+
# make sure reification behaves
my $t = curr_test();
sub reify { $_[1] = $t++; print "@_\n"; }
@@ -384,4 +406,18 @@
is ($4[8], 23);
}
+# more tests for AASSIGN_CMMN
+
+{
+ our($x,$y,$z) = (13);
+ our($y,$z) = ($x,$y);
+ is("$x $y $z", "1 1 2");
+}
+{
+ our($x,$y,$z) = (13);
+ (our $y, our $z) = ($x,$y);
+ is("$x $y $z", "1 1 2");
+}
+
+
"We're included by lib/Tie/Array/std.t so we need to return something true";
End of Patch.