diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-08-03 20:17:04 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-08-03 20:17:04 +0900 |
| commit | 730f53045eb85cf995b0b675ea2818a682810a4f (patch) | |
| tree | 692a86a56261fc86e809e264fcbe475c649d64d3 /src/class.c | |
| parent | 77aa261f3bcb9ab93e1ea9a9d89f8cba51b98873 (diff) | |
| download | mruby-730f53045eb85cf995b0b675ea2818a682810a4f.tar.gz mruby-730f53045eb85cf995b0b675ea2818a682810a4f.zip | |
define_method to copy block body
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c index 29ec18e13..df42820e5 100644 --- a/src/class.c +++ b/src/class.c @@ -1364,14 +1364,17 @@ static mrb_value mod_define_method(mrb_state *mrb, mrb_value self) { struct RClass *c = mrb_class_ptr(self); + struct RProc *p; mrb_sym mid; mrb_value blk; mrb_get_args(mrb, "n&", &mid, &blk); if (mrb_nil_p(blk)) { - /* raise */ + mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given"); } - mrb_define_method_raw(mrb, c, mid, mrb_proc_ptr(blk)); + p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class); + mrb_proc_copy(p, mrb_proc_ptr(blk)); + mrb_define_method_raw(mrb, c, mid, p); return blk; } |
