From: SASADA Koichi Date: 2010-01-26T20:09:38+09:00 Subject: [ruby-dev:40159] Re: [Bug #2657] rubyspec: The return keyword within define_method goes through the method via a closure FAILED  ささだです. (2010/01/26 19:59), Yusuke Endoh wrote:: > ○原因 > > rb_vm_invoke_proc の中で lambda の中の TAG_RETURN を止めてしまうことが > 原因です。 > > この処理は一見すると、「lambda 中の return が lambda で止まるために > 必要」と思ってしまいますが、TAG_RETURN は普通に vm_exec の中で処理され > goto finish_vme; によって止められますので、不要だと思われます。 > > この処理が不要であることの状況証拠として、 > > - この処理を消してもテストのエラーは増えない (上記の rubyspec の分減る) > > - カバレッジを見ても、上記の rubyspec のテスト以外では実行されていない > (http://dame.dyndns.org:7001/20100126/ruby/vm.c の rb_vm_invoke_proc > の中のこのチェックのカバレッジが 1 回だけ) > > - この処理にはデバッグ用の printf 文が残っている (2008-06-17 の r17390 > からずっと) のに、普通に lambda { return }.call などしても出会わない > > というわけで、当時は必要だったのかもしれませんが、少なくとも現在では > この処理は害でしかないと思います。  はい.仰る通りかと思います.修正して下さいませ. -- // SASADA Koichi at atdot dot net