From: nobu.nakada@... Date: 2004-03-26T17:41:15+09:00 Subject: [ruby-dev:23229] Re: (retry; 0).xxx {} dumps core なかだです。 At Fri, 26 Mar 2004 15:58:09 +0900, Tanaka Akira wrote in [ruby-dev:23227]: > ふと気がついたのですが、[ruby-dev:19293] に書いて誰にも反応されなかっ > た例が core を吐くように挙動が変化していることに気がつきました。 > > % ruby -ve '(retry; 0).xxx {}' > ruby 1.9.0 (2004-03-25) [i686-linux] > -e:1: warning: statement not reached レシーバの評価中は外側のブロックになるのに、retryしたときにその まま再度評価に行こうとするするようです。 しかし、 (break; 0).xxx {} がエラーにならないのは気になるなぁ。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.649 diff -u -2 -p -r1.649 eval.c --- eval.c 23 Mar 2004 19:14:12 -0000 1.649 +++ eval.c 26 Mar 2004 08:11:17 -0000 @@ -2960,5 +2960,5 @@ rb_eval(self, n) state = 0; } - else if (state == TAG_RETRY) { + else if (state == TAG_RETRY && ruby_block == &_block) { state = 0; goto iter_retry; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦