|
- 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['catch_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)
|