--- /dev/null
+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)