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
This commit is contained in:
dearblue
2020-11-21 22:31:13 +09:00
parent 544784effd
commit b2bfcabae2
2 changed files with 12 additions and 16 deletions
+9 -4
View File
@@ -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