]> git.xolatile.top Git - public-libhl.git/commitdiff
gdb regex_t pretty printer because vector_t was a footgun
authoranon <anon@anon.anon>
Sun, 27 Aug 2023 13:24:45 +0000 (15:24 +0200)
committeranon <anon@anon.anon>
Sun, 27 Aug 2023 13:24:45 +0000 (15:24 +0200)
debug/regex.pretty_print.py [new file with mode: 0644]

diff --git a/debug/regex.pretty_print.py b/debug/regex.pretty_print.py
new file mode 100644 (file)
index 0000000..86ac1b0
--- /dev/null
@@ -0,0 +1,54 @@
+class RegexPrinter:
+       def __init__(self, val):
+               self.val = val
+       def to_string(self):
+               # Init
+               s = "{"
+               #   Regular shit
+               s += "accepting_state = " + str(self.val['accepting_state']) + ", str = " + str(self.val['str']) + ",\n"
+               #   Delta
+               delta_t_ptr_ptr = gdb.lookup_type("delta_t").pointer().pointer()
+               dt = self.val['delta_table']
+               s += "delta_table = {\n"
+               for i in range(0, dt['element_count']):
+                       s += "\t"
+                       s += (
+                                       str(
+                                               (
+                                                       dt['data'].cast(delta_t_ptr_ptr)
+                                                               +
+                                                       i
+                                               ).dereference().dereference()
+                                       )
+                               )
+                       s += ",\n"
+               s = s[:-2]
+               s += "\n  },\n"
+               #   Offshoot
+               offshoot_t_ptr_ptr = gdb.lookup_type("offshoot_t").pointer().pointer()
+               dt = self.val['delta_table']
+               s += "offshoot_table = {\n"
+               for i in range(0, dt['element_count']):
+                       s += "\t"
+                       s += (
+                                       str(
+                                               (
+                                                       dt['data'].cast(offshoot_t_ptr_ptr)
+                                                               +
+                                                       i
+                                               ).dereference().dereference()
+                                       )
+                               )
+                       s += ",\n"
+               s = s[:-2]
+               s += "\n  }\n"
+               # Closour
+               s += "}"
+               return s
+
+def regex_lookup(val):
+       if str(val.type) == 'regex_t' or str(val.type) == 'const regex_t':
+               return RegexPrinter(val)
+       return None
+
+gdb.pretty_printers.append(regex_lookup)