summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-23 12:10:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-23 12:10:40 +0000
commit5bf61f45408435904c2d635b2004fd3235eca68d (patch)
tree2cae692acbb46c267b032915278a0ed3e0131cba /error.c
parente3b0788378d259125c52aee554afe9845e012c19 (diff)
error.c: separate class names
* error.c (name_err_mesg_to_str): separate class names from the receiver description. * vm_eval.c (make_no_method_exception, raise_method_missing): add format specifiers for class names. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r--error.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/error.c b/error.c
index ce641a0c0d..be9f334296 100644
--- a/error.c
+++ b/error.c
@@ -1219,20 +1219,19 @@ name_err_mesg_to_str(VALUE obj)
mesg = ptr[NAME_ERR_MESG__MESG];
if (NIL_P(mesg)) return Qnil;
else {
- const char *desc = 0;
- VALUE d = 0, args[NAME_ERR_MESG_COUNT];
- int state = 0;
+ VALUE c, s, d = 0, args[4];
+ int state = 0, singleton = 0;
obj = ptr[NAME_ERR_MESG__RECV];
switch (obj) {
case Qnil:
- desc = "nil";
+ d = rb_fstring_cstr("nil");
break;
case Qtrue:
- desc = "true";
+ d = rb_fstring_cstr("true");
break;
case Qfalse:
- desc = "false";
+ d = rb_fstring_cstr("false");
break;
default:
d = rb_protect(rb_inspect, obj, &state);
@@ -1241,18 +1240,22 @@ name_err_mesg_to_str(VALUE obj)
if (NIL_P(d) || RSTRING_LEN(d) > 65) {
d = rb_any_to_s(obj);
}
- desc = RSTRING_PTR(d);
+ singleton = (RSTRING_LEN(d) > 0 && RSTRING_PTR(d)[0] == '#');
+ d = QUOTE(d);
break;
}
- if (desc && desc[0] != '#') {
- d = d ? rb_str_dup(d) : rb_str_new2(desc);
- rb_str_cat2(d, ":");
- rb_str_append(d, rb_class_name(CLASS_OF(obj)));
+ if (!singleton) {
+ s = rb_fstring_cstr(":");
+ c = rb_class_name(CLASS_OF(obj));
}
- args[0] = mesg;
- args[1] = ptr[NAME_ERR_MESG__NAME];
- args[2] = d;
- mesg = rb_f_sprintf(NAME_ERR_MESG_COUNT, args);
+ else {
+ c = s = rb_fstring_cstr("");
+ }
+ args[0] = ptr[NAME_ERR_MESG__NAME];
+ args[1] = d;
+ args[2] = s;
+ args[3] = c;
+ mesg = rb_str_format(4, args, mesg);
}
return mesg;
}