diff options
Diffstat (limited to 'src/error.c')
| -rw-r--r-- | src/error.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/error.c b/src/error.c index 52e4958a1..8b8b8bd35 100644 --- a/src/error.c +++ b/src/error.c @@ -249,10 +249,16 @@ mrb_vformat(mrb_state *mrb, const char *format, va_list ap) } } else if (c == '\\') { - if (!*p) break; - p++; + if (*p) { + size = p - b - 1; + mrb_ary_push(mrb, ary, mrb_str_new(mrb, b, size)); + mrb_ary_push(mrb, ary, mrb_str_new(mrb, p, 1)); + b = ++p; + } + else { + break; + } } - p++; } if (b == format) { return mrb_str_new_cstr(mrb, format); @@ -292,18 +298,14 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...) void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...) { - mrb_value exc, argv[2]; + mrb_value exc; + mrb_value argv[2]; va_list args; - char buf[256]; - int n; va_start(args, fmt); - n = vsnprintf(buf, sizeof(buf), fmt, args); + argv[0] = mrb_vformat(mrb, fmt, args); va_end(args); - if (n < 0) { - n = 0; - } - argv[0] = mrb_str_new(mrb, buf, n); + argv[1] = mrb_symbol_value(id); /* ignore now */ exc = mrb_class_new_instance(mrb, 1, argv, E_NAME_ERROR); mrb_exc_raise(mrb, exc); |
