diff options
author | zb3 <onlylogout@gmail.com> | 2019-05-17 17:46:24 +0200 |
---|---|---|
committer | Philip Withnall <withnall@endlessm.com> | 2019-05-21 12:20:35 +0100 |
commit | 44dbe80e5c9df8f6683bbe3cf0b530339c28bbe3 (patch) | |
tree | 781cd115bdb0a9e5227bde01b4f06105a6ad570f | |
parent | 4477ae63eaaae211d55813569eedd99ef3825835 (diff) | |
download | glib-44dbe80e5c9df8f6683bbe3cf0b530339c28bbe3.tar.gz |
Update gdb pretty-printer for GHashTable
Fixes #1780
-rw-r--r-- | glib/glib_gdb.py | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/glib/glib_gdb.py b/glib/glib_gdb.py index 1cf2ed936..37d01cb76 100644 --- a/glib/glib_gdb.py +++ b/glib/glib_gdb.py @@ -86,11 +86,27 @@ class GHashPrinter: "Prints a GHashTable" class _iterator: + class _pointer_array: + def __init__(self, ptr, big_items): + self._big_items = big_items + self._gpointer_type = gdb.lookup_type("gpointer") + item_type = self._gpointer_type if self._big_items else gdb.lookup_type("guint") + + self._items = ptr.cast(item_type.pointer()) + + def __getitem__(self, item): + item = self._items[item] + + if not self._big_items: + item = item.cast(self._gpointer_type) + + return item + def __init__(self, ht, keys_are_strings): self.ht = ht if ht != 0: - self.keys = ht["keys"] - self.values = ht["values"] + self.keys = self._pointer_array(ht["keys"], ht["have_big_keys"]) + self.values = self._pointer_array(ht["values"], ht["have_big_values"]) self.hashes = ht["hashes"] self.size = ht["size"] self.pos = 0 |