mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #3224 from ksss/define_method
Module#define_method supports proc argument
This commit is contained in:
+13
-1
@@ -1783,9 +1783,21 @@ mod_define_method(mrb_state *mrb, mrb_value self)
|
||||
struct RClass *c = mrb_class_ptr(self);
|
||||
struct RProc *p;
|
||||
mrb_sym mid;
|
||||
mrb_value proc = mrb_undef_value();
|
||||
mrb_value blk;
|
||||
|
||||
mrb_get_args(mrb, "n&", &mid, &blk);
|
||||
mrb_get_args(mrb, "n|o&", &mid, &proc, &blk);
|
||||
switch (mrb_type(proc)) {
|
||||
case MRB_TT_PROC:
|
||||
blk = proc;
|
||||
break;
|
||||
case MRB_TT_UNDEF:
|
||||
/* ignored */
|
||||
break;
|
||||
default:
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %S (expected Proc)", mrb_obj_value(mrb_obj_class(mrb, proc)));
|
||||
break;
|
||||
}
|
||||
if (mrb_nil_p(blk)) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user