From e908591baaf74db521c973369b15951184e2134b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 30 Apr 2014 05:35:18 +0300 Subject: [PATCH] py: Abstract no-return attribute for functions a bit. --- py/mpconfig.h | 3 +++ py/nlr.h | 5 +++-- py/objstr.c | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/py/mpconfig.h b/py/mpconfig.h index 13918e8398..04d4a7ddc9 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -230,3 +230,6 @@ typedef double mp_float_t; #define INT_FMT "%d" #endif #endif //INT_FMT + +// Modifier for function which doesn't return +#define NORETURN __attribute__((noreturn)) diff --git a/py/nlr.h b/py/nlr.h index 6629285455..c7b5928430 100644 --- a/py/nlr.h +++ b/py/nlr.h @@ -3,6 +3,7 @@ #include #include +#include "mpconfig.h" typedef struct _nlr_buf_t nlr_buf_t; struct _nlr_buf_t { @@ -33,7 +34,7 @@ struct _nlr_buf_t { #if MICROPY_NLR_SETJMP extern nlr_buf_t *nlr_setjmp_top; -void nlr_setjmp_jump(void *val) __attribute__((noreturn)); +NORETURN void nlr_setjmp_jump(void *val); // nlr_push() must be defined as a macro, because "The stack context will be // invalidated if the function which called setjmp() returns." #define nlr_push(buf) ((buf)->prev = nlr_setjmp_top, nlr_setjmp_top = (buf), setjmp((buf)->jmpbuf)) @@ -42,7 +43,7 @@ void nlr_setjmp_jump(void *val) __attribute__((noreturn)); #else unsigned int nlr_push(nlr_buf_t *); void nlr_pop(void); -void nlr_jump(void *val) __attribute__((noreturn)); +NORETURN void nlr_jump(void *val); #endif // This must be implemented by a port. It's called by nlr_jump diff --git a/py/objstr.c b/py/objstr.c index 6819a4ad68..aab1a4492c 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -27,7 +27,7 @@ const mp_obj_t mp_const_empty_bytes; STATIC mp_obj_t mp_obj_new_str_iterator(mp_obj_t str); STATIC mp_obj_t mp_obj_new_bytes_iterator(mp_obj_t str); STATIC mp_obj_t str_new(const mp_obj_type_t *type, const byte* data, uint len); -STATIC void bad_implicit_conversion(mp_obj_t self_in) __attribute__((noreturn)); +STATIC NORETURN void bad_implicit_conversion(mp_obj_t self_in); /******************************************************************************/ /* str */