diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-03 13:48:09 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-03 13:48:09 +0900 |
| commit | 935649b8447053e94ea92375fc9f5a71aed1053e (patch) | |
| tree | 39db07bdcbd6dfc38297702c4f1bf44d38395ad2 | |
| parent | c041206ad15bf73d7e53985fbe47b62640c655d4 (diff) | |
| download | mruby-935649b8447053e94ea92375fc9f5a71aed1053e.tar.gz mruby-935649b8447053e94ea92375fc9f5a71aed1053e.zip | |
Check if a block is a lambda before marking it orphan; ref #3640
| -rw-r--r-- | src/vm.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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; } } |
