summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h2
-rw-r--r--mrbgems/mruby-struct/src/struct.c4
-rw-r--r--src/error.c14
-rw-r--r--src/parse.y2
4 files changed, 12 insertions, 10 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 14ea9d9fb..272a0d420 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -300,7 +300,7 @@ void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
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(const char *fmt, ...);
+void mrb_bug(mrb_state *mrb, const char *fmt, ...);
/* macros to get typical exception objects
note:
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index e58394005..2775471fe 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -716,7 +716,7 @@ mrb_struct_equal(mrb_state *mrb, mrb_value s)
equal_p = 0;
}
else if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
- mrb_bug("inconsistent struct"); /* should never happen */
+ mrb_bug(mrb, "inconsistent struct"); /* should never happen */
equal_p = 0; /* This substuture is just to suppress warnings. never called. */
}
else {
@@ -760,7 +760,7 @@ mrb_struct_eql(mrb_state *mrb, mrb_value s)
eql_p = 0;
}
else if (RSTRUCT_LEN(s) != RSTRUCT_LEN(s2)) {
- mrb_bug("inconsistent struct"); /* should never happen */
+ mrb_bug(mrb, "inconsistent struct"); /* should never happen */
eql_p = 0; /* This substuture is just to suppress warnings. never called. */
}
else {
diff --git a/src/error.c b/src/error.c
index 37914666f..1ac42455c 100644
--- a/src/error.c
+++ b/src/error.c
@@ -327,15 +327,17 @@ mrb_warn(mrb_state *mrb, const char *fmt, ...)
}
void
-mrb_bug(const char *fmt, ...)
+mrb_bug(mrb_state *mrb, const char *fmt, ...)
{
#ifdef ENABLE_STDIO
- va_list args;
+ va_list ap;
+ mrb_value str;
- va_start(args, fmt);
- printf("bug: ");
- vprintf(fmt, args);
- va_end(args);
+ va_start(ap, fmt);
+ str = mrb_vformat(mrb, fmt, ap);
+ fputs("bug: ", stderr);
+ fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
+ va_end(ap);
#endif
exit(EXIT_FAILURE);
}
diff --git a/src/parse.y b/src/parse.y
index 5eaa61b2a..fc2d09f23 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -3209,7 +3209,7 @@ backref_error(parser_state *p, node *n)
} else if (c == NODE_BACK_REF) {
yyerror_i(p, "can't set variable $%c", (int)(intptr_t)n->cdr);
} else {
- mrb_bug("Internal error in backref_error() : n=>car == %d", c);
+ mrb_bug(p->mrb, "Internal error in backref_error() : n=>car == %d", c);
}
}