diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-30 05:35:18 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-30 05:35:18 +0300 |
commit | e908591baaf74db521c973369b15951184e2134b (patch) | |
tree | 5433adf55ee52e4f61111855bd764a9c66bd3913 /py | |
parent | b1ce37d32e1b77373a86d27d1f1f925891a402d1 (diff) | |
download | micropython-e908591baaf74db521c973369b15951184e2134b.tar.gz micropython-e908591baaf74db521c973369b15951184e2134b.zip |
py: Abstract no-return attribute for functions a bit.
Diffstat (limited to 'py')
-rw-r--r-- | py/mpconfig.h | 3 | ||||
-rw-r--r-- | py/nlr.h | 5 | ||||
-rw-r--r-- | 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)) @@ -3,6 +3,7 @@ #include <limits.h> #include <setjmp.h> +#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 */ |