summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h20
-rw-r--r--src/error.c10
2 files changed, 20 insertions, 10 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 0ab2d8037..af1fc9894 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -171,6 +171,16 @@ typedef struct mrb_state {
void *ud; /* auxiliary data */
} mrb_state;
+#if __STDC_VERSION__ >= 201112L
+# define mrb_noreturn _Noreturn
+#elif defined __GNUC__ && !defined __STRICT_ANSI__
+# define mrb_noreturn __attribute__((noreturn))
+#elif defined _MSC_VER
+# define mrb_noreturn __declspec(noreturn)
+#else
+# define mrb_noreturn
+#endif
+
typedef mrb_value (*mrb_func_t)(mrb_state *mrb, mrb_value);
struct RClass *mrb_define_class(mrb_state *, const char*, struct RClass*);
struct RClass *mrb_define_module(mrb_state *, const char*);
@@ -333,13 +343,13 @@ mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self);
#endif
mrb_value mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, long len);
-void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
+mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
-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, ...);
+mrb_noreturn void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
+mrb_noreturn void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
+mrb_noreturn 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, ...);
+mrb_noreturn void mrb_bug(mrb_state *mrb, const char *fmt, ...);
void mrb_print_backtrace(mrb_state *mrb);
void mrb_print_error(mrb_state *mrb);
diff --git a/src/error.c b/src/error.c
index 64851bb56..feec9dbc5 100644
--- a/src/error.c
+++ b/src/error.c
@@ -215,7 +215,7 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
}
}
-void
+mrb_noreturn void
mrb_exc_raise(mrb_state *mrb, mrb_value exc)
{
mrb->exc = mrb_obj_ptr(exc);
@@ -227,7 +227,7 @@ mrb_exc_raise(mrb_state *mrb, mrb_value exc)
MRB_THROW(mrb->jmp);
}
-void
+mrb_noreturn void
mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
{
mrb_value mesg;
@@ -289,7 +289,7 @@ mrb_format(mrb_state *mrb, const char *format, ...)
return str;
}
-void
+mrb_noreturn void
mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
{
va_list args;
@@ -301,7 +301,7 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mesg));
}
-void
+mrb_noreturn void
mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
{
mrb_value exc;
@@ -332,7 +332,7 @@ mrb_warn(mrb_state *mrb, const char *fmt, ...)
#endif
}
-void
+mrb_noreturn void
mrb_bug(mrb_state *mrb, const char *fmt, ...)
{
#ifdef ENABLE_STDIO