]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
qapi: Fix C code generation for 'if'
authorMarkus Armbruster <armbru@redhat.com>
Tue, 31 Aug 2021 12:38:02 +0000 (14:38 +0200)
committerMarkus Armbruster <armbru@redhat.com>
Fri, 3 Sep 2021 15:09:10 +0000 (17:09 +0200)
When commit 5d83b9a130 "qapi: replace if condition list with dict
{'all': [...]}" made cgen_ifcond() and docgen_ifcond() recursive, it
messed up parenthesises in the former, and got them right in the
latter, as the previous commit demonstrates.

To fix, adopt the latter's working code for the former.  This
generates the correct code from the previous commit's commit message.

Fixes: 5d83b9a130690f879d5f33e991beabe69cb88bc8
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210831123809.1107782-6-armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
scripts/qapi/common.py
tests/qapi-schema/qapi-schema-test.json

index 1c1dc87ccb3913d714c7425da06e7ee4efa2a2fb..f31e077d7b98a71048b5ef04f1d48214d5398523 100644 (file)
@@ -209,9 +209,9 @@ def cgen_ifcond(ifcond: Optional[Union[str, Dict[str, Any]]]) -> str:
     oper, operands = next(iter(ifcond.items()))
     if oper == 'not':
         return '!' + cgen_ifcond(operands)
-    oper = {'all': '&&', 'any': '||'}[oper]
+    oper = {'all': ' && ', 'any': ' || '}[oper]
     operands = [cgen_ifcond(o) for o in operands]
-    return '(' + (') ' + oper + ' (').join(operands) + ')'
+    return '(' + oper.join(operands) + ')'
 
 
 def docgen_ifcond(ifcond: Optional[Union[str, Dict[str, Any]]]) -> str:
index 6e3775828074b9aecd664fdbc7c1802aeab6333c..b6c36a9eeecda4d6e447460521b35908520e9615 100644 (file)
   'if': { 'all': ['TEST_IF_EVT', 'TEST_IF_STRUCT'] } }
 
 { 'event': 'TEST_IF_EVENT2', 'data': {},
-  # FIXME C #if generated for this conditional is wrong
   'if': { 'not': { 'any': [ { 'not': 'TEST_IF_EVT' },
                             { 'not': 'TEST_IF_STRUCT' } ] } } }