tests/qapi-schema: Demonstrate broken C code for 'if'
The C code generated for 'if' conditionals is incorrectly parenthesized. For instance, 'if': { 'not': { 'any': [ { 'not': 'TEST_IF_EVT' }, { 'not': 'TEST_IF_STRUCT' } ] } } } generates #if !(!defined(TEST_IF_EVT)) || (!defined(TEST_IF_STRUCT)) This is wrong. Correct would be: #if !(!defined(TEST_IF_EVT) || !defined(TEST_IF_STRUCT)) Cover the issue in qapi-schema-test.json. This generates bad #if in tests/test-qapi-events.h and other files. Add a similar condition to doc-good.json. The generated documentation is fine. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210831123809.1107782-5-armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
cdcc04fa03
commit
dd044023e6
@ -127,7 +127,7 @@
|
||||
{ 'alternate': 'Alternate',
|
||||
'features': [ 'alt-feat' ],
|
||||
'data': { 'i': 'int', 'b': 'bool' },
|
||||
'if': { 'not': 'IFNOT' } }
|
||||
'if': { 'not': { 'any': [ 'IFONE', 'IFTWO' ] } } }
|
||||
|
||||
##
|
||||
# == Another subsection
|
||||
|
@ -51,7 +51,7 @@ alternate Alternate
|
||||
tag type
|
||||
case i: int
|
||||
case b: bool
|
||||
if OrderedDict([('not', 'IFNOT')])
|
||||
if OrderedDict([('not', OrderedDict([('any', ['IFONE', 'IFTWO'])]))])
|
||||
feature alt-feat
|
||||
object q_obj_cmd-arg
|
||||
member arg1: int optional=False
|
||||
|
@ -174,7 +174,7 @@ Features
|
||||
If
|
||||
~~
|
||||
|
||||
"!IFNOT"
|
||||
"!(IFONE or IFTWO)"
|
||||
|
||||
|
||||
Another subsection
|
||||
|
@ -261,6 +261,11 @@
|
||||
'bar': { 'type': ['TestIfEnum'], 'if': 'TEST_IF_EVT_BAR' } },
|
||||
'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' } ] } } }
|
||||
|
||||
# test 'features'
|
||||
|
||||
{ 'struct': 'FeatureStruct0',
|
||||
|
@ -357,6 +357,9 @@ object q_obj_TEST_IF_EVENT-arg
|
||||
event TEST_IF_EVENT q_obj_TEST_IF_EVENT-arg
|
||||
boxed=False
|
||||
if OrderedDict([('all', ['TEST_IF_EVT', 'TEST_IF_STRUCT'])])
|
||||
event TEST_IF_EVENT2 None
|
||||
boxed=False
|
||||
if OrderedDict([('not', OrderedDict([('any', [OrderedDict([('not', 'TEST_IF_EVT')]), OrderedDict([('not', 'TEST_IF_STRUCT')])])]))])
|
||||
object FeatureStruct0
|
||||
member foo: int optional=False
|
||||
object FeatureStruct1
|
||||
|
Loading…
Reference in New Issue
Block a user