mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby error messages should be directed to stderr
This commit is contained in:
@@ -317,6 +317,7 @@ void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
|
||||
void mrb_warn(mrb_state *mrb, const char *fmt, ...);
|
||||
void mrb_bug(mrb_state *mrb, const char *fmt, ...);
|
||||
void mrb_print_backtrace(mrb_state *mrb);
|
||||
void mrb_print_error(mrb_state *mrb);
|
||||
|
||||
/* macros to get typical exception objects
|
||||
note:
|
||||
|
||||
@@ -198,8 +198,7 @@ main(int argc, char **argv)
|
||||
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
|
||||
n = 0;
|
||||
if (mrb->exc) {
|
||||
mrb_print_backtrace(mrb);
|
||||
p(mrb, mrb_obj_value(mrb->exc));
|
||||
mrb_print_error(mrb);
|
||||
n = -1;
|
||||
}
|
||||
}
|
||||
@@ -230,8 +229,7 @@ main(int argc, char **argv)
|
||||
mrbc_context_free(mrb, c);
|
||||
if (mrb->exc) {
|
||||
if (!mrb_undef_p(v)) {
|
||||
mrb_print_backtrace(mrb);
|
||||
p(mrb, mrb_obj_value(mrb->exc));
|
||||
mrb_print_error(mrb);
|
||||
}
|
||||
n = -1;
|
||||
}
|
||||
|
||||
+4
-4
@@ -17,7 +17,7 @@ mrb_print_backtrace(mrb_state *mrb)
|
||||
const char *filename, *method, *sep;
|
||||
int i, line;
|
||||
|
||||
printf("trace:\n");
|
||||
fputs("trace:\n", stderr);
|
||||
ciidx = mrb_fixnum(mrb_obj_iv_get(mrb, mrb->exc, mrb_intern(mrb, "ciidx")));
|
||||
if (ciidx >= mrb->c->ciend - mrb->c->cibase)
|
||||
ciidx = 10; /* ciidx is broken... */
|
||||
@@ -59,14 +59,14 @@ mrb_print_backtrace(mrb_state *mrb)
|
||||
const char *cn = mrb_class_name(mrb, ci->proc->target_class);
|
||||
|
||||
if (cn) {
|
||||
printf("\t[%d] %s:%d:in %s%s%s\n", i, filename, line, cn, sep, method);
|
||||
fprintf(stderr, "\t[%d] %s:%d:in %s%s%s\n", i, filename, line, cn, sep, method);
|
||||
}
|
||||
else {
|
||||
printf("\t[%d] %s:%d:in %s\n", i, filename, line, method);
|
||||
fprintf(stderr, "\t[%d] %s:%d:in %s\n", i, filename, line, method);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("\t[%d] %s:%d\n", i, filename, line);
|
||||
fprintf(stderr, "\t[%d] %s:%d\n", i, filename, line);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+16
@@ -34,6 +34,22 @@ mrb_p(mrb_state *mrb, mrb_value obj)
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
mrb_print_error(mrb_state *mrb)
|
||||
{
|
||||
#ifdef ENABLE_STDIO
|
||||
mrb_value s;
|
||||
|
||||
mrb_print_backtrace(mrb);
|
||||
s = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
|
||||
if (mrb_string_p(s)) {
|
||||
struct RString *str = mrb_str_ptr(s);
|
||||
fwrite(str->ptr, str->len, 1, stderr);
|
||||
putc('\n', stderr);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
mrb_show_version(mrb_state *mrb)
|
||||
{
|
||||
|
||||
@@ -136,8 +136,7 @@ module MRuby
|
||||
unless rbfiles.empty?
|
||||
f.puts %Q[ mrb_load_irep(mrb, gem_mrblib_irep_#{funcname});]
|
||||
f.puts %Q[ if (mrb->exc) {]
|
||||
f.puts %Q[ mrb_print_backtrace(mrb);]
|
||||
f.puts %Q[ mrb_p(mrb, mrb_obj_value(mrb->exc));]
|
||||
f.puts %Q[ mrb_print_error(mrb);]
|
||||
f.puts %Q[ exit(EXIT_FAILURE);]
|
||||
f.puts %Q[ }]
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user