diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-10-23 12:10:40 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-10-23 12:10:40 +0000 |
commit | 5bf61f45408435904c2d635b2004fd3235eca68d (patch) | |
tree | 2cae692acbb46c267b032915278a0ed3e0131cba /error.c | |
parent | e3b0788378d259125c52aee554afe9845e012c19 (diff) | |
download | ruby-5bf61f45408435904c2d635b2004fd3235eca68d.tar.gz |
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.c | 33 |
1 files changed, 18 insertions, 15 deletions
@@ -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; } |