py/nlrsetjmp: Update to take into account new location of nlr_top.
It's now accessed via the MP_STATE_THREAD macro.
This commit is contained in:
parent
1df4168c33
commit
94238d4ae5
10
py/nlr.h
10
py/nlr.h
@ -70,8 +70,8 @@ struct _nlr_buf_t {
|
|||||||
NORETURN void nlr_setjmp_jump(void *val);
|
NORETURN void nlr_setjmp_jump(void *val);
|
||||||
// nlr_push() must be defined as a macro, because "The stack context will be
|
// nlr_push() must be defined as a macro, because "The stack context will be
|
||||||
// invalidated if the function which called setjmp() returns."
|
// invalidated if the function which called setjmp() returns."
|
||||||
#define nlr_push(buf) ((buf)->prev = MP_STATE_VM(nlr_top), MP_STATE_VM(nlr_top) = (buf), setjmp((buf)->jmpbuf))
|
#define nlr_push(buf) ((buf)->prev = MP_STATE_THREAD(nlr_top), MP_STATE_THREAD(nlr_top) = (buf), setjmp((buf)->jmpbuf))
|
||||||
#define nlr_pop() { MP_STATE_VM(nlr_top) = MP_STATE_VM(nlr_top)->prev; }
|
#define nlr_pop() { MP_STATE_THREAD(nlr_top) = MP_STATE_THREAD(nlr_top)->prev; }
|
||||||
#define nlr_jump(val) nlr_setjmp_jump(val)
|
#define nlr_jump(val) nlr_setjmp_jump(val)
|
||||||
#else
|
#else
|
||||||
unsigned int nlr_push(nlr_buf_t *);
|
unsigned int nlr_push(nlr_buf_t *);
|
||||||
@ -91,7 +91,7 @@ void nlr_jump_fail(void *val);
|
|||||||
#include "mpstate.h"
|
#include "mpstate.h"
|
||||||
#define nlr_raise(val) \
|
#define nlr_raise(val) \
|
||||||
do { \
|
do { \
|
||||||
/*printf("nlr_raise: nlr_top=%p\n", MP_STATE_VM(nlr_top)); \
|
/*printf("nlr_raise: nlr_top=%p\n", MP_STATE_THREAD(nlr_top)); \
|
||||||
fflush(stdout);*/ \
|
fflush(stdout);*/ \
|
||||||
void *_val = MP_OBJ_TO_PTR(val); \
|
void *_val = MP_OBJ_TO_PTR(val); \
|
||||||
assert(_val != NULL); \
|
assert(_val != NULL); \
|
||||||
@ -101,11 +101,11 @@ void nlr_jump_fail(void *val);
|
|||||||
|
|
||||||
#if !MICROPY_NLR_SETJMP
|
#if !MICROPY_NLR_SETJMP
|
||||||
#define nlr_push(val) \
|
#define nlr_push(val) \
|
||||||
assert(MP_STATE_VM(nlr_top) != val),nlr_push(val)
|
assert(MP_STATE_THREAD(nlr_top) != val),nlr_push(val)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define nlr_push(val) \
|
#define nlr_push(val) \
|
||||||
printf("nlr_push: before: nlr_top=%p, val=%p\n", MP_STATE_VM(nlr_top), val),assert(MP_STATE_VM(nlr_top) != val),nlr_push(val)
|
printf("nlr_push: before: nlr_top=%p, val=%p\n", MP_STATE_THREAD(nlr_top), val),assert(MP_STATE_THREAD(nlr_top) != val),nlr_push(val)
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,8 +29,8 @@
|
|||||||
#if MICROPY_NLR_SETJMP
|
#if MICROPY_NLR_SETJMP
|
||||||
|
|
||||||
void nlr_setjmp_jump(void *val) {
|
void nlr_setjmp_jump(void *val) {
|
||||||
nlr_buf_t *buf = MP_STATE_VM(nlr_top);
|
nlr_buf_t *buf = MP_STATE_THREAD(nlr_top);
|
||||||
MP_STATE_VM(nlr_top) = buf->prev;
|
MP_STATE_THREAD(nlr_top) = buf->prev;
|
||||||
buf->ret_val = val;
|
buf->ret_val = val;
|
||||||
longjmp(buf->jmpbuf, 1);
|
longjmp(buf->jmpbuf, 1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user