diff options
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -2004,8 +2004,9 @@ rb_convert_type(val, type, tname, method) if (TYPE(val) == type) return val; v = convert_type(val, tname, method, Qtrue); if (TYPE(v) != type) { - rb_raise(rb_eTypeError, "%s#%s should return %s", - rb_obj_classname(val), method, tname); + char *cname = rb_obj_classname(val); + rb_raise(rb_eTypeError, "cannot convert %s to %s (%s#%s gives %s)", + cname, tname, cname, method, rb_obj_classname(v)); } return v; } @@ -2023,8 +2024,9 @@ rb_check_convert_type(val, type, tname, method) v = convert_type(val, tname, method, Qfalse); if (NIL_P(v)) return Qnil; if (TYPE(v) != type) { - rb_raise(rb_eTypeError, "%s#%s should return %s", - rb_obj_classname(val), method, tname); + char *cname = rb_obj_classname(val); + rb_raise(rb_eTypeError, "cannot convert %s to %s (%s#%s gives %s)", + cname, tname, cname, method, rb_obj_classname(v)); } return v; } @@ -2037,8 +2039,9 @@ rb_to_integer(val, method) { VALUE v = convert_type(val, "Integer", method, Qtrue); if (!rb_obj_is_kind_of(v, rb_cInteger)) { - rb_raise(rb_eTypeError, "%s#%s should return Integer", - rb_obj_classname(val), method); + char *cname = rb_obj_classname(val); + rb_raise(rb_eTypeError, "cannot convert %s to Integer (%s#%s gives %s)", + cname, cname, method, rb_obj_classname(v)); } return v; } |