diff options
| author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-17 00:16:45 +0300 |
|---|---|---|
| committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-17 00:19:18 +0300 |
| commit | 3a83b805fcb759344ef7e4055f124d5eb989ac34 (patch) | |
| tree | ed78100b16ba1fc26ec268a760cd7ef1aa48f7b6 /py/nlrsetjmp.c | |
| parent | a1c67206c88fe0c0712c99d6181cff9b99b07b33 (diff) | |
nlr: Add implementation using setjmp/longjmp.
Having an optimized asm implementation is good, but if we want portability,
that's it.
Diffstat (limited to 'py/nlrsetjmp.c')
| -rw-r--r-- | py/nlrsetjmp.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/py/nlrsetjmp.c b/py/nlrsetjmp.c new file mode 100644 index 000000000..a97c8634b --- /dev/null +++ b/py/nlrsetjmp.c @@ -0,0 +1,16 @@ +#include <setjmp.h> +#include <stdio.h> +#include "nlr.h" + +#if MICROPY_NLR_SETJMP + +nlr_buf_t *nlr_setjmp_top; + +void nlr_setjmp_jump(void *val) { + nlr_buf_t *buf = nlr_setjmp_top; + nlr_setjmp_top = buf->prev; + buf->ret_val = val; + longjmp(buf->jmpbuf, 1); +} + +#endif |
