Marc-André Lureau <marcandre.lur...@redhat.com> writes: > Hi > > ----- Original Message ----- >> Marc-André Lureau <marcandre.lur...@redhat.com> writes: >> >> > The type_seen member can be of a different type than the 'qtype' being >> > checked, since a string create several conflicts. Lookup the real >> > conflicting type in the conflict set, that one must be present in >> > type_seen. >> > >> > This fixes the following error, reproducible with the modified test: >> > >> > Traceback (most recent call last): >> > File "/home/elmarco/src/qq/tests/qapi-schema/test-qapi.py", line 56, in >> > <module> >> > schema = QAPISchema(sys.argv[1]) >> > File "/home/elmarco/src/qq/scripts/qapi.py", line 1470, in __init__ >> > self.exprs = check_exprs(parser.exprs) >> > File "/home/elmarco/src/qq/scripts/qapi.py", line 959, in check_exprs >> > check_alternate(expr, info) >> > File "/home/elmarco/src/qq/scripts/qapi.py", line 831, in check_alternate >> > % (name, key, types_seen[qtype])) >> > KeyError: 'QTYPE_QSTRING' >> > >> > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> >> > --- >> > scripts/qapi.py | 6 ++++-- >> > tests/qapi-schema/alternate-conflict-string.json | 4 ++-- >> > 2 files changed, 6 insertions(+), 4 deletions(-) >> > >> > diff --git a/scripts/qapi.py b/scripts/qapi.py >> > index 8aa2775f12..a3ac799535 100644 >> > --- a/scripts/qapi.py >> > +++ b/scripts/qapi.py >> > @@ -825,10 +825,12 @@ def check_alternate(expr, info): >> > else: >> > conflicting.add('QTYPE_QNUM') >> > conflicting.add('QTYPE_QBOOL') >> > - if conflicting & set(types_seen): >> > + conflict = conflicting & set(types_seen) >> > + if conflict: >> > + conflict_qtype = list(conflict)[0] >> >> Converting from set to list just to extract an element is clumsly. >> Let's use conflict.pop(), and eliminate the variable. Can do on commit. > > I didn't realize that. thanks
I didn't know about .pop() either, but I went "there's *got* to be a better way!" and searched the docs for it :) [...]