John Snow <js...@redhat.com> writes: > _tree_to_qlit is called recursively on dict values (isolated from their > keys); at such a point in generating output it is too late to apply an > ifcond. Similarly, comments do not necessarily have a "tidy" place they > can be printed in such a circumstance. > > Forbid this usage by renaming "suppress_first_indent" to "dict_value" to > emphasize that indents are suppressed only for the benefit of dict > values; then add an assertion assuring we do not pass ifcond/comments > in this case. > > Signed-off-by: John Snow <js...@redhat.com> > --- > scripts/qapi/introspect.py | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py > index 4749f65ea3c..a7ccda5ab92 100644 > --- a/scripts/qapi/introspect.py > +++ b/scripts/qapi/introspect.py > @@ -34,7 +34,7 @@ def _make_tree(obj, ifcond, extra=None): > return obj > > > -def _tree_to_qlit(obj, level=0, suppress_first_indent=False): > +def _tree_to_qlit(obj, level=0, dict_value=False): > > def indent(level): > return level * 4 * ' ' > @@ -43,6 +43,12 @@ def indent(level): > ifobj, extra = obj > ifcond = extra.get('if') > comment = extra.get('comment') > + > + # NB: _tree_to_qlit is called recursively on the values of a > key:value > + # pair; those values can't be decorated with comments or > conditionals. > + msg = "dict values cannot have attached comments or if-conditionals."
I'm wrapping this comment to conform to PEP 8. > + assert not dict_value, msg > + > ret = '' > if comment: > ret += indent(level) + '/* %s */\n' % comment > @@ -54,7 +60,7 @@ def indent(level): > return ret > > ret = '' > - if not suppress_first_indent: > + if not dict_value: > ret += indent(level) > if obj is None: > ret += 'QLIT_QNULL'