From 9e3e7b2cfe81171e73bfcfa697e52ce7431bca89 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 31 Jan 2025 12:35:31 +0900 Subject: [PATCH] mruby-metaprog: add 3 new methods to retrieve instance method names - public_instance_methods - private_instance_methods - protected_instance_methods --- mrbgems/mruby-metaprog/src/metaprog.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index e357937e7..07b182b32 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -563,6 +563,24 @@ mrb_mod_instance_methods(mrb_state *mrb, mrb_value mod) return mod_instance_methods(mrb, mod, MT_NOPRIV); } +static mrb_value +mrb_mod_public_instance_methods(mrb_state *mrb, mrb_value mod) +{ + return mod_instance_methods(mrb, mod, MT_PUBLIC); +} + +static mrb_value +mrb_mod_private_instance_methods(mrb_state *mrb, mrb_value mod) +{ + return mod_instance_methods(mrb, mod, MT_PRIVATE); +} + +static mrb_value +mrb_mod_protected_instance_methods(mrb_state *mrb, mrb_value mod) +{ + return mod_instance_methods(mrb, mod, MT_PROTECTED); +} + static int undefined_method_i(mrb_state *mrb, mrb_sym mid, mrb_method_t m, void *p) { @@ -683,6 +701,9 @@ mrb_mruby_metaprog_gem_init(mrb_state* mrb) mrb_define_method_id(mrb, mod, MRB_SYM(class_variable_set), mrb_mod_cvar_set, MRB_ARGS_REQ(2)); /* 15.2.2.4.18 */ mrb_define_method_id(mrb, mod, MRB_SYM(included_modules), mrb_mod_included_modules, MRB_ARGS_NONE()); /* 15.2.2.4.30 */ mrb_define_method_id(mrb, mod, MRB_SYM(instance_methods), mrb_mod_instance_methods, MRB_ARGS_ANY()); /* 15.2.2.4.33 */ + mrb_define_method_id(mrb, mod, MRB_SYM(public_instance_methods), mrb_mod_public_instance_methods, MRB_ARGS_OPT(1)); + mrb_define_method_id(mrb, mod, MRB_SYM(private_instance_methods), mrb_mod_private_instance_methods, MRB_ARGS_OPT(1)); + mrb_define_method_id(mrb, mod, MRB_SYM(protected_instance_methods), mrb_mod_protected_instance_methods, MRB_ARGS_OPT(1)); mrb_define_method_id(mrb, mod, MRB_SYM(undefined_instance_methods), mrb_mod_undefined_methods, MRB_ARGS_NONE()); mrb_define_method_id(mrb, mod, MRB_SYM(remove_method), mrb_mod_remove_method, MRB_ARGS_ANY()); /* 15.2.2.4.41 */ mrb_define_method_id(mrb, mod, MRB_SYM(method_removed), mrb_f_nil, MRB_ARGS_REQ(1));