Allow to filter expressions based on unit name. By default, only default units are processed (unspecified pragma).
'all' will include all units. Anything else will filter by unit name. (add a FIXME to make implicit array types use the element type unit, not the unit of the first expression using that array type. This isn't necessary for now, and I am not sure how to best do it yet) Signed-off-by: Marc-André Lureau <[email protected]> --- scripts/qapi.py | 14 ++++++++++++-- scripts/qapi2texi.py | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index 1d0defd638..7778585819 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -47,6 +47,9 @@ returns_whitelist = [] # Whitelist of entities allowed to violate case conventions name_case_whitelist = [] +# Unit to consider for the visit, 'all' for all units +visit_unit = None + enum_types = {} struct_types = {} union_types = {} @@ -1796,6 +1799,10 @@ class QAPISchema(object): def visit(self, visitor): visitor.visit_begin(self) for (name, entity) in sorted(self._entity_dict.items()): + # FIXME: implicit array types should use element type unit + unit = entity.info and entity.info.get('unit') + if visit_unit != 'all' and visit_unit != unit: + continue if visitor.visit_needed(entity): entity.visit(visitor) visitor.visit_end() @@ -2103,13 +2110,14 @@ def parse_command_line(extra_options='', extra_long_options=[]): try: opts, args = getopt.gnu_getopt(sys.argv[1:], - 'chp:o:i:' + extra_options, + 'chp:o:u:i:' + extra_options, ['source', 'header', 'prefix=', 'output-dir=', - 'include='] + extra_long_options) + 'unit=', 'include='] + extra_long_options) except getopt.GetoptError as err: print >>sys.stderr, "%s: %s" % (sys.argv[0], str(err)) sys.exit(1) + global visit_unit output_dir = '' prefix = '' do_c = False @@ -2129,6 +2137,8 @@ def parse_command_line(extra_options='', extra_long_options=[]): prefix = a elif o in ('-o', '--output-dir'): output_dir = a + '/' + elif o in ('-u', '--unit'): + visit_unit = a elif o in ('-c', '--source'): do_c = True elif o in ('-h', '--header'): diff --git a/scripts/qapi2texi.py b/scripts/qapi2texi.py index 4e7b1cda87..6c856d4cb7 100755 --- a/scripts/qapi2texi.py +++ b/scripts/qapi2texi.py @@ -293,6 +293,7 @@ def main(argv): print >>sys.stderr, "%s: need exactly 1 argument: SCHEMA" % argv[0] sys.exit(1) + qapi.visit_unit = 'all' schema = qapi.QAPISchema(argv[1]) if not qapi.doc_required: print >>sys.stderr, ("%s: need pragma 'doc-required' " -- 2.14.1.146.gd35faa819
