mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-02 15:46:17 +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 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):
|
||||
# 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
|
||||
|
||||
def register (obj):
|
||||
|
Loading…
Reference in New Issue
Block a user