Browse Source

py/nlrsetjmp: Update to take into account new location of nlr_top.

It's now accessed via the MP_STATE_THREAD macro.
pull/2165/head
Damien George 9 years ago
parent
commit
94238d4ae5
  1. 10
      py/nlr.h
  2. 4
      py/nlrsetjmp.c

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

4
py/nlrsetjmp.c

@ -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…
Cancel
Save