From 8117ec68652315c5bcae94e16892053a7a545083 Mon Sep 17 00:00:00 2001 From: "Kwabena W. Agyeman" Date: Sat, 14 Jan 2017 09:54:15 -0500 Subject: [PATCH] Linked in fb_alloc_mark --- py/nlr.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/py/nlr.h b/py/nlr.h index aacac6a59ccf6..5c56b9d56fb60 100644 --- a/py/nlr.h +++ b/py/nlr.h @@ -85,11 +85,32 @@ NORETURN void nlr_jump(void *val); void nlr_jump_fail(void *val); // use nlr_raise instead of nlr_jump so that debugging is easier +extern void fb_alloc_free_till_mark(); #ifndef DEBUG -#define nlr_raise(val) nlr_jump(MP_OBJ_TO_PTR(val)) +#define nlr_raise(val) \ + do { \ + fb_alloc_free_till_mark(); \ + nlr_jump(MP_OBJ_TO_PTR(val)); \ + } while (0) +// fb_alloc_mark() is the only allowed caller. +#define nlr_raise_for_fb_alloc_mark(val) \ + do { \ + nlr_jump(MP_OBJ_TO_PTR(val)); \ + } while (0) #else #include "mpstate.h" #define nlr_raise(val) \ + do { \ + fb_alloc_free_till_mark(); \ + /*printf("nlr_raise: nlr_top=%p\n", MP_STATE_VM(nlr_top)); \ + fflush(stdout);*/ \ + void *_val = MP_OBJ_TO_PTR(val); \ + assert(_val != NULL); \ + assert(mp_obj_is_exception_instance(val)); \ + nlr_jump(_val); \ + } while (0) +// fb_alloc_mark() is the only allowed caller. +#define nlr_raise_for_fb_alloc_mark(val) \ do { \ /*printf("nlr_raise: nlr_top=%p\n", MP_STATE_VM(nlr_top)); \ fflush(stdout);*/ \