diff options
| author | Masamitsu MURASE <[email protected]> | 2013-01-31 02:27:42 +0900 |
|---|---|---|
| committer | Masamitsu MURASE <[email protected]> | 2013-01-31 02:27:42 +0900 |
| commit | ee0cfb2101901164b601e8c75b6c37427532d884 (patch) | |
| tree | ba2ce8206cf474d4252ce7b20514f403f0c22407 /src | |
| parent | a943942ca747e994060c860497e2eb73b25337dc (diff) | |
| download | mruby-ee0cfb2101901164b601e8c75b6c37427532d884.tar.gz mruby-ee0cfb2101901164b601e8c75b6c37427532d884.zip | |
Bug fix.
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 8 |
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 |
