diff options
Diffstat (limited to 'py/nlr.h')
| -rw-r--r-- | py/nlr.h | 26 | 
1 files changed, 26 insertions, 0 deletions
| diff --git a/py/nlr.h b/py/nlr.h new file mode 100644 index 000000000..b824e4a63 --- /dev/null +++ b/py/nlr.h @@ -0,0 +1,26 @@ +// non-local return +// exception handling, basically a stack of setjmp/longjmp buffers + +#include <limits.h> + +#ifndef __WORDSIZE +#error __WORDSIZE needs to be defined +#endif + +typedef struct _nlr_buf_t nlr_buf_t; +struct _nlr_buf_t { +    // the entries here must all be machine word size +    nlr_buf_t *prev; +    void *ret_val; +#if __WORDSIZE == 32 +    void *regs[6]; +#elif __WORDSIZE == 64 +    void *regs[8]; +#else +#error Unsupported __WORDSIZE +#endif +}; + +unsigned int nlr_push(nlr_buf_t *); +void nlr_pop(); +void nlr_jump(void *val) __attribute__((noreturn)); | 
