summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c18
1 files changed, 17 insertions, 1 deletions
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;