summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index a35eb4c92..77a7050da 100644
--- a/src/class.c
+++ b/src/class.c
@@ -436,8 +436,11 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, struct RPro
k = kh_put(mt, mrb, h, mid);
kh_value(h, k) = p;
if (p) {
+ p->flags |= MRB_PROC_SCOPE;
p->c = NULL;
- mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ 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);
}
mc_clear_by_id(mrb, c, mid);
}
@@ -449,7 +452,7 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
int ai = mrb_gc_arena_save(mrb);
p = mrb_proc_new_cfunc(mrb, func);
- p->target_class = c;
+ MRB_PROC_SET_TARGET_CLASS(p, c);
mrb_define_method_raw(mrb, c, mid, p);
mrb_gc_arena_restore(mrb, ai);
}