なかだです。

At Sat, 12 Oct 2002 12:36:02 +0900,
Nobuyoshi-Nakada wrote:
> え、[ruby-dev:18457]のコードは1.6.7の最新でも例外が発生するんで
> すが…。そっちでもdRubyは失敗しますか?

つーか最初からそう書かれてますね。間抜けすぎ。

これでどうでしょう。1.6と1.7両方です。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.137.2.132 diff -u -2 -p -r1.137.2.132 eval.c --- eval.c 10 Oct 2002 07:01:10 -0000 1.137.2.132 +++ eval.c 12 Oct 2002 05:47:55 -0000 @@ -6374,8 +6374,6 @@ blk_orphan(data) struct BLOCK *data; { - if (!(data->scope->flag & SCOPE_NOSTACK)) { - return 0; - } - if ((data->tag->flags & BLOCK_ORPHAN)) { + if ((data->tag->flags & BLOCK_ORPHAN) && + (data->scope->flag & SCOPE_NOSTACK)) { return 1; }
Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.341 diff -u -2 -p -r1.341 eval.c --- eval.c 5 Oct 2002 15:46:24 -0000 1.341 +++ eval.c 12 Oct 2002 05:44:13 -0000 @@ -6471,8 +6471,6 @@ blk_orphan(data) struct BLOCK *data; { - if (!(data->scope->flags & SCOPE_NOSTACK)) { - return 0; - } - if ((data->tag->flags & BLOCK_ORPHAN)) { + if ((data->tag->flags & BLOCK_ORPHAN) && + (data->scope->flags & SCOPE_NOSTACK)) { return 1; } @@ -6757,4 +6755,7 @@ block_pass(self, node) break; case TAG_BREAK: + if (orphan) { + localjump_error("break from proc-closure", prot_tag->retval); + } result = prot_tag->retval; break;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦