From 73b05f0130b447315a411e7c7252859dad8e7b4d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 20 Dec 2017 17:25:08 +0900 Subject: Should not overwrite `MRB_PROC_TARGET_CLASS(p)` if `p` has env; fix #3905 --- src/class.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') 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); } -- cgit v1.2.3