From: nobu.nokada@... Date: 2003-06-21T01:42:19+09:00 Subject: Re: 'unexpected break' when captured block calls break Hi, At Fri, 20 Jun 2003 18:47:45 +0900, Yukihiro Matsumoto wrote: > |then Ruby stops with an 'unexpected break' error, which doesn't look right. > > This is a bug. Thank you for finding it. I suspend preview3 release > until I fix this. Although I'm not sure what will be expected, kinds like this? Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.463 diff -u -2 -p -r1.463 eval.c --- eval.c 20 Jun 2003 07:11:40 -0000 1.463 +++ eval.c 20 Jun 2003 16:09:49 -0000 @@ -6941,5 +6941,5 @@ proc_invoke(proc, args, self, klass) volatile VALUE old_wrapper = ruby_wrapper; struct RVarmap * volatile old_dvars = ruby_dyna_vars; - int pcall; + volatile int pcall; if (rb_block_given_p() && ruby_frame->last_func) { @@ -6974,5 +6974,5 @@ proc_invoke(proc, args, self, klass) POP_ITER(); incoming_state = state; - if (ruby_block->tag->dst == state) { + if (pcall || ruby_block->tag->dst == state) { state &= TAG_MASK; } @@ -7007,5 +7007,5 @@ proc_invoke(proc, args, self, klass) break; default: - JUMP_TAG(state); + JUMP_TAG(incoming_state); } return result; -- Nobu Nakada