From 6168b15e0e273d1335db3792ef25e3376fd46c87 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 12 Feb 2025 16:41:54 +0900 Subject: [PATCH] class.c (undef_method): call hook method when undef'ing a method --- src/class.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/class.c b/src/class.c index 80c44d324..69dc3c033 100644 --- a/src/class.c +++ b/src/class.c @@ -2364,9 +2364,23 @@ static void undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a) { mrb_method_t m; + mrb_sym undefined; + mrb_value recv; MRB_METHOD_FROM_PROC(m, NULL); mrb_define_method_raw(mrb, c, a, m); + if (c->tt == MRB_TT_SCLASS) { + undefined = MRB_SYM(singleton_method_undefined); + recv = mrb_iv_get(mrb, mrb_obj_value(c), MRB_SYM(__attached__)); + } + else { + undefined = MRB_SYM(method_undefined); + recv = mrb_obj_value(c); + } + if (!mrb_func_basic_p(mrb, recv, undefined, mrb_do_nothing)) { + mrb_value sym = mrb_symbol_value(a); + mrb_funcall_argv(mrb, recv, undefined, 1, &sym); + } } MRB_API void