Re: [ID 20010305.012] chop() against list assignment returns char chopped from el...
Radu Greab [Tue, 6 Mar 2001 23:04:44 +0000 (01:04 +0200)]
Message-ID: <15013.20716.201459.540421@ix.netsoft.ro>

p4raw-id: //depot/perl@9068

pp.c
t/op/chop.t

diff --git a/pp.c b/pp.c
index 1bbb108..4c21f1b 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -745,9 +745,10 @@ PP(pp_schop)
 
 PP(pp_chop)
 {
-    dSP; dMARK; dTARGET;
-    while (SP > MARK)
-       do_chop(TARG, POPs);
+    dSP; dMARK; dTARGET; dORIGMARK;
+    while (MARK < SP)
+       do_chop(TARG, *++MARK);
+    SP = ORIGMARK;
     PUSHTARG;
     RETURN;
 }
index 9eddded..1b55f11 100755 (executable)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..34\n";
+print "1..37\n";
 
 # optimized
 
@@ -104,6 +104,15 @@ $_ = "\x{1234}\x{2345}";
 chop;
 print $_ eq "\x{1234}" ? "ok 33\n" : "not ok 33\n";
 
-# TODO!  Make sure chop(LIST) returns the right value.
 my @stuff = qw(this that);
-print chop(@stuff[0,1]) eq 't' ? "ok 34 # TODO\n" : "not ok 34 # TODO\n";
+print chop(@stuff[0,1]) eq 't' ? "ok 34\n" : "not ok 34\n";
+
+# bug id 20010305.012
+@stuff = qw(ab cd ef);
+print chop(@stuff = @stuff) eq 'f' ? "ok 35\n" : "not ok 35\n";
+
+@stuff = qw(ab cd ef);
+print chop(@stuff[0, 2]) eq 'f' ? "ok 36\n" : "not ok 36\n";
+
+my %stuff = (1..4);
+print chop(@stuff{1, 3}) eq '4' ? "ok 37\n" : "not ok 37\n";