[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/12] qapi: Fix C code generation for 'if'
From: |
Markus Armbruster |
Subject: |
[PATCH 05/12] qapi: Fix C code generation for 'if' |
Date: |
Tue, 31 Aug 2021 14:38:02 +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>
---
scripts/qapi/common.py | 4 ++--
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' } ] } } }
--
2.31.1
- [PATCH 00/12] qapi: Fixes and cleanups for recent work (mostly), Markus Armbruster, 2021/08/31
- [PATCH 07/12] qapi: Avoid redundant parens in code generated for conditionals, Markus Armbruster, 2021/08/31
- [PATCH 01/12] qapi: Simplify QAPISchemaIfCond's interface for generating C, Markus Armbruster, 2021/08/31
- [PATCH 06/12] qapi: Factor common recursion out of cgen_ifcond(), docgen_ifcond(), Markus Armbruster, 2021/08/31
- [PATCH 02/12] qapi: Simplify how QAPISchemaIfCond represents "no condition", Markus Armbruster, 2021/08/31
- [PATCH 05/12] qapi: Fix C code generation for 'if',
Markus Armbruster <=
- [PATCH 04/12] tests/qapi-schema: Demonstrate broken C code for 'if', Markus Armbruster, 2021/08/31
- [PATCH 08/12] qapi: Use "not COND" instead of "!COND" for generated documentation, Markus Armbruster, 2021/08/31
- [PATCH 03/12] tests/qapi-schema: Correct two 'if' conditionals, Markus Armbruster, 2021/08/31
- [PATCH 10/12] tests/qapi-schema: Hide OrderedDict in test output, Markus Armbruster, 2021/08/31
- [PATCH 11/12] qapi: Tweak error messages for missing / conflicting meta-type, Markus Armbruster, 2021/08/31
- [PATCH 12/12] qapi: Tweak error messages for unknown / conflicting 'if' keys, Markus Armbruster, 2021/08/31
- [PATCH 09/12] qapi: Use re.fullmatch() where appropriate, Markus Armbruster, 2021/08/31
- Re: [PATCH 00/12] qapi: Fixes and cleanups for recent work (mostly), Marc-André Lureau, 2021/08/31