summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-03-08 15:48:20 +1100
committerDamien George <damien.p.george@gmail.com>2019-03-08 15:53:04 +1100
commit02cc288edbc47a3b21b88b83f15990cc5a36ed23 (patch)
treecd32215cbd5e90d1b0e7cde6f0513b8ad53e9be0
parentf2ebee9cf12d26bf365d3e328a8a915a44802d04 (diff)
py: Add independent config for debugging sentinel object values.
The new compile-time option is MICROPY_DEBUG_MP_OBJ_SENTINELS, disabled by default. This is to allow finer control of whether this debugging feature is enabled or not (because, for example, this setting must be the same for mpy-cross and the MicroPython main code when using native code generation).
-rw-r--r--py/emitnative.c8
-rw-r--r--py/mpconfig.h5
-rw-r--r--py/obj.h10
3 files changed, 14 insertions, 9 deletions
diff --git a/py/emitnative.c b/py/emitnative.c
index c8a1a33d6..0c756f9a5 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -2094,12 +2094,12 @@ STATIC void emit_native_for_iter(emit_t *emit, mp_uint_t label) {
emit_get_stack_pointer_to_reg_for_pop(emit, REG_ARG_1, MP_OBJ_ITER_BUF_NSLOTS);
adjust_stack(emit, MP_OBJ_ITER_BUF_NSLOTS);
emit_call(emit, MP_F_NATIVE_ITERNEXT);
- #ifdef NDEBUG
- MP_STATIC_ASSERT(MP_OBJ_STOP_ITERATION == 0);
- ASM_JUMP_IF_REG_ZERO(emit->as, REG_RET, label, false);
- #else
+ #if MICROPY_DEBUG_MP_OBJ_SENTINELS
ASM_MOV_REG_IMM(emit->as, REG_TEMP1, (mp_uint_t)MP_OBJ_STOP_ITERATION);
ASM_JUMP_IF_REG_EQ(emit->as, REG_RET, REG_TEMP1, label);
+ #else
+ MP_STATIC_ASSERT(MP_OBJ_STOP_ITERATION == 0);
+ ASM_JUMP_IF_REG_ZERO(emit->as, REG_RET, label, false);
#endif
emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
}
diff --git a/py/mpconfig.h b/py/mpconfig.h
index c4b62dd84..893ac7dc7 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -414,6 +414,11 @@
#define MICROPY_DEBUG_VERBOSE (0)
#endif
+// Whether to enable debugging versions of MP_OBJ_NULL/STOP_ITERATION/SENTINEL
+#ifndef MICROPY_DEBUG_MP_OBJ_SENTINELS
+#define MICROPY_DEBUG_MP_OBJ_SENTINELS (0)
+#endif
+
// Whether to enable a simple VM stack overflow check
#ifndef MICROPY_DEBUG_VM_STACK_OVERFLOW
#define MICROPY_DEBUG_VM_STACK_OVERFLOW (0)
diff --git a/py/obj.h b/py/obj.h
index e8575dbd1..4d42c43de 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -65,14 +65,14 @@ typedef struct _mp_obj_base_t mp_obj_base_t;
// For debugging purposes they are all different. For non-debug mode, we alias
// as many as we can to MP_OBJ_NULL because it's cheaper to load/compare 0.
-#ifdef NDEBUG
-#define MP_OBJ_NULL (MP_OBJ_FROM_PTR((void*)0))
-#define MP_OBJ_STOP_ITERATION (MP_OBJ_FROM_PTR((void*)0))
-#define MP_OBJ_SENTINEL (MP_OBJ_FROM_PTR((void*)4))
-#else
+#if MICROPY_DEBUG_MP_OBJ_SENTINELS
#define MP_OBJ_NULL (MP_OBJ_FROM_PTR((void*)0))
#define MP_OBJ_STOP_ITERATION (MP_OBJ_FROM_PTR((void*)4))
#define MP_OBJ_SENTINEL (MP_OBJ_FROM_PTR((void*)8))
+#else
+#define MP_OBJ_NULL (MP_OBJ_FROM_PTR((void*)0))
+#define MP_OBJ_STOP_ITERATION (MP_OBJ_FROM_PTR((void*)0))
+#define MP_OBJ_SENTINEL (MP_OBJ_FROM_PTR((void*)4))
#endif
// These macros/inline functions operate on objects and depend on the