summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-06-03 13:48:09 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-06-03 13:48:09 +0900
commit935649b8447053e94ea92375fc9f5a71aed1053e (patch)
tree39db07bdcbd6dfc38297702c4f1bf44d38395ad2
parentc041206ad15bf73d7e53985fbe47b62640c655d4 (diff)
downloadmruby-935649b8447053e94ea92375fc9f5a71aed1053e.tar.gz
mruby-935649b8447053e94ea92375fc9f5a71aed1053e.zip
Check if a block is a lambda before marking it orphan; ref #3640
-rw-r--r--src/vm.c5
1 files changed, 3 insertions, 2 deletions
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;
}
}