From 3c16423c0a81bacd1daae601ac942807f37070ba Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 29 Sep 2022 11:00:49 +0900 Subject: [PATCH] mruby-method/method.c (method_to_s): making it compatible with CRuby. --- mrbgems/mruby-method/src/method.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index 58b133165..c8f133a30 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -399,6 +399,16 @@ method_to_s(mrb_state *mrb, mrb_value self) mrb_str_cat_cstr(mrb, str, mrb_obj_classname(mrb, self)); mrb_str_cat_lit(mrb, str, ": "); + if (mrb_type(owner) == MRB_TT_SCLASS) { + mrb_value recv = mrb_iv_get(mrb, self, MRB_SYM(_recv)); + if (!mrb_nil_p(recv)) { + mrb_str_concat(mrb, str, recv); + mrb_str_cat_lit(mrb, str, "."); + mrb_str_concat(mrb, str, name); + goto finish; + } + } + rklass = mrb_class_ptr(klass); if (mrb_class_ptr(owner) == rklass) { mrb_str_concat(mrb, str, owner); @@ -406,12 +416,14 @@ method_to_s(mrb_state *mrb, mrb_value self) mrb_str_concat(mrb, str, name); } else { - mrb_str_cat_cstr(mrb, str, mrb_class_name(mrb, rklass)); + rklass = mrb_class_real(rklass); /* skip internal class */ + mrb_str_concat(mrb, str, mrb_obj_value(rklass)); mrb_str_cat_lit(mrb, str, "("); mrb_str_concat(mrb, str, owner); mrb_str_cat_lit(mrb, str, ")#"); mrb_str_concat(mrb, str, name); } + finish: mrb_str_cat_lit(mrb, str, ">"); return str; }