mirb dies if #inspect returns a non-string value; fix #2666

parent 44c29e88
......@@ -74,16 +74,21 @@ get_history_path(mrb_state *mrb)
static void
p(mrb_state *mrb, mrb_value obj, int prompt)
{
obj = mrb_funcall(mrb, obj, "inspect", 0);
mrb_value val;
val = mrb_funcall(mrb, obj, "inspect", 0);
if (prompt) {
if (!mrb->exc) {
fputs(" => ", stdout);
}
else {
obj = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
val = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
}
}
if (!mrb_string_p(val)) {
val = mrb_obj_as_string(mrb, obj);
}
fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
fwrite(RSTRING_PTR(val), RSTRING_LEN(val), 1, stdout);
putc('\n', stdout);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment