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 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;
}