summaryrefslogtreecommitdiff
path: root/py/nlr.h
diff options
context:
space:
mode:
Diffstat (limited to 'py/nlr.h')
-rw-r--r--py/nlr.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/py/nlr.h b/py/nlr.h
index 338a67570..09ef66ef7 100644
--- a/py/nlr.h
+++ b/py/nlr.h
@@ -101,9 +101,16 @@
typedef struct _nlr_buf_t nlr_buf_t;
struct _nlr_buf_t {
- // the entries here must all be machine word size
+ // The entries in this struct must all be machine word size.
+
+ // Pointer to the previous nlr_buf_t in the chain.
+ // Or NULL if it's the top-level one.
nlr_buf_t *prev;
- void *ret_val; // always a concrete object (an exception instance)
+
+ // The exception that is being raised:
+ // - NULL means the jump is because of a VM abort (only if MICROPY_ENABLE_VM_ABORT enabled)
+ // - otherwise it's always a concrete object (an exception instance)
+ void *ret_val;
#if MICROPY_NLR_SETJMP
jmp_buf jmpbuf;
@@ -149,6 +156,12 @@ unsigned int nlr_push_tail(nlr_buf_t *top);
void nlr_pop(void);
NORETURN void nlr_jump(void *val);
+#if MICROPY_ENABLE_VM_ABORT
+#define nlr_set_abort(buf) MP_STATE_VM(nlr_abort) = buf
+#define nlr_get_abort() MP_STATE_VM(nlr_abort)
+NORETURN void nlr_jump_abort(void);
+#endif
+
// This must be implemented by a port. It's called by nlr_jump
// if no nlr buf has been pushed. It must not return, but rather
// should bail out with a fatal error.