summaryrefslogtreecommitdiffstatshomepage
path: root/py/mpstate.h
diff options
context:
space:
mode:
Diffstat (limited to 'py/mpstate.h')
-rw-r--r--py/mpstate.h33
1 files changed, 20 insertions, 13 deletions
diff --git a/py/mpstate.h b/py/mpstate.h
index 0e77e65833..824aba1ff9 100644
--- a/py/mpstate.h
+++ b/py/mpstate.h
@@ -91,9 +91,6 @@ typedef struct _mp_state_vm_t {
// this must start at the start of this structure
//
- // Note: nlr asm code has the offset of this hard-coded
- nlr_buf_t *nlr_top;
-
qstr_pool_t *last_pool;
// non-heap memory for creating an exception if we can't allocate RAM
@@ -161,14 +158,6 @@ typedef struct _mp_state_vm_t {
size_t qstr_last_alloc;
size_t qstr_last_used;
- // Stack top at the start of program
- // Note: this entry is used to locate the end of the root pointer section.
- char *stack_top;
-
- #if MICROPY_STACK_CHECK
- mp_uint_t stack_limit;
- #endif
-
mp_uint_t mp_optimise_value;
// size of the emergency exception buf, if it's dynamically allocated
@@ -177,7 +166,22 @@ typedef struct _mp_state_vm_t {
#endif
} mp_state_vm_t;
-// This structure combines the above 2 structures, and adds the local
+// This structure holds state that is specific to a given thread.
+// Everything in this structure is scanned for root pointers.
+typedef struct _mp_state_thread_t {
+ // Note: nlr asm code has the offset of this hard-coded
+ nlr_buf_t *nlr_top; // ROOT POINTER
+
+ // Stack top at the start of program
+ // Note: this entry is used to locate the end of the root pointer section.
+ char *stack_top;
+
+ #if MICROPY_STACK_CHECK
+ size_t stack_limit;
+ #endif
+} mp_state_thread_t;
+
+// This structure combines the above 3 structures, and adds the local
// and global dicts.
// Note: if this structure changes then revisit all nlr asm code since they
// have the offset of nlr_top hard-coded.
@@ -185,7 +189,8 @@ typedef struct _mp_state_ctx_t {
// these must come first for root pointer scanning in GC to work
mp_obj_dict_t *dict_locals;
mp_obj_dict_t *dict_globals;
- // this must come next for root pointer scanning in GC to work
+ // these must come next in this order for root pointer scanning in GC to work
+ mp_state_thread_t thread;
mp_state_vm_t vm;
mp_state_mem_t mem;
} mp_state_ctx_t;
@@ -196,4 +201,6 @@ extern mp_state_ctx_t mp_state_ctx;
#define MP_STATE_VM(x) (mp_state_ctx.vm.x)
#define MP_STATE_MEM(x) (mp_state_ctx.mem.x)
+#define MP_STATE_THREAD(x) (mp_state_ctx.thread.x)
+
#endif // __MICROPY_INCLUDED_PY_MPSTATE_H__