From 35e5ddf6cf001cd57ac61453c347b40acf775f47 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 29 Jan 2001 06:12:56 +0000 Subject: * eval.c (block_pass): return from block jumps directory to block invoker. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index e833b74f19..3292cc411d 100644 --- a/eval.c +++ b/eval.c @@ -6333,7 +6333,23 @@ block_pass(self, node) POP_TAG(); POP_ITER(); if (_block.tag->dst == state) { - state &= TAG_MASK; + if (orphan) { + state &= TAG_MASK; + } + else { + struct BLOCK *ptr = old_block; + + while (ptr) { + if (ptr->scope == _block.scope) { + ptr->tag->dst = state; + break; + } + ptr = ptr->prev; + } + if (!ptr) { + state &= TAG_MASK; + } + } } ruby_block = old_block; ruby_safe_level = safe; -- cgit v1.2.3