/Tools/framer/framer/member.py

http://unladen-swallow.googlecode.com/ · Python · 73 lines · 63 code · 9 blank · 1 comment · 7 complexity · dc66feb3e5e9085c68cd2249fe6d93f9 MD5 · raw file

  1. from framer import template
  2. from framer.util import cstring, unindent
  3. T_SHORT = "T_SHORT"
  4. T_INT = "T_INT"
  5. T_LONG = "T_LONG"
  6. T_FLOAT = "T_FLOAT"
  7. T_DOUBLE = "T_DOUBLE"
  8. T_STRING = "T_STRING"
  9. T_OBJECT = "T_OBJECT"
  10. T_CHAR = "T_CHAR"
  11. T_BYTE = "T_BYTE"
  12. T_UBYTE = "T_UBYTE"
  13. T_UINT = "T_UINT"
  14. T_ULONG = "T_ULONG"
  15. T_STRING_INPLACE = "T_STRING_INPLACE"
  16. T_OBJECT_EX = "T_OBJECT_EX"
  17. RO = READONLY = "READONLY"
  18. READ_RESTRICTED = "READ_RESTRICTED"
  19. WRITE_RESTRICTED = "WRITE_RESTRICTED"
  20. RESTRICT = "RESTRICTED"
  21. c2t = {"int" : T_INT,
  22. "unsigned int" : T_UINT,
  23. "long" : T_LONG,
  24. "unsigned long" : T_LONG,
  25. "float" : T_FLOAT,
  26. "double" : T_DOUBLE,
  27. "char *" : T_CHAR,
  28. "PyObject *" : T_OBJECT,
  29. }
  30. class member(object):
  31. def __init__(self, cname=None, type=None, flags=None, doc=None):
  32. self.type = type
  33. self.flags = flags
  34. self.cname = cname
  35. self.doc = doc
  36. self.name = None
  37. self.struct = None
  38. def register(self, name, struct):
  39. self.name = name
  40. self.struct = struct
  41. self.initvars()
  42. def initvars(self):
  43. v = self.vars = {}
  44. v["PythonName"] = self.name
  45. if self.cname is not None:
  46. v["CName"] = self.cname
  47. else:
  48. v["CName"] = self.name
  49. v["Flags"] = self.flags or "0"
  50. v["Type"] = self.get_type()
  51. if self.doc is not None:
  52. v["Docstring"] = cstring(unindent(self.doc))
  53. v["StructName"] = self.struct.name
  54. def get_type(self):
  55. """Deduce type code from struct specification if not defined"""
  56. if self.type is not None:
  57. return self.type
  58. ctype = self.struct.get_type(self.name)
  59. return c2t[ctype]
  60. def dump(self, f):
  61. if self.doc is None:
  62. print >> f, template.memberdef_def % self.vars
  63. else:
  64. print >> f, template.memberdef_def_doc % self.vars