diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-01-29 06:12:56 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-01-29 06:12:56 +0000 |
commit | f2b35a912878fd30ed3cf4823847a2f130e87ab2 (patch) | |
tree | 234cf0e66fec833d8bbc43d41d0e56c1558f5072 /eval.c | |
parent | df8f0f0f0f4c226ff45ae7bed2ec55b685c5c56f (diff) | |
download | ruby-f2b35a912878fd30ed3cf4823847a2f130e87ab2.tar.gz ruby-f2b35a912878fd30ed3cf4823847a2f130e87ab2.tar.xz ruby-f2b35a912878fd30ed3cf4823847a2f130e87ab2.zip |
* eval.c (block_pass): return from block jumps directory to
block invoker.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -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; |