From 935649b8447053e94ea92375fc9f5a71aed1053e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 3 Jun 2017 13:48:09 +0900 Subject: Check if a block is a lambda before marking it orphan; ref #3640 --- src/vm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index a9f176878..3a5df91a2 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1335,7 +1335,7 @@ RETRY_TRY_BLOCK: if (mrb_type(blk) == MRB_TT_PROC) { struct RProc *p = mrb_proc_ptr(blk); - if (p && p->env == ci[-1].env) { + if (p && !MRB_PROC_STRICT_P(p) && p->env == ci[-1].env) { p->flags |= MRB_PROC_ORPHAN; } } @@ -1775,7 +1775,8 @@ RETRY_TRY_BLOCK: if (mrb_type(blk) == MRB_TT_PROC) { struct RProc *p = mrb_proc_ptr(blk); - if (ci > mrb->c->cibase && p->env == ci[-1].env) { + if (!MRB_PROC_STRICT_P(proc) && + ci > mrb->c->cibase && p->env == ci[-1].env) { p->flags |= MRB_PROC_ORPHAN; } } -- cgit v1.2.3