2
0

source.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #
  2. # QAPI frontend source file info
  3. #
  4. # Copyright (c) 2019 Red Hat Inc.
  5. #
  6. # Authors:
  7. # Markus Armbruster <armbru@redhat.com>
  8. #
  9. # This work is licensed under the terms of the GNU GPL, version 2.
  10. # See the COPYING file in the top-level directory.
  11. import copy
  12. import sys
  13. class QAPISchemaPragma(object):
  14. def __init__(self):
  15. # Are documentation comments required?
  16. self.doc_required = False
  17. # Whitelist of commands allowed to return a non-dictionary
  18. self.returns_whitelist = []
  19. # Whitelist of entities allowed to violate case conventions
  20. self.name_case_whitelist = []
  21. class QAPISourceInfo(object):
  22. def __init__(self, fname, line, parent):
  23. self.fname = fname
  24. self.line = line
  25. self.parent = parent
  26. self.pragma = parent.pragma if parent else QAPISchemaPragma()
  27. self.defn_meta = None
  28. self.defn_name = None
  29. def set_defn(self, meta, name):
  30. self.defn_meta = meta
  31. self.defn_name = name
  32. def next_line(self):
  33. info = copy.copy(self)
  34. info.line += 1
  35. return info
  36. def loc(self):
  37. if self.fname is None:
  38. return sys.argv[0]
  39. ret = self.fname
  40. if self.line is not None:
  41. ret += ':%d' % self.line
  42. return ret
  43. def in_defn(self):
  44. if self.defn_name:
  45. return "%s: In %s '%s':\n" % (self.fname,
  46. self.defn_meta, self.defn_name)
  47. return ''
  48. def include_path(self):
  49. ret = ''
  50. parent = self.parent
  51. while parent:
  52. ret = 'In file included from %s:\n' % parent.loc() + ret
  53. parent = parent.parent
  54. return ret
  55. def __str__(self):
  56. return self.include_path() + self.in_defn() + self.loc()