diff options
| author | ksss <[email protected]> | 2016-10-12 22:05:14 +0900 |
|---|---|---|
| committer | ksss <[email protected]> | 2016-10-12 22:19:54 +0900 |
| commit | efe4f30b3982e8ff85a9142933955d6fa0bdebc7 (patch) | |
| tree | e8abf65b51d1fbd5399adf7ae6611b3b6b452649 /src/class.c | |
| parent | 9d3167cabe64b61ce707a00a3a3108b580cf5d11 (diff) | |
| download | mruby-efe4f30b3982e8ff85a9142933955d6fa0bdebc7.tar.gz mruby-efe4f30b3982e8ff85a9142933955d6fa0bdebc7.zip | |
Module#define_method supports proc argument
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c index 47a6c846b..00fc9c12e 100644 --- a/src/class.c +++ b/src/class.c @@ -1773,9 +1773,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"); } |
