From b2bfcabae2f5a5c567571508e210c58cccfc1f70 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 21 Nov 2020 22:31:13 +0900 Subject: Improved `Object#define_singleton_method` Integrate the implementation with `Module#define_method`. - Introduce the internal function `mrb_mod_define_method_m()` (no static) - The `Object#define_singleton_method` method can now accept a second argument --- src/class.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index e28951499..6ec2ab8ca 100644 --- a/src/class.c +++ b/src/class.c @@ -2418,10 +2418,9 @@ mrb_mod_method_defined(mrb_state *mrb, mrb_value mod) return mrb_bool_value(mrb_obj_respond_to(mrb, mrb_class_ptr(mod), id)); } -static mrb_value -mod_define_method(mrb_state *mrb, mrb_value self) +mrb_value +mrb_mod_define_method_m(mrb_state *mrb, struct RClass *c) { - struct RClass *c = mrb_class_ptr(self); struct RProc *p; mrb_method_t m; mrb_sym mid; @@ -2451,10 +2450,16 @@ mod_define_method(mrb_state *mrb, mrb_value self) return mrb_symbol_value(mid); } +static mrb_value +mod_define_method(mrb_state *mrb, mrb_value self) +{ + return mrb_mod_define_method_m(mrb, mrb_class_ptr(self)); +} + static mrb_value top_define_method(mrb_state *mrb, mrb_value self) { - return mod_define_method(mrb, mrb_obj_value(mrb->object_class)); + return mrb_mod_define_method_m(mrb, mrb->object_class); } static mrb_value -- cgit v1.2.3