schema.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from pycparser import c_ast
  2. class Pointer:
  3. def __init__(self, base: str, level: int):
  4. # super().__init__(f'{base}' + '*' * level)
  5. self.base = base
  6. self.level = level
  7. class NamedFields:
  8. def __init__(self, name: str, fields: dict[str, str] | None, typedef_name: str | None = None):
  9. self.name = name
  10. self.fields = fields
  11. self.typedef_name = typedef_name
  12. def is_opaque(self):
  13. return self.fields is None
  14. def __repr__(self):
  15. cls = type(self).__name__
  16. return f"{cls}('{self.name}', {self.fields!r})"
  17. class Struct(NamedFields): pass
  18. class Union(NamedFields): pass
  19. class Enum:
  20. def __init__(self, name: str, typedef_name: str | None = None):
  21. self.name = name
  22. self.typedef_name = typedef_name
  23. self.values = [] # type: list[str]
  24. def __repr__(self):
  25. return f"Enum('{self.name}', values={self.values!r})"
  26. class Function:
  27. def __init__(self, name: str, ret: str):
  28. self.name = name
  29. self.args = [] # type: list[tuple[str, str]]
  30. self.ret = ret
  31. def __repr__(self):
  32. return f"Function('{self.name}', args={self.args!r}, ret={self.ret!r})"