mrb_value mrb_obj_iv_inspect(mrb_state *mrb, struct RObject *obj) { iv_tbl *t = obj->iv; int len = iv_size(mrb, t); if (len > 0) { const char *cn = mrb_obj_classname(mrb, mrb_obj_value(obj)); mrb_value str = mrb_sprintf(mrb, "-<%s:%p", cn, (void*)obj); iv_foreach(mrb, t, inspect_i, &str); return str; } return mrb_any_to_s(mrb, mrb_obj_value(obj)); }
/* * call-seq: * obj.inspect -> string * * Returns a string containing a human-readable representation of * <i>obj</i>. If not overridden and no instance variables, uses the * <code>to_s</code> method to generate the string. * <i>obj</i>. If not overridden, uses the <code>to_s</code> method to * generate the string. * * [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]" * Time.new.inspect #=> "2008-03-08 19:43:39 +0900" */ mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value obj) { if ((mrb_type(obj) == MRB_TT_OBJECT) && mrb_obj_basic_to_s_p(mrb, obj)) { long len = ROBJECT_NUMIV(obj); if (len > 0) { mrb_value str; const char *c = mrb_obj_classname(mrb, obj); str = mrb_sprintf(mrb, "-<%s:%p", c, (void*)&obj); return inspect_obj(mrb, obj, str, 0); } return mrb_any_to_s(mrb, obj); } else if (mrb_nil_p(obj)) { return mrb_str_new(mrb, "nil", 3); } return mrb_funcall(mrb, obj, "to_s", 0, 0); }
mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj) { const char *cname = mrb_obj_classname(mrb, obj); return mrb_sprintf(mrb, "#<%s:%p>", cname, mrb_voidp(obj)); }