objclosure: Fix printing of generator closures.

The code previously assumed that only functions can be closed over.
diff --git a/py/objclosure.c b/py/objclosure.c
index ec304de..16133c1 100644
--- a/py/objclosure.c
+++ b/py/objclosure.c
@@ -67,7 +67,9 @@
 #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, "<closure %s at %p, n_closed=%u ", mp_obj_fun_get_name(o->fun), o, o->n_closed);
+    print(env, "<closure ");
+    mp_obj_print_helper(print, env, o->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 d8a517e..ecf524a 100644
--- a/tests/basics/generator_closure.py
+++ b/tests/basics/generator_closure.py
@@ -24,3 +24,9 @@
 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()