summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-12-20 17:25:08 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-12-20 19:37:26 +0900
commit73b05f0130b447315a411e7c7252859dad8e7b4d (patch)
tree797b20349fb7470fd02ac7a44f83fbd81b494fd3 /src/class.c
parent165e7b181b8a238aa546bd78b0baef1312e7000f (diff)
downloadmruby-73b05f0130b447315a411e7c7252859dad8e7b4d.tar.gz
mruby-73b05f0130b447315a411e7c7252859dad8e7b4d.zip
Should not overwrite `MRB_PROC_TARGET_CLASS(p)` if `p` has env; fix #3905
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index fd2b0be9e..132cf0176 100644
--- a/src/class.c
+++ b/src/class.c
@@ -443,8 +443,9 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_
p->flags |= MRB_PROC_SCOPE;
p->c = NULL;
mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)p);
- MRB_PROC_SET_TARGET_CLASS(p, c);
- mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)c);
+ if (!MRB_PROC_ENV_P(p)) {
+ MRB_PROC_SET_TARGET_CLASS(p, c);
+ }
}
mc_clear_by_id(mrb, c, mid);
}