authorgravatar for silver@silv.reSilver <silver@silv.re> 2023-03-24 00:38:02+00:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-03-30 12:15:53+03:00
log83051b0cbf31b76e824d3911a7f4a0be3c0cf94d
tree8ae3b2040bad45e31d9cdce102d15bcbb8fd8e1a
parent11903436a9818cba1ef474dfd705d10798d16ef6

Update GDB pretty printers


1 files changed, 10 insertions(+), 11 deletions(-)

tools/zig_gdb_pretty_printers.py+10-11
...@@ -2,22 +2,24 @@...@@ -2,22 +2,24 @@
2# put "source /path/to/zig_gdb_pretty_printers.py" in ~/.gdbinit to load it automatically.2# put "source /path/to/zig_gdb_pretty_printers.py" in ~/.gdbinit to load it automatically.
3import gdb.printing3import gdb.printing
44
5
5class ZigPrettyPrinter(gdb.printing.PrettyPrinter):6class ZigPrettyPrinter(gdb.printing.PrettyPrinter):
6 def __init__(self):7 def __init__(self):
7 super().__init__('Zig')8 super().__init__('Zig')
89
9 def __call__(self, val):10 def __call__(self, val):
10 tag = val.type.tag11 tag = val.type.tag
11 if(tag is None):12 if tag is None:
12 return None13 return None
13 if(tag == '[]u8'):14 if tag == '[]u8':
14 return StringPrinter(val)15 return StringPrinter(val)
15 if(tag.startswith('[]')):16 if tag.startswith('[]'):
16 return SlicePrinter(val)17 return SlicePrinter(val)
17 if(tag.startswith('?')):18 if tag.startswith('?'):
18 return OptionalPrinter(val)19 return OptionalPrinter(val)
19 return None20 return None
2021
22
21class SlicePrinter:23class SlicePrinter:
22 def __init__(self, val):24 def __init__(self, val):
23 self.val = val25 self.val = val
...@@ -35,6 +37,7 @@ class SlicePrinter:...@@ -35,6 +37,7 @@ class SlicePrinter:
35 def display_hint(self):37 def display_hint(self):
36 return 'array'38 return 'array'
3739
40
38class StringPrinter:41class StringPrinter:
39 def __init__(self, val):42 def __init__(self, val):
40 self.val = val43 self.val = val
...@@ -45,20 +48,16 @@ class StringPrinter:...@@ -45,20 +48,16 @@ class StringPrinter:
45 def display_hint(self):48 def display_hint(self):
46 return 'string'49 return 'string'
4750
51
48class OptionalPrinter:52class OptionalPrinter:
49 def __init__(self, val):53 def __init__(self, val):
50 self.val = val54 self.val = val
5155
52 def to_string(self):56 def to_string(self):
53 if(self.val['maybe']):57 if self.val['some']:
54 return None # printed by children()58 return self.val['data']
55 else:59 else:
56 return 'null'60 return 'null'
5761
58 def children(self):
59 def it(val):
60 if(val['maybe']):
61 yield ('payload', val['val'])
62 return it(self.val)
6362
64gdb.printing.register_pretty_printer(gdb.current_objfile(), ZigPrettyPrinter())63gdb.printing.register_pretty_printer(gdb.current_objfile(), ZigPrettyPrinter())