summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-30 16:51:40 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-08-30 16:51:40 +0900
commitfe3227cd5c7e3a05923eb9e430cc60c6808759bb (patch)
treef9a03d411b9ead9b3aa94a41ebe096c16ba5ab87 /src/proc.c
parent483a038d39e7f8ff2b093819758c997014f88979 (diff)
downloadmruby-fe3227cd5c7e3a05923eb9e430cc60c6808759bb.tar.gz
mruby-fe3227cd5c7e3a05923eb9e430cc60c6808759bb.zip
Set the ORPHAN flag in `Proc.new`; fix #3798
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/proc.c b/src/proc.c
index b30a682ac..96b080f9e 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -163,7 +163,11 @@ mrb_proc_s_new(mrb_state *mrb, mrb_value proc_class)
p = (struct RProc *)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb_class_ptr(proc_class));
mrb_proc_copy(p, mrb_proc_ptr(blk));
proc = mrb_obj_value(p);
- mrb_funcall_with_block(mrb, proc, mrb_intern_lit(mrb, "initialize"), 0, NULL, blk);
+ mrb_funcall_with_block(mrb, proc, mrb_intern_lit(mrb, "initialize"), 0, NULL, proc);
+ if (!MRB_PROC_STRICT_P(p) &&
+ mrb->c->ci > mrb->c->cibase && p->env == mrb->c->ci[-1].env) {
+ p->flags |= MRB_PROC_ORPHAN;
+ }
return proc;
}