Remove implicit conversion using to_str method; fix #3854

We have added internal convenience method `__to_str` which
does string type check.

The issue #3854 was fixed but fundamental flaw of lack of stack
depth check along with fibers still remains. Use `MRB_GC_FIXED_ARENA`
for workaround.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2018-09-19 21:51:53 +09:00
parent afca99a40b
commit ff08856fe3
13 changed files with 60 additions and 114 deletions
+27
View File
@@ -579,6 +579,33 @@ mrb_Float(mrb_state *mrb, mrb_value val)
}
#endif
MRB_API mrb_value
mrb_to_str(mrb_state *mrb, mrb_value val)
{
if (!mrb_string_p(val)) {
mrb_value type = inspect_type(mrb, val);
mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S to String", type);
}
return val;
}
MRB_API mrb_value
mrb_ensure_string_type(mrb_state *mrb, mrb_value str)
{
if (!mrb_string_p(str)) {
mrb_raisef(mrb, E_TYPE_ERROR, "%S cannot be converted to String",
inspect_type(mrb, str));
}
return str;
}
MRB_API mrb_value
mrb_check_string_type(mrb_state *mrb, mrb_value str)
{
if (!mrb_string_p(str)) return mrb_nil_value();
return str;
}
MRB_API mrb_value
mrb_inspect(mrb_state *mrb, mrb_value obj)
{