From: nobu.nakada@... Date: 2004-03-02T11:03:04+09:00 Subject: [ruby-dev:23098] Re: [ruby-cvs] ruby: * eval.c (localjump_destination): lambda should not interfere なかだです。 At Tue, 2 Mar 2004 08:32:49 +0900, Yukihiro Matsumoto wrote in [ruby-dev:23096]: > * トップレベルスコープに属するブロックがorphanでないのに > orphan扱いされる なるほど。それは見落としてました。 > * breakのexit_valueが正しく伝搬されない 一応これで通るんですが、直前のprot_tagに依存させるくらいならもっ とストレートな方法があるんじゃないかという気が。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.639 diff -u -2 -p -r1.639 eval.c --- eval.c 27 Feb 2004 13:29:56 -0000 1.639 +++ eval.c 2 Mar 2004 01:56:14 -0000 @@ -1258,4 +1258,5 @@ ruby_init() POP_SCOPE(); ruby_scope = top_scope; + top_scope->flags &= ~SCOPE_NOSTACK; ruby_running = 1; } @@ -3339,5 +3340,5 @@ rb_eval(self, n) case TAG_RETURN: case TAG_BREAK: - localjump_destination(state, result); + if (jump_chain) localjump_destination(state, result); default: JUMP_TAG(state); @@ -4653,5 +4654,5 @@ rb_yield_0(val, self, klass, flags, aval PUSH_ITER(block->iter); - PUSH_TAG(lambda ? PROT_NONE : PROT_YIELD); + PUSH_TAG(prot_tag->tag == PROT_PCALL ? PROT_NONE : PROT_YIELD); if ((state = EXEC_TAG()) == 0) { redo: -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦