You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

  1. #!/usr/bin/python
  2. # Usage: typeslots.py < Include/typeslots.h typeslots.inc
  3. import sys, re
  4. def generate_typeslots(out=sys.stdout):
  5. out.write("/* Generated by typeslots.py */\n")
  6. res = {}
  7. for line in sys.stdin:
  8. m = re.match("#define Py_([a-z_]+) ([0-9]+)", line)
  9. if not m:
  10. continue
  11. member = m.group(1)
  12. if member.startswith("tp_"):
  13. member = "ht_type."+member
  14. elif member.startswith("am_"):
  15. member = "as_async."+member
  16. elif member.startswith("nb_"):
  17. member = "as_number."+member
  18. elif member.startswith("mp_"):
  19. member = "as_mapping."+member
  20. elif member.startswith("sq_"):
  21. member = "as_sequence."+member
  22. elif member.startswith("bf_"):
  23. member = "as_buffer."+member
  24. res[int(m.group(2))] = member
  25. M = max(res.keys())+1
  26. for i in range(1,M):
  27. if i in res:
  28. out.write("offsetof(PyHeapTypeObject, %s),\n" % res[i])
  29. else:
  30. out.write("0,\n")
  31. def main():
  32. if len(sys.argv) == 2:
  33. with open(sys.argv[1], "w") as f:
  34. generate_typeslots(f)
  35. else:
  36. generate_typeslots()
  37. if __name__ == "__main__":
  38. main()