summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-06-24 13:11:36 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-06-24 13:13:59 +0900
commit888be9611b60bc7739d797e6defaf903b260b62d (patch)
treee10e43fe7a071def02906780238c7bba2ae25614 /src/vm.c
parentf314a5132edb5efbb7c81b7f9c97d0197e001c1e (diff)
downloadmruby-888be9611b60bc7739d797e6defaf903b260b62d.tar.gz
mruby-888be9611b60bc7739d797e6defaf903b260b62d.zip
class.c: call hook methods on method definitions; close #2339
- `Module#method_added` - `BasicObject#singleton_method_added`
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 560887f00..f76ce9eac 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1135,6 +1135,7 @@ get_send_args(mrb_state *mrb, mrb_int argc, mrb_value *regs)
mrb_value mrb_obj_missing(mrb_state *mrb, mrb_value mod);
void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self);
+void mrb_method_added(mrb_state *mrb, struct RClass *c, mrb_sym mid);
MRB_API mrb_value
mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc)
@@ -2893,9 +2894,11 @@ RETRY_TRY_BLOCK:
struct RClass *target = mrb_class_ptr(regs[a]);
struct RProc *p = mrb_proc_ptr(regs[a+1]);
mrb_method_t m;
+ mrb_sym mid = syms[b];
MRB_METHOD_FROM_PROC(m, p);
- mrb_define_method_raw(mrb, target, syms[b], m);
+ mrb_define_method_raw(mrb, target, mid, m);
+ mrb_method_added(mrb, target, mid);
mrb_gc_arena_restore(mrb, ai);
NEXT;
}