25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

56 satır
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_t = gdb.lookup_type("delta_t").pointer().pointer()
  11. dt = self.val['delta_table']
  12. s += "delta_table = {\n"
  13. d0 = 0
  14. for i in range(0, dt['element_count']):
  15. s += "\t"
  16. s += (
  17. str(
  18. (
  19. dt['data'].cast(delta_t_ptr_ptr_t)
  20. +
  21. i
  22. ).dereference().dereference()
  23. )
  24. )
  25. s += ",\n"
  26. s = s[:-2]
  27. s += "\n },\n"
  28. # Offshoot
  29. offshoot_t_ptr_ptr = gdb.lookup_type("offshoot_t").pointer().pointer()
  30. dt = self.val['catch_table']
  31. s += "offshoot_table = { \n"
  32. for i in range(0, dt['element_count']):
  33. s += "\t"
  34. s += (
  35. str(
  36. (
  37. dt['data'].cast(offshoot_t_ptr_ptr)
  38. +
  39. i
  40. ).dereference().dereference()
  41. )
  42. )
  43. s += ",\n"
  44. s = s[:-2]
  45. s += "\n }\n"
  46. # Closour
  47. s += "}"
  48. return s
  49. def regex_lookup(val):
  50. if str(val.type) == 'regex_t' or str(val.type) == 'const regex_t':
  51. return RegexPrinter(val)
  52. return None
  53. gdb.pretty_printers.append(regex_lookup)