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:
Damien George
2015-01-01 23:30:53 +00:00
parent ad2307c92c
commit b4b10fd350
34 changed files with 464 additions and 295 deletions

View File

@@ -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 *);