py/gc: Refactor assertions in gc_free function.

gc_free() expects either NULL or a valid pointer into the heap, so the
checks for a valid pointer can be turned into assertions.
diff --git a/py/gc.c b/py/gc.c
index 937dae4..2af886c 100644
--- a/py/gc.c
+++ b/py/gc.c
@@ -536,37 +536,34 @@
 
     DEBUG_printf("gc_free(%p)\n", ptr);
 
-    if (VERIFY_PTR(ptr)) {
-        size_t block = BLOCK_FROM_PTR(ptr);
-        if (ATB_GET_KIND(block) == AT_HEAD) {
-            #if MICROPY_ENABLE_FINALISER
-            FTB_CLEAR(block);
-            #endif
-            // set the last_free pointer to this block if it's earlier in the heap
-            if (block / BLOCKS_PER_ATB < MP_STATE_MEM(gc_last_free_atb_index)) {
-                MP_STATE_MEM(gc_last_free_atb_index) = block / BLOCKS_PER_ATB;
-            }
-
-            // free head and all of its tail blocks
-            do {
-                ATB_ANY_TO_FREE(block);
-                block += 1;
-            } while (ATB_GET_KIND(block) == AT_TAIL);
-
-            GC_EXIT();
-
-            #if EXTENSIVE_HEAP_PROFILING
-            gc_dump_alloc_table();
-            #endif
-        } else {
-            GC_EXIT();
-            assert(!"bad free");
-        }
-    } else if (ptr != NULL) {
+    if (ptr == NULL) {
         GC_EXIT();
-        assert(!"bad free");
     } else {
+        // get the GC block number corresponding to this pointer
+        assert(VERIFY_PTR(ptr));
+        size_t block = BLOCK_FROM_PTR(ptr);
+        assert(ATB_GET_KIND(block) == AT_HEAD);
+
+        #if MICROPY_ENABLE_FINALISER
+        FTB_CLEAR(block);
+        #endif
+
+        // set the last_free pointer to this block if it's earlier in the heap
+        if (block / BLOCKS_PER_ATB < MP_STATE_MEM(gc_last_free_atb_index)) {
+            MP_STATE_MEM(gc_last_free_atb_index) = block / BLOCKS_PER_ATB;
+        }
+
+        // free head and all of its tail blocks
+        do {
+            ATB_ANY_TO_FREE(block);
+            block += 1;
+        } while (ATB_GET_KIND(block) == AT_TAIL);
+
         GC_EXIT();
+
+        #if EXTENSIVE_HEAP_PROFILING
+        gc_dump_alloc_table();
+        #endif
     }
 }