GitHub

@@ -380,7 +380,6 @@ method_to_s(mrb_state *mrb, mrb_value self)

380380

mrb_value klass = mrb_iv_get(mrb, self, MRB_SYM(_klass));

381381

mrb_value name = mrb_iv_get(mrb, self, MRB_SYM(_name));

382382

mrb_value str = mrb_str_new_lit(mrb, "#<");

383-

struct RClass *rklass;

384383385384

mrb_str_cat_cstr(mrb, str, mrb_obj_classname(mrb, self));

386385

mrb_str_cat_lit(mrb, str, ": ");

@@ -394,14 +393,15 @@ method_to_s(mrb_state *mrb, mrb_value self)

394393

}

395394

}

396395397-

rklass = mrb_class_ptr(klass);

398-

if (mrb_class_ptr(owner) == rklass) {

396+

struct RClass *ok = mrb_class_ptr(owner);

397+

struct RClass *rk = mrb_class_ptr(klass);

398+

struct RClass *rklass = mrb_class_real(rk); /* skip internal class */

399+

if (ok == rk || ok == rklass) {

399400

mrb_str_concat(mrb, str, owner);

400401

mrb_str_cat_lit(mrb, str, "#");

401402

mrb_str_concat(mrb, str, name);

402403

}

403404

else {

404-

rklass = mrb_class_real(rklass); /* skip internal class */

405405

mrb_str_concat(mrb, str, mrb_obj_value(rklass));

406406

mrb_str_cat_lit(mrb, str, "(");

407407

mrb_str_concat(mrb, str, owner);

Read the original on github.com ↗