From: matz@... (Yukihiro Matsumoto) Date: 2003-09-17T12:26:32+09:00 Subject: [ruby-dev:21388] Re: LocalJumpError -> ThreadError まつもと ゆきひろです In message "[ruby-dev:21386] Re: LocalJumpError -> ThreadError" on 03/09/17, Masatoshi Seki writes: |> もともとThread内部でのreturnにはThreadErrorをあげていたはず |> です(だから仕様変更のつもりではない)。たぶんどこかで微妙に動 |> 作が違ってしまったのでしょう。再現スクリプトはありますか? | |後者(return)はまだ準備できていませんが、前者(break)はdrbのrunit/test_drb.rbです。 |irbではこんな感じです。 今朝調べてみたら、純正1.8.0ではbreakでは例外をあげていません でした。以下のパッチでどうでしょう。 returnの方は引き続きお待ちしております。 --- eval.c 12 Sep 2003 03:30:45 -0000 1.535 +++ eval.c 17 Sep 2003 03:25:36 -0000 @@ -4030,3 +4030,3 @@ localjump_destination(state, scope, retv while (tt) { - if (tt->tag == PROT_PCALL || + if (tt->tag == PROT_PCALL || (tt->tag == PROT_THREAD && state == TAG_BREAK) || (tt->tag == PROT_CALL || tt->tag == tag) && tt->scope == scope) { @@ -4038,4 +4038,3 @@ localjump_destination(state, scope, retv if (tt->tag == PROT_THREAD) { - rb_raise(rb_eThreadError, "%s jump can't across threads", - (state == TAG_BREAK) ? "break" : "return"); + rb_raise(rb_eThreadError, "return jump can't across threads"); }