]>
Commit | Line | Data |
---|---|---|
e6c42b96 MA |
1 | # |
2 | # QAPI frontend source file info | |
3 | # | |
4 | # Copyright (c) 2019 Red Hat Inc. | |
5 | # | |
6 | # Authors: | |
7 | # Markus Armbruster <[email protected]> | |
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 | ||
12 | import copy | |
13 | import sys | |
14 | ||
15 | ||
baa310f1 | 16 | class QAPISchemaPragma: |
e6c42b96 MA |
17 | def __init__(self): |
18 | # Are documentation comments required? | |
19 | self.doc_required = False | |
20 | # Whitelist of commands allowed to return a non-dictionary | |
21 | self.returns_whitelist = [] | |
22 | # Whitelist of entities allowed to violate case conventions | |
23 | self.name_case_whitelist = [] | |
24 | ||
25 | ||
baa310f1 | 26 | class QAPISourceInfo: |
e6c42b96 MA |
27 | def __init__(self, fname, line, parent): |
28 | self.fname = fname | |
29 | self.line = line | |
30 | self.parent = parent | |
31 | self.pragma = parent.pragma if parent else QAPISchemaPragma() | |
32 | self.defn_meta = None | |
33 | self.defn_name = None | |
34 | ||
35 | def set_defn(self, meta, name): | |
36 | self.defn_meta = meta | |
37 | self.defn_name = name | |
38 | ||
39 | def next_line(self): | |
40 | info = copy.copy(self) | |
41 | info.line += 1 | |
42 | return info | |
43 | ||
44 | def loc(self): | |
45 | if self.fname is None: | |
46 | return sys.argv[0] | |
47 | ret = self.fname | |
48 | if self.line is not None: | |
49 | ret += ':%d' % self.line | |
50 | return ret | |
51 | ||
52 | def in_defn(self): | |
53 | if self.defn_name: | |
54 | return "%s: In %s '%s':\n" % (self.fname, | |
55 | self.defn_meta, self.defn_name) | |
56 | return '' | |
57 | ||
58 | def include_path(self): | |
59 | ret = '' | |
60 | parent = self.parent | |
61 | while parent: | |
62 | ret = 'In file included from %s:\n' % parent.loc() + ret | |
63 | parent = parent.parent | |
64 | return ret | |
65 | ||
66 | def __str__(self): | |
67 | return self.include_path() + self.in_defn() + self.loc() |