From 02f189cebcac3a95c64aab44b0d093587958c3ee Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 26 Nov 2023 22:01:10 +0900 Subject: [PATCH] mruby-method (method_to_s): add origin name in the string representation --- mrbgems/mruby-method/src/method.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index f16ab850d..bd49c94d2 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -380,6 +380,7 @@ method_to_s(mrb_state *mrb, mrb_value self) mrb_value klass = mrb_iv_get(mrb, self, MRB_SYM(_klass)); mrb_value name = mrb_iv_get(mrb, self, MRB_SYM(_name)); mrb_value str = mrb_str_new_lit(mrb, "#<"); + mrb_value proc = mrb_iv_get(mrb, self, MRB_SYM(_proc)); mrb_str_cat_cstr(mrb, str, mrb_obj_classname(mrb, self)); mrb_str_cat_lit(mrb, str, ": "); @@ -409,6 +410,17 @@ method_to_s(mrb_state *mrb, mrb_value self) mrb_str_concat(mrb, str, name); } finish:; + const struct RProc *p = mrb_proc_ptr(proc); + if (MRB_PROC_ALIAS_P(p)) { + mrb_sym mid; + while (MRB_PROC_ALIAS_P(p)) { + mid = p->body.mid; + p = p->upper; + } + mrb_str_cat_lit(mrb, str, "("); + mrb_str_concat(mrb, str, mrb_symbol_value(mid)); + mrb_str_cat_lit(mrb, str, ")#"); + } mrb_value loc = method_source_location(mrb, self); if (mrb_array_p(loc) && RARRAY_LEN(loc) == 2) { mrb_str_cat_lit(mrb, str, " ");