[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/13] qapi: Fix C code generation for 'if'
From: |
Markus Armbruster |
Subject: |
[PULL 06/13] qapi: Fix C code generation for 'if' |
Date: |
Fri, 3 Sep 2021 21:32: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>
Message-Id: <20210831123809.1107782-6-armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@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
- [PULL 00/13] QAPI patches patches for 2021-09-03, Markus Armbruster, 2021/09/03
- [PULL 01/13] qapi: Set boolean value correctly in examples, Markus Armbruster, 2021/09/03
- [PULL 06/13] qapi: Fix C code generation for 'if',
Markus Armbruster <=
- [PULL 10/13] qapi: Use re.fullmatch() where appropriate, Markus Armbruster, 2021/09/03
- [PULL 04/13] tests/qapi-schema: Correct two 'if' conditionals, Markus Armbruster, 2021/09/03
- [PULL 03/13] qapi: Simplify how QAPISchemaIfCond represents "no condition", Markus Armbruster, 2021/09/03
- [PULL 05/13] tests/qapi-schema: Demonstrate broken C code for 'if', Markus Armbruster, 2021/09/03
- [PULL 08/13] qapi: Avoid redundant parens in code generated for conditionals, Markus Armbruster, 2021/09/03
- [PULL 12/13] qapi: Tweak error messages for missing / conflicting meta-type, Markus Armbruster, 2021/09/03
- [PULL 11/13] tests/qapi-schema: Hide OrderedDict in test output, Markus Armbruster, 2021/09/03
- [PULL 02/13] qapi: Simplify QAPISchemaIfCond's interface for generating C, Markus Armbruster, 2021/09/03
- [PULL 13/13] qapi: Tweak error messages for unknown / conflicting 'if' keys, Markus Armbruster, 2021/09/03
- [PULL 07/13] qapi: Factor common recursion out of cgen_ifcond(), docgen_ifcond(), Markus Armbruster, 2021/09/03