Highlight things
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

55 рядки
1.2KB

  1. class RegexPrinter:
  2. def __init__(self, val):
  3. self.val = val
  4. def to_string(self):
  5. # Init
  6. s = "{"
  7. # Regular shit
  8. s += "accepting_state = " + str(self.val['accepting_state']) + ", str = " + str(self.val['str']) + ",\n"
  9. # Delta
  10. delta_t_ptr_ptr = gdb.lookup_type("delta_t").pointer().pointer()
  11. dt = self.val['delta_table']
  12. s += "delta_table = {\n"
  13. for i in range(0, dt['element_count']):
  14. s += "\t"
  15. s += (
  16. str(
  17. (
  18. dt['data'].cast(delta_t_ptr_ptr)
  19. +
  20. i
  21. ).dereference().dereference()
  22. )
  23. )
  24. s += ",\n"
  25. s = s[:-2]
  26. s += "\n },\n"
  27. # Offshoot
  28. offshoot_t_ptr_ptr = gdb.lookup_type("offshoot_t").pointer().pointer()
  29. dt = self.val['catch_table']
  30. s += "offshoot_table = {\n"
  31. for i in range(0, dt['element_count']):
  32. s += "\t"
  33. s += (
  34. str(
  35. (
  36. dt['data'].cast(offshoot_t_ptr_ptr)
  37. +
  38. i
  39. ).dereference().dereference()
  40. )
  41. )
  42. s += ",\n"
  43. s = s[:-2]
  44. s += "\n }\n"
  45. # Closour
  46. s += "}"
  47. return s
  48. def regex_lookup(val):
  49. if str(val.type) == 'regex_t' or str(val.type) == 'const regex_t':
  50. return RegexPrinter(val)
  51. return None
  52. gdb.pretty_printers.append(regex_lookup)