diff options
| -rw-r--r-- | include/mruby.h | 6 | ||||
| -rw-r--r-- | src/state.c | 2 | ||||
| -rw-r--r-- | src/string.c | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/include/mruby.h b/include/mruby.h index 390d593bc..598ff06cf 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -429,6 +429,12 @@ void mrb_atexit(mrb_state *mrb, mrb_atexit_func func); #define mrb_assert_int_fit(t1,n,t2,max) ((void)0) #endif +#if __STDC_VERSION__ >= 201112L +#define mrb_static_assert(exp, str) _Static_assert(exp, str) +#else +#define mrb_static_assert(exp, str) mrb_assert(exp) +#endif + mrb_value mrb_format(mrb_state *mrb, const char *format, ...); #if defined(__cplusplus) diff --git a/src/state.c b/src/state.c index ac9f88088..dc5a1481f 100644 --- a/src/state.c +++ b/src/state.c @@ -29,7 +29,7 @@ mrb_open_allocf(mrb_allocf f, void *ud) mrb_state *mrb; #ifdef MRB_NAN_BOXING - mrb_assert(sizeof(void*) == 4); + mrb_static_assert(sizeof(void*) == 4, "when using NaN boxing sizeof pointer must be 4 byte"); #endif mrb = (mrb_state *)(f)(NULL, NULL, sizeof(mrb_state), ud); diff --git a/src/string.c b/src/string.c index 0fe79e61d..734bf739a 100644 --- a/src/string.c +++ b/src/string.c @@ -2503,6 +2503,8 @@ mrb_init_string(mrb_state *mrb) { struct RClass *s; + mrb_static_assert(RSTRING_EMBED_LEN_MAX < (1 << 5), "pointer size too big for embedded string"); + s = mrb->string_class = mrb_define_class(mrb, "String", mrb->object_class); /* 15.2.10 */ MRB_SET_INSTANCE_TT(s, MRB_TT_STRING); |
