mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-15 04:05:11 +01:00
Add pretty printing for GList and GSList
This commit is contained in:
parent
efe9169234
commit
2e8768d9a5
77
glib/glib.py
77
glib/glib.py
@ -16,8 +16,85 @@ def g_quark_to_string (quark):
|
|||||||
return val[quark].string()
|
return val[quark].string()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# We override the node printers too, so that node->next is not expanded
|
||||||
|
class GListNodePrinter:
|
||||||
|
"Prints a GList node"
|
||||||
|
|
||||||
|
def __init__ (self, val):
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string (self):
|
||||||
|
return "{data=%s, next=0x%x, prev=0x%x}" % (str(self.val["data"]), long(self.val["next"]), long(self.val["prev"]))
|
||||||
|
|
||||||
|
class GSListNodePrinter:
|
||||||
|
"Prints a GSList node"
|
||||||
|
|
||||||
|
def __init__ (self, val):
|
||||||
|
self.val = val
|
||||||
|
|
||||||
|
def to_string (self):
|
||||||
|
return "{data=%s, next=0x%x}" % (str(self.val["data"]), long(self.val["next"]))
|
||||||
|
|
||||||
|
class GListPrinter:
|
||||||
|
"Prints a GList"
|
||||||
|
|
||||||
|
class _iterator:
|
||||||
|
def __init__(self, head, listtype):
|
||||||
|
self.link = head
|
||||||
|
self.listtype = listtype
|
||||||
|
self.count = 0
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
if self.link == 0:
|
||||||
|
raise StopIteration
|
||||||
|
data = self.link['data']
|
||||||
|
self.link = self.link['next']
|
||||||
|
count = self.count
|
||||||
|
self.count = self.count + 1
|
||||||
|
return ('[%d]' % count, data)
|
||||||
|
|
||||||
|
def __init__ (self, val, listtype):
|
||||||
|
self.val = val
|
||||||
|
self.listtype = listtype
|
||||||
|
|
||||||
|
def children(self):
|
||||||
|
return self._iterator(self.val, self.listtype)
|
||||||
|
|
||||||
|
def to_string (self):
|
||||||
|
return "0x%x" % (long(self.val))
|
||||||
|
|
||||||
|
def display_hint (self):
|
||||||
|
return "array"
|
||||||
|
|
||||||
|
def pretty_printer_lookup (val):
|
||||||
|
if is_g_type_instance (val):
|
||||||
|
return GTypePrettyPrinter (val)
|
||||||
|
|
||||||
def pretty_printer_lookup (val):
|
def pretty_printer_lookup (val):
|
||||||
# None yet, want things like hash table and list
|
# None yet, want things like hash table and list
|
||||||
|
|
||||||
|
type = val.type.unqualified()
|
||||||
|
|
||||||
|
# If it points to a reference, get the reference.
|
||||||
|
if type.code == gdb.TYPE_CODE_REF:
|
||||||
|
type = type.target ()
|
||||||
|
|
||||||
|
if type.code == gdb.TYPE_CODE_PTR:
|
||||||
|
type = type.target().unqualified()
|
||||||
|
t = str(type)
|
||||||
|
if t == "GList":
|
||||||
|
return GListPrinter(val, "GList")
|
||||||
|
if t == "GSList":
|
||||||
|
return GListPrinter(val, "GSList")
|
||||||
|
else:
|
||||||
|
t = str(type)
|
||||||
|
if t == "GList":
|
||||||
|
return GListNodePrinter(val)
|
||||||
|
if t == "GSList *":
|
||||||
|
return GListPrinter(val, "GSList")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def register (obj):
|
def register (obj):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user