diff options
author | Markus Armbruster <armbru@redhat.com> | 2021-08-31 14:38:02 +0200 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2021-09-03 17:09:10 +0200 |
commit | 82ca72c023b42ee4061e092fd9d4750c756c0475 (patch) | |
tree | 9460ef0b9249e12cdc03c3c3a2564d287aaf2023 | |
parent | dd044023e6c1000e384c511e2d8f4c9d1a2a3e91 (diff) |
qapi: Fix C code generation for 'if'
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>
-rw-r--r-- | scripts/qapi/common.py | 4 | ||||
-rw-r--r-- | tests/qapi-schema/qapi-schema-test.json | 1 |
2 files changed, 2 insertions, 3 deletions
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 1c1dc87ccb..f31e077d7b 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -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: diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json index 6e37758280..b6c36a9eee 100644 --- a/tests/qapi-schema/qapi-schema-test.json +++ b/tests/qapi-schema/qapi-schema-test.json @@ -262,7 +262,6 @@ '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' } ] } } } |