summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorMasamitsu MURASE <[email protected]>2013-01-31 02:27:42 +0900
committerMasamitsu MURASE <[email protected]>2013-01-31 02:27:42 +0900
commitee0cfb2101901164b601e8c75b6c37427532d884 (patch)
treeba2ce8206cf474d4252ce7b20514f403f0c22407 /src/class.c
parenta943942ca747e994060c860497e2eb73b25337dc (diff)
downloadmruby-ee0cfb2101901164b601e8c75b6c37427532d884.tar.gz
mruby-ee0cfb2101901164b601e8c75b6c37427532d884.zip
Bug fix.
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index 0043d95b4..136a07cb6 100644
--- a/src/class.c
+++ b/src/class.c
@@ -293,7 +293,9 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, struct RPro
if (!h) h = c->mt = kh_init(mt, mrb);
k = kh_put(mt, h, mid);
kh_value(h, k) = p;
- mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ if (p) {
+ mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ }
}
void
@@ -304,7 +306,6 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
p = mrb_proc_new_cfunc(mrb, func);
p->target_class = c;
mrb_define_method_raw(mrb, c, mid, p);
- mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
}
void
@@ -324,6 +325,9 @@ mrb_define_method_vm(mrb_state *mrb, struct RClass *c, mrb_sym name, mrb_value b
k = kh_put(mt, h, name);
p = mrb_proc_ptr(body);
kh_value(h, k) = p;
+ if (p) {
+ mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ }
}
static mrb_value