From ec21405821dd997d337a0f387db9b1a45b32834b Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Sun, 11 Jan 2015 14:37:06 +0000
Subject: [PATCH] py: Add (commented out) code to gc_dump_alloc_table for qstr
 info.

---
 py/gc.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/py/gc.c b/py/gc.c
index f3f5937cf..69072a4c2 100644
--- a/py/gc.c
+++ b/py/gc.c
@@ -730,7 +730,26 @@ void gc_dump_alloc_table(void) {
                 #endif
                 else if (*ptr == (mp_uint_t)&mp_type_fun_bc) { c = 'B'; }
                 else if (*ptr == (mp_uint_t)&mp_type_module) { c = 'M'; }
-                else { c = 'h'; }
+                else {
+                    c = 'h';
+                    #if 0
+                    // This code prints "Q" for qstr-pool data, and "q" for qstr-str
+                    // data.  It can be useful to see how qstrs are being allocated,
+                    // but is disabled by default because it is very slow.
+                    for (qstr_pool_t *pool = MP_STATE_VM(last_pool); c == 'h' && pool != NULL; pool = pool->prev) {
+                        if ((qstr_pool_t*)ptr == pool) {
+                            c = 'Q';
+                            break;
+                        }
+                        for (const byte **q = pool->qstrs, **q_top = pool->qstrs + pool->len; q < q_top; q++) {
+                            if ((const byte*)ptr == *q) {
+                                c = 'q';
+                                break;
+                            }
+                        }
+                    }
+                    #endif
+                }
                 break;
             }
             case AT_TAIL: c = 't'; break;
-- 
GitLab