diff --git a/py/objclosure.c b/py/objclosure.c index ec304de4a0..16133c127b 100644 --- a/py/objclosure.c +++ b/py/objclosure.c @@ -67,7 +67,9 @@ mp_obj_t closure_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED STATIC void closure_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind) { mp_obj_closure_t *o = o_in; - print(env, "fun), o, o->n_closed); + print(env, "fun, PRINT_REPR); + print(env, " at %p, n_closed=%u ", o, o->n_closed); for (mp_uint_t i = 0; i < o->n_closed; i++) { if (o->closed[i] == MP_OBJ_NULL) { print(env, "(nil)"); diff --git a/tests/basics/generator_closure.py b/tests/basics/generator_closure.py index d8a517edeb..ecf524ac83 100644 --- a/tests/basics/generator_closure.py +++ b/tests/basics/generator_closure.py @@ -24,3 +24,9 @@ generator_of_generators = (((x, y) for x in range(2)) for y in range(3)) for i in generator_of_generators: for j in i: print(j) + +# test that printing of closed-over generators doesn't lead to segfaults +def genc(): + foo = 1 + repr(lambda: (yield foo)) +genc()