py: Put all global state together in state structures.
This patch consolidates all global variables in py/ core into one place, in a global structure. Root pointers are all located together to make GC tracing easier and more efficient.
This commit is contained in:
8
py/nlr.h
8
py/nlr.h
@@ -64,14 +64,14 @@ struct _nlr_buf_t {
|
||||
#endif
|
||||
};
|
||||
|
||||
extern nlr_buf_t *nlr_top;
|
||||
|
||||
#if MICROPY_NLR_SETJMP
|
||||
#include "py/mpstate.h"
|
||||
|
||||
NORETURN void nlr_setjmp_jump(void *val);
|
||||
// nlr_push() must be defined as a macro, because "The stack context will be
|
||||
// invalidated if the function which called setjmp() returns."
|
||||
#define nlr_push(buf) ((buf)->prev = nlr_top, nlr_top = (buf), setjmp((buf)->jmpbuf))
|
||||
#define nlr_pop() { nlr_top = nlr_top->prev; }
|
||||
#define nlr_push(buf) ((buf)->prev = MP_STATE_VM(nlr_top), MP_STATE_VM(nlr_top) = (buf), setjmp((buf)->jmpbuf))
|
||||
#define nlr_pop() { MP_STATE_VM(nlr_top) = MP_STATE_VM(nlr_top)->prev; }
|
||||
#define nlr_jump(val) nlr_setjmp_jump(val)
|
||||
#else
|
||||
unsigned int nlr_push(nlr_buf_t *);
|
||||
|
||||
Reference in New Issue
Block a user