summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vm_backtrace.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/vm_backtrace.c b/vm_backtrace.c
index 9948654ad2..d461f05586 100644
--- a/vm_backtrace.c
+++ b/vm_backtrace.c
@@ -288,14 +288,18 @@ location_absolute_path_m(VALUE self)
static VALUE
location_format(VALUE file, int lineno, VALUE name)
{
+ VALUE s = rb_enc_sprintf(rb_enc_compatible(file, name), "%s", RSTRING_PTR(file));
if (lineno != 0) {
- return rb_enc_sprintf(rb_enc_compatible(file, name), "%s:%d:in `%s'",
- RSTRING_PTR(file), lineno, RSTRING_PTR(name));
+ rb_str_catf(s, ":%d", lineno);
+ }
+ rb_str_cat_cstr(s, ":in ");
+ if (NIL_P(name)) {
+ rb_str_cat_cstr(s, "unknown method");
}
else {
- return rb_enc_sprintf(rb_enc_compatible(file, name), "%s:in `%s'",
- RSTRING_PTR(file), RSTRING_PTR(name));
+ rb_str_catf(s, "`%s'", RSTRING_PTR(name));
}
+ return s;
}
static VALUE