summaryrefslogtreecommitdiff
path: root/py/nlrsetjmp.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-17 00:16:45 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-17 00:19:18 +0300
commit3a83b805fcb759344ef7e4055f124d5eb989ac34 (patch)
treeed78100b16ba1fc26ec268a760cd7ef1aa48f7b6 /py/nlrsetjmp.c
parenta1c67206c88fe0c0712c99d6181cff9b99b07b33 (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.c16
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