From: Gurusamy Sarathy Date: Fri, 18 Sep 1998 18:01:37 +0000 (+0000) Subject: delay freeing itervar so C works X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8bb77e1d87aec5c3f7c4bf32f677921213e0f7bd;p=p5sagit%2Fp5-mst-13.2.git delay freeing itervar so C works p4raw-id: //depot/perl@1789 --- diff --git a/cop.h b/cop.h index 4d02019..f15b1e1 100644 --- a/cop.h +++ b/cop.h @@ -143,7 +143,7 @@ struct block_loop { #define POPLOOP2() \ SvREFCNT_dec(cxloop.iterlval); \ if (cxloop.itervar) { \ - SvREFCNT_dec(*cxloop.itervar); \ + sv_2mortal(*cxloop.itervar); \ *cxloop.itervar = cxloop.itersave; \ } \ if (cxloop.iterary && cxloop.iterary != PL_curstack) \ diff --git a/t/cmd/for.t b/t/cmd/for.t index e45f050..d70af57 100755 --- a/t/cmd/for.t +++ b/t/cmd/for.t @@ -1,8 +1,6 @@ #!./perl -# $RCSfile: for.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:09 $ - -print "1..7\n"; +print "1..10\n"; for ($i = 0; $i <= 10; $i++) { $x[$i] = $i; @@ -47,3 +45,13 @@ if ($foo eq '3210abcde') {print "ok 5\n";} else {print "not ok 5 $foo\n";} foreach $foo (("ok 6\n","ok 7\n")) { print $foo; } + +sub foo { + for $i (1..5) { + return $i if $_[0] == $i; + } +} + +print foo(1) == 1 ? "ok" : "not ok", " 8\n"; +print foo(2) == 2 ? "ok" : "not ok", " 9\n"; +print foo(5) == 5 ? "ok" : "not ok", " 10\n";