summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-11-22 00:02:34 +0900
committerGitHub <[email protected]>2020-11-22 00:02:34 +0900
commite02d0ff78c0e521e679fb0bc3b9032e13cadc5c6 (patch)
treeb1a09fc8fac8afc1fc339ca43969f3e2ac3c6eaa /mrbgems
parent049e749c8b12c79a7439ce0fdb402896807eb42b (diff)
parentb2bfcabae2f5a5c567571508e210c58cccfc1f70 (diff)
downloadmruby-e02d0ff78c0e521e679fb0bc3b9032e13cadc5c6.tar.gz
mruby-e02d0ff78c0e521e679fb0bc3b9032e13cadc5c6.zip
Merge pull request #5167 from dearblue/singleton-method
Improved `Object#define_singleton_method`
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-metaprog/src/metaprog.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c
index 8bc9ab038..8afd85c86 100644
--- a/mrbgems/mruby-metaprog/src/metaprog.c
+++ b/mrbgems/mruby-metaprog/src/metaprog.c
@@ -401,21 +401,12 @@ mrb_obj_singleton_methods_m(mrb_state *mrb, mrb_value self)
return mrb_obj_singleton_methods(mrb, recur, self);
}
+mrb_value mrb_mod_define_method_m(mrb_state *mrb, struct RClass *c);
+
static mrb_value
mod_define_singleton_method(mrb_state *mrb, mrb_value self)
{
- struct RProc *p;
- mrb_method_t m;
- mrb_sym mid;
- mrb_value blk = mrb_nil_value();
-
- mrb_get_args(mrb, "n&!", &mid, &blk);
- p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
- mrb_proc_copy(p, mrb_proc_ptr(blk));
- p->flags |= MRB_PROC_STRICT;
- MRB_METHOD_FROM_PROC(m, p);
- mrb_define_method_raw(mrb, mrb_class_ptr(mrb_singleton_class(mrb, self)), mid, m);
- return mrb_symbol_value(mid);
+ return mrb_mod_define_method_m(mrb, mrb_class_ptr(mrb_singleton_class(mrb, self)));
}
static mrb_bool