qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: marcandre.lureau@redhat.com, qemu-devel@nongnu.org
Cc: armbru@redhat.com
Subject: Re: [PATCH v3 8/9] qapi: make 'if' condition strings simple identifiers
Date: Wed, 12 May 2021 19:56:45 -0400	[thread overview]
Message-ID: <6fcc67a8-cb4f-90f9-f34d-6f73628d449b@redhat.com> (raw)
In-Reply-To: <20210429134032.1125111-9-marcandre.lureau@redhat.com>

On 4/29/21 9:40 AM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Change the 'if' condition strings to be C-agnostic and be simple
> identifiers.
> 

Oh, the answer to my last question. We strip off the defined(...) stuff 
here and now.

Seems fine to me, as I like removing C-specific bits of information from 
the QAPI schema.

As a "downgrade", we can't write arbitrary ifconds anymore. I only 
skimmed this list, but ... were we using any? I won't shed a tear for 
them, personally. This DOES give me more meaningful information to work 
with for other generators, for other languages.

Tested-by: John Snow <jsnow@redhat.com>

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   docs/devel/qapi-code-gen.txt                  |  8 +--
>   qapi/block-core.json                          | 16 ++---
>   qapi/block-export.json                        |  6 +-
>   qapi/char.json                                |  8 +--
>   qapi/machine-target.json                      | 40 ++++++-------
>   qapi/migration.json                           | 10 ++--
>   qapi/misc-target.json                         | 48 +++++++--------
>   qapi/qom.json                                 | 10 ++--
>   qapi/sockets.json                             |  4 +-
>   qapi/ui.json                                  | 48 +++++++--------
>   qga/qapi-schema.json                          |  8 +--
>   scripts/qapi/common.py                        |  2 +-
>   scripts/qapi/expr.py                          |  4 +-
>   .../alternate-branch-if-invalid.err           |  2 +-
>   tests/qapi-schema/bad-if-empty.err            |  2 +-
>   tests/qapi-schema/bad-if-list.err             |  2 +-
>   tests/qapi-schema/bad-if.json                 |  2 +-
>   tests/qapi-schema/doc-good.json               |  6 +-
>   tests/qapi-schema/doc-good.out                |  6 +-
>   tests/qapi-schema/doc-good.txt                |  6 +-
>   tests/qapi-schema/features-missing-name.json  |  2 +-
>   tests/qapi-schema/qapi-schema-test.json       | 52 ++++++++--------
>   tests/qapi-schema/qapi-schema-test.out        | 60 +++++++++----------
>   tests/qapi-schema/union-branch-if-invalid.err |  2 +-
>   24 files changed, 177 insertions(+), 177 deletions(-)
> 
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index c1cb6f987d..edaaf7ec40 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -791,7 +791,7 @@ will then be guarded by #if STRING for each STRING in the COND list.
>   Example: a conditional struct
>   
>    { 'struct': 'IfStruct', 'data': { 'foo': 'int' },
> -   'if': ['defined(CONFIG_FOO)', 'defined(HAVE_BAR)'] }
> +   'if': ['CONFIG_FOO', 'HAVE_BAR'] }
>   
>   gets its generated code guarded like this:
>   
> @@ -810,7 +810,7 @@ member 'bar'
>   
>   { 'struct': 'IfStruct', 'data':
>     { 'foo': 'int',
> -    'bar': { 'type': 'int', 'if': 'defined(IFCOND)'} } }
> +    'bar': { 'type': 'int', 'if': 'IFCOND'} } }
>   
>   A union's discriminator may not be conditional.
>   
> @@ -822,7 +822,7 @@ value 'bar'
>   
>   { 'enum': 'IfEnum', 'data':
>     [ 'foo',
> -    { 'name' : 'bar', 'if': 'defined(IFCOND)' } ] }
> +    { 'name' : 'bar', 'if': 'IFCOND' } ] }
>   
>   Likewise, features can be conditional.  This requires the longhand
>   form of FEATURE.
> @@ -832,7 +832,7 @@ Example: a struct with conditional feature 'allow-negative-numbers'
>   { 'struct': 'TestType',
>     'data': { 'number': 'int' },
>     'features': [ { 'name': 'allow-negative-numbers',
> -                  'if': 'defined(IFCOND)' } ] }
> +                  'if': 'IFCOND' } ] }
>   
>   Please note that you are responsible to ensure that the C code will
>   compile with an arbitrary combination of conditions, since the
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 6d227924d0..82213feb18 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -2779,7 +2779,7 @@
>   ##
>   { 'enum': 'BlockdevAioOptions',
>     'data': [ 'threads', 'native',
> -            { 'name': 'io_uring', 'if': 'defined(CONFIG_LINUX_IO_URING)' } ] }
> +            { 'name': 'io_uring', 'if': 'CONFIG_LINUX_IO_URING' } ] }
>   
>   ##
>   # @BlockdevCacheOptions:
> @@ -2817,7 +2817,7 @@
>               'gluster', 'host_cdrom', 'host_device', 'http', 'https', 'iscsi',
>               'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
>               'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
> -            { 'name': 'replication', 'if': 'defined(CONFIG_REPLICATION)' },
> +            { 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
>               'sheepdog',
>               'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat' ] }
>   
> @@ -2860,10 +2860,10 @@
>               '*locking': 'OnOffAuto',
>               '*aio': 'BlockdevAioOptions',
>               '*drop-cache': {'type': 'bool',
> -                            'if': 'defined(CONFIG_LINUX)'},
> +                            'if': 'CONFIG_LINUX'},
>               '*x-check-cache-dropped': 'bool' },
>     'features': [ { 'name': 'dynamic-auto-read-only',
> -                  'if': 'defined(CONFIG_POSIX)' } ] }
> +                  'if': 'CONFIG_POSIX' } ] }
>   
>   ##
>   # @BlockdevOptionsNull:
> @@ -3683,7 +3683,7 @@
>   # Since: 2.9
>   ##
>   { 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ],
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @BlockdevOptionsReplication:
> @@ -3702,7 +3702,7 @@
>     'base': 'BlockdevOptionsGenericFormat',
>     'data': { 'mode': 'ReplicationMode',
>               '*top-id': 'str' },
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @NFSTransport:
> @@ -4036,7 +4036,7 @@
>         'raw':        'BlockdevOptionsRaw',
>         'rbd':        'BlockdevOptionsRbd',
>         'replication': { 'type': 'BlockdevOptionsReplication',
> -                       'if': 'defined(CONFIG_REPLICATION)' },
> +                       'if': 'CONFIG_REPLICATION' },
>         'sheepdog':   'BlockdevOptionsSheepdog',
>         'ssh':        'BlockdevOptionsSsh',
>         'throttle':   'BlockdevOptionsThrottle',
> @@ -4338,7 +4338,7 @@
>   # Since: 5.1
>   ##
>   { 'enum': 'Qcow2CompressionType',
> -  'data': [ 'zlib', { 'name': 'zstd', 'if': 'defined(CONFIG_ZSTD)' } ] }
> +  'data': [ 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }
>   
>   ##
>   # @BlockdevCreateOptionsQcow2:
> diff --git a/qapi/block-export.json b/qapi/block-export.json
> index e819e70cac..319992b1b0 100644
> --- a/qapi/block-export.json
> +++ b/qapi/block-export.json
> @@ -137,7 +137,7 @@
>   { 'struct': 'BlockExportOptionsFuse',
>     'data': { 'mountpoint': 'str',
>               '*growable': 'bool' },
> -  'if': 'defined(CONFIG_FUSE)' }
> +  'if': 'CONFIG_FUSE' }
>   
>   ##
>   # @NbdServerAddOptions:
> @@ -247,7 +247,7 @@
>   ##
>   { 'enum': 'BlockExportType',
>     'data': [ 'nbd', 'vhost-user-blk',
> -            { 'name': 'fuse', 'if': 'defined(CONFIG_FUSE)' } ] }
> +            { 'name': 'fuse', 'if': 'CONFIG_FUSE' } ] }
>   
>   ##
>   # @BlockExportOptions:
> @@ -290,7 +290,7 @@
>         'nbd': 'BlockExportOptionsNbd',
>         'vhost-user-blk': 'BlockExportOptionsVhostUserBlk',
>         'fuse': { 'type': 'BlockExportOptionsFuse',
> -                'if': 'defined(CONFIG_FUSE)' }
> +                'if': 'CONFIG_FUSE' }
>      } }
>   
>   ##
> diff --git a/qapi/char.json b/qapi/char.json
> index 6413970fa7..bf3f8d54e5 100644
> --- a/qapi/char.json
> +++ b/qapi/char.json
> @@ -342,7 +342,7 @@
>   { 'struct': 'ChardevSpiceChannel',
>     'data': { 'type': 'str' },
>     'base': 'ChardevCommon',
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @ChardevSpicePort:
> @@ -356,7 +356,7 @@
>   { 'struct': 'ChardevSpicePort',
>     'data': { 'fqdn': 'str' },
>     'base': 'ChardevCommon',
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @ChardevVC:
> @@ -414,9 +414,9 @@
>               'stdio': 'ChardevStdio',
>               'console': 'ChardevCommon',
>               'spicevmc': { 'type': 'ChardevSpiceChannel',
> -                          'if': 'defined(CONFIG_SPICE)' },
> +                          'if': 'CONFIG_SPICE' },
>               'spiceport': { 'type': 'ChardevSpicePort',
> -                           'if': 'defined(CONFIG_SPICE)' },
> +                           'if': 'CONFIG_SPICE' },
>               'vc': 'ChardevVC',
>               'ringbuf': 'ChardevRingbuf',
>               # next one is just for compatibility
> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
> index 9b56b81bea..f5ec4bc172 100644
> --- a/qapi/machine-target.json
> +++ b/qapi/machine-target.json
> @@ -89,7 +89,7 @@
>   ##
>   { 'struct': 'CpuModelBaselineInfo',
>     'data': { 'model': 'CpuModelInfo' },
> -  'if': 'defined(TARGET_S390X)' }
> +  'if': 'TARGET_S390X' }
>   
>   ##
>   # @CpuModelCompareInfo:
> @@ -112,7 +112,7 @@
>   { 'struct': 'CpuModelCompareInfo',
>     'data': { 'result': 'CpuModelCompareResult',
>               'responsible-properties': ['str'] },
> -  'if': 'defined(TARGET_S390X)' }
> +  'if': 'TARGET_S390X' }
>   
>   ##
>   # @query-cpu-model-comparison:
> @@ -156,7 +156,7 @@
>   { 'command': 'query-cpu-model-comparison',
>     'data': { 'modela': 'CpuModelInfo', 'modelb': 'CpuModelInfo' },
>     'returns': 'CpuModelCompareInfo',
> -  'if': 'defined(TARGET_S390X)' }
> +  'if': 'TARGET_S390X' }
>   
>   ##
>   # @query-cpu-model-baseline:
> @@ -200,7 +200,7 @@
>     'data': { 'modela': 'CpuModelInfo',
>               'modelb': 'CpuModelInfo' },
>     'returns': 'CpuModelBaselineInfo',
> -  'if': 'defined(TARGET_S390X)' }
> +  'if': 'TARGET_S390X' }
>   
>   ##
>   # @CpuModelExpansionInfo:
> @@ -213,9 +213,9 @@
>   ##
>   { 'struct': 'CpuModelExpansionInfo',
>     'data': { 'model': 'CpuModelInfo' },
> -  'if': { 'any': [ 'defined(TARGET_S390X)',
> -                   'defined(TARGET_I386)',
> -                   'defined(TARGET_ARM)'] } }
> +  'if': { 'any': [ 'TARGET_S390X',
> +                   'TARGET_I386',
> +                   'TARGET_ARM' ] } }
>   
>   ##
>   # @query-cpu-model-expansion:
> @@ -254,9 +254,9 @@
>     'data': { 'type': 'CpuModelExpansionType',
>               'model': 'CpuModelInfo' },
>     'returns': 'CpuModelExpansionInfo',
> -  'if': { 'any': [ 'defined(TARGET_S390X)',
> -                   'defined(TARGET_I386)',
> -                   'defined(TARGET_ARM)' ] } }
> +  'if': { 'any': [ 'TARGET_S390X',
> +                   'TARGET_I386',
> +                   'TARGET_ARM' ] } }
>   
>   ##
>   # @CpuDefinitionInfo:
> @@ -320,11 +320,11 @@
>               'typename': 'str',
>               '*alias-of' : 'str',
>               'deprecated' : 'bool' },
> -  'if': { 'any': [ 'defined(TARGET_PPC)',
> -                   'defined(TARGET_ARM)',
> -                   'defined(TARGET_I386)',
> -                   'defined(TARGET_S390X)',
> -                   'defined(TARGET_MIPS)' ] } }
> +  'if': { 'any': [ 'TARGET_PPC',
> +                   'TARGET_ARM',
> +                   'TARGET_I386',
> +                   'TARGET_S390X',
> +                   'TARGET_MIPS' ] } }
>   
>   ##
>   # @query-cpu-definitions:
> @@ -336,8 +336,8 @@
>   # Since: 1.2
>   ##
>   { 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'],
> -  'if': { 'any': [ 'defined(TARGET_PPC)',
> -                   'defined(TARGET_ARM)',
> -                   'defined(TARGET_I386)',
> -                   'defined(TARGET_S390X)',
> -                   'defined(TARGET_MIPS)' ] } }
> +  'if': { 'any': [ 'TARGET_PPC',
> +                   'TARGET_ARM',
> +                   'TARGET_I386',
> +                   'TARGET_S390X',
> +                   'TARGET_MIPS' ] } }
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 0b17cce46b..43e7b7620d 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -539,7 +539,7 @@
>   ##
>   { 'enum': 'MultiFDCompression',
>     'data': [ 'none', 'zlib',
> -            { 'name': 'zstd', 'if': 'defined(CONFIG_ZSTD)' } ] }
> +            { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }
>   
>   ##
>   # @BitmapMigrationBitmapAliasTransform:
> @@ -1568,7 +1568,7 @@
>   ##
>   { 'command': 'xen-set-replication',
>     'data': { 'enable': 'bool', 'primary': 'bool', '*failover' : 'bool' },
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @ReplicationStatus:
> @@ -1584,7 +1584,7 @@
>   ##
>   { 'struct': 'ReplicationStatus',
>     'data': { 'error': 'bool', '*desc': 'str' },
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @query-xen-replication-status:
> @@ -1602,7 +1602,7 @@
>   ##
>   { 'command': 'query-xen-replication-status',
>     'returns': 'ReplicationStatus',
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @xen-colo-do-checkpoint:
> @@ -1619,7 +1619,7 @@
>   # Since: 2.9
>   ##
>   { 'command': 'xen-colo-do-checkpoint',
> -  'if': 'defined(CONFIG_REPLICATION)' }
> +  'if': 'CONFIG_REPLICATION' }
>   
>   ##
>   # @COLOStatus:
> diff --git a/qapi/misc-target.json b/qapi/misc-target.json
> index 2891df6890..5d3c816eb8 100644
> --- a/qapi/misc-target.json
> +++ b/qapi/misc-target.json
> @@ -23,18 +23,18 @@
>   ##
>   { 'event': 'RTC_CHANGE',
>     'data': { 'offset': 'int' },
> -  'if': { 'any': [ 'defined(TARGET_ALPHA)',
> -                   'defined(TARGET_ARM)',
> -                   'defined(TARGET_HPPA)',
> -                   'defined(TARGET_I386)',
> -                   'defined(TARGET_MIPS)',
> -                   'defined(TARGET_MIPS64)',
> -                   'defined(TARGET_MOXIE)',
> -                   'defined(TARGET_PPC)',
> -                   'defined(TARGET_PPC64)',
> -                   'defined(TARGET_S390X)',
> -                   'defined(TARGET_SH4)',
> -                   'defined(TARGET_SPARC)' ] } }
> +  'if': { 'any': [ 'TARGET_ALPHA',
> +                   'TARGET_ARM',
> +                   'TARGET_HPPA',
> +                   'TARGET_I386',
> +                   'TARGET_MIPS',
> +                   'TARGET_MIPS64',
> +                   'TARGET_MOXIE',
> +                   'TARGET_PPC',
> +                   'TARGET_PPC64',
> +                   'TARGET_S390X',
> +                   'TARGET_SH4',
> +                   'TARGET_SPARC' ] } }
>   
>   ##
>   # @rtc-reset-reinjection:
> @@ -53,7 +53,7 @@
>   #
>   ##
>   { 'command': 'rtc-reset-reinjection',
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   
>   ##
> @@ -80,7 +80,7 @@
>   { 'enum': 'SevState',
>     'data': ['uninit', 'launch-update', 'launch-secret', 'running',
>              'send-update', 'receive-update' ],
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   ##
>   # @SevInfo:
> @@ -112,7 +112,7 @@
>                 'state' : 'SevState',
>                 'handle' : 'uint32'
>               },
> -  'if': 'defined(TARGET_I386)'
> +  'if': 'TARGET_I386'
>   }
>   
>   ##
> @@ -133,7 +133,7 @@
>   #
>   ##
>   { 'command': 'query-sev', 'returns': 'SevInfo',
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   
>   ##
> @@ -147,7 +147,7 @@
>   #
>   ##
>   { 'struct': 'SevLaunchMeasureInfo', 'data': {'data': 'str'},
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   ##
>   # @query-sev-launch-measure:
> @@ -165,7 +165,7 @@
>   #
>   ##
>   { 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo',
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   
>   ##
> @@ -190,7 +190,7 @@
>               'cert-chain': 'str',
>               'cbitpos': 'int',
>               'reduced-phys-bits': 'int'},
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   ##
>   # @query-sev-capabilities:
> @@ -210,7 +210,7 @@
>   #
>   ##
>   { 'command': 'query-sev-capabilities', 'returns': 'SevCapability',
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   ##
>   # @sev-inject-launch-secret:
> @@ -228,7 +228,7 @@
>   ##
>   { 'command': 'sev-inject-launch-secret',
>     'data': { 'packet-header': 'str', 'secret': 'str', '*gpa': 'uint64' },
> -  'if': 'defined(TARGET_I386)' }
> +  'if': 'TARGET_I386' }
>   
>   ##
>   # @dump-skeys:
> @@ -250,7 +250,7 @@
>   ##
>   { 'command': 'dump-skeys',
>     'data': { 'filename': 'str' },
> -  'if': 'defined(TARGET_S390X)' }
> +  'if': 'TARGET_S390X' }
>   
>   ##
>   # @GICCapability:
> @@ -275,7 +275,7 @@
>     'data': { 'version': 'int',
>               'emulated': 'bool',
>               'kernel': 'bool' },
> -  'if': 'defined(TARGET_ARM)' }
> +  'if': 'TARGET_ARM' }
>   
>   ##
>   # @query-gic-capabilities:
> @@ -295,4 +295,4 @@
>   #
>   ##
>   { 'command': 'query-gic-capabilities', 'returns': ['GICCapability'],
> -  'if': 'defined(TARGET_ARM)' }
> +  'if': 'TARGET_ARM' }
> diff --git a/qapi/qom.json b/qapi/qom.json
> index cd0e76d564..6c41ec61b0 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -603,7 +603,7 @@
>     'data': { '*align': 'size',
>               '*discard-data': 'bool',
>               'mem-path': 'str',
> -            '*pmem': { 'type': 'bool', 'if': 'defined(CONFIG_LIBPMEM)' },
> +            '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
>               '*readonly': 'bool' } }
>   
>   ##
> @@ -752,7 +752,7 @@
>       'cryptodev-backend',
>       'cryptodev-backend-builtin',
>       { 'name': 'cryptodev-vhost-user',
> -      'if': 'defined(CONFIG_VHOST_CRYPTO)' },
> +      'if': 'CONFIG_VHOST_CRYPTO' },
>       'dbus-vmstate',
>       'filter-buffer',
>       'filter-dump',
> @@ -765,7 +765,7 @@
>       'iothread',
>       'memory-backend-file',
>       { 'name': 'memory-backend-memfd',
> -      'if': 'defined(CONFIG_LINUX)' },
> +      'if': 'CONFIG_LINUX' },
>       'memory-backend-ram',
>       'pef-guest',
>       'pr-manager-helper',
> @@ -809,7 +809,7 @@
>         'cryptodev-backend':          'CryptodevBackendProperties',
>         'cryptodev-backend-builtin':  'CryptodevBackendProperties',
>         'cryptodev-vhost-user':       { 'type': 'CryptodevVhostUserProperties',
> -                                      'if': 'defined(CONFIG_VHOST_CRYPTO)' },
> +                                      'if': 'CONFIG_VHOST_CRYPTO' },
>         'dbus-vmstate':               'DBusVMStateProperties',
>         'filter-buffer':              'FilterBufferProperties',
>         'filter-dump':                'FilterDumpProperties',
> @@ -822,7 +822,7 @@
>         'iothread':                   'IothreadProperties',
>         'memory-backend-file':        'MemoryBackendFileProperties',
>         'memory-backend-memfd':       { 'type': 'MemoryBackendMemfdProperties',
> -                                      'if': 'defined(CONFIG_LINUX)' },
> +                                      'if': 'CONFIG_LINUX' },
>         'memory-backend-ram':         'MemoryBackendProperties',
>         'pr-manager-helper':          'PrManagerHelperProperties',
>         'rng-builtin':                'RngProperties',
> diff --git a/qapi/sockets.json b/qapi/sockets.json
> index 2e83452797..a0c08aa4ba 100644
> --- a/qapi/sockets.json
> +++ b/qapi/sockets.json
> @@ -86,8 +86,8 @@
>   { 'struct': 'UnixSocketAddress',
>     'data': {
>       'path': 'str',
> -    '*abstract': { 'type': 'bool', 'if': 'defined(CONFIG_LINUX)' },
> -    '*tight': { 'type': 'bool', 'if': 'defined(CONFIG_LINUX)' } } }
> +    '*abstract': { 'type': 'bool', 'if': 'CONFIG_LINUX' },
> +    '*tight': { 'type': 'bool', 'if': 'CONFIG_LINUX' } } }
>   
>   ##
>   # @VsockSocketAddress:
> diff --git a/qapi/ui.json b/qapi/ui.json
> index 1052ca9c38..ec29a66c9f 100644
> --- a/qapi/ui.json
> +++ b/qapi/ui.json
> @@ -123,7 +123,7 @@
>     'data': { 'host': 'str',
>               'port': 'str',
>               'family': 'NetworkAddressFamily' },
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SpiceServerInfo:
> @@ -137,7 +137,7 @@
>   { 'struct': 'SpiceServerInfo',
>     'base': 'SpiceBasicInfo',
>     'data': { '*auth': 'str' },
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SpiceChannel:
> @@ -163,7 +163,7 @@
>     'base': 'SpiceBasicInfo',
>     'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
>              'tls': 'bool'},
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SpiceQueryMouseMode:
> @@ -183,7 +183,7 @@
>   ##
>   { 'enum': 'SpiceQueryMouseMode',
>     'data': [ 'client', 'server', 'unknown' ],
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SpiceInfo:
> @@ -222,7 +222,7 @@
>     'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
>              '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
>              'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']},
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @query-spice:
> @@ -268,7 +268,7 @@
>   #
>   ##
>   { 'command': 'query-spice', 'returns': 'SpiceInfo',
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SPICE_CONNECTED:
> @@ -294,7 +294,7 @@
>   { 'event': 'SPICE_CONNECTED',
>     'data': { 'server': 'SpiceBasicInfo',
>               'client': 'SpiceBasicInfo' },
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SPICE_INITIALIZED:
> @@ -323,7 +323,7 @@
>   { 'event': 'SPICE_INITIALIZED',
>     'data': { 'server': 'SpiceServerInfo',
>               'client': 'SpiceChannel' },
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SPICE_DISCONNECTED:
> @@ -349,7 +349,7 @@
>   { 'event': 'SPICE_DISCONNECTED',
>     'data': { 'server': 'SpiceBasicInfo',
>               'client': 'SpiceBasicInfo' },
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # @SPICE_MIGRATE_COMPLETED:
> @@ -365,7 +365,7 @@
>   #
>   ##
>   { 'event': 'SPICE_MIGRATE_COMPLETED',
> -  'if': 'defined(CONFIG_SPICE)' }
> +  'if': 'CONFIG_SPICE' }
>   
>   ##
>   # == VNC
> @@ -393,7 +393,7 @@
>               'service': 'str',
>               'family': 'NetworkAddressFamily',
>               'websocket': 'bool' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncServerInfo:
> @@ -408,7 +408,7 @@
>   { 'struct': 'VncServerInfo',
>     'base': 'VncBasicInfo',
>     'data': { '*auth': 'str' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncClientInfo:
> @@ -426,7 +426,7 @@
>   { 'struct': 'VncClientInfo',
>     'base': 'VncBasicInfo',
>     'data': { '*x509_dname': 'str', '*sasl_username': 'str' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncInfo:
> @@ -469,7 +469,7 @@
>     'data': {'enabled': 'bool', '*host': 'str',
>              '*family': 'NetworkAddressFamily',
>              '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']},
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncPrimaryAuth:
> @@ -481,7 +481,7 @@
>   { 'enum': 'VncPrimaryAuth',
>     'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
>               'tls', 'vencrypt', 'sasl' ],
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncVencryptSubAuth:
> @@ -496,7 +496,7 @@
>               'tls-vnc',   'x509-vnc',
>               'tls-plain', 'x509-plain',
>               'tls-sasl',  'x509-sasl' ],
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncServerInfo2:
> @@ -514,7 +514,7 @@
>     'base': 'VncBasicInfo',
>     'data': { 'auth'      : 'VncPrimaryAuth',
>               '*vencrypt' : 'VncVencryptSubAuth' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VncInfo2:
> @@ -547,7 +547,7 @@
>               'auth'      : 'VncPrimaryAuth',
>               '*vencrypt' : 'VncVencryptSubAuth',
>               '*display'  : 'str' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @query-vnc:
> @@ -579,7 +579,7 @@
>   #
>   ##
>   { 'command': 'query-vnc', 'returns': 'VncInfo',
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   ##
>   # @query-vnc-servers:
>   #
> @@ -590,7 +590,7 @@
>   # Since: 2.3
>   ##
>   { 'command': 'query-vnc-servers', 'returns': ['VncInfo2'],
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @change-vnc-password:
> @@ -606,7 +606,7 @@
>   ##
>   { 'command': 'change-vnc-password',
>     'data': { 'password': 'str' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VNC_CONNECTED:
> @@ -636,7 +636,7 @@
>   { 'event': 'VNC_CONNECTED',
>     'data': { 'server': 'VncServerInfo',
>               'client': 'VncBasicInfo' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VNC_INITIALIZED:
> @@ -664,7 +664,7 @@
>   { 'event': 'VNC_INITIALIZED',
>     'data': { 'server': 'VncServerInfo',
>               'client': 'VncClientInfo' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # @VNC_DISCONNECTED:
> @@ -691,7 +691,7 @@
>   { 'event': 'VNC_DISCONNECTED',
>     'data': { 'server': 'VncServerInfo',
>               'client': 'VncClientInfo' },
> -  'if': 'defined(CONFIG_VNC)' }
> +  'if': 'CONFIG_VNC' }
>   
>   ##
>   # = Input
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index fb17eebde3..c60f5e669d 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1380,7 +1380,7 @@
>     'data': {
>         'keys': ['str']
>     },
> -  'if': 'defined(CONFIG_POSIX)' }
> +  'if': 'CONFIG_POSIX' }
>   
>   
>   ##
> @@ -1398,7 +1398,7 @@
>   { 'command': 'guest-ssh-get-authorized-keys',
>     'data': { 'username': 'str' },
>     'returns': 'GuestAuthorizedKeys',
> -  'if': 'defined(CONFIG_POSIX)' }
> +  'if': 'CONFIG_POSIX' }
>   
>   ##
>   # @guest-ssh-add-authorized-keys:
> @@ -1416,7 +1416,7 @@
>   ##
>   { 'command': 'guest-ssh-add-authorized-keys',
>     'data': { 'username': 'str', 'keys': ['str'], '*reset': 'bool' },
> -  'if': 'defined(CONFIG_POSIX)' }
> +  'if': 'CONFIG_POSIX' }
>   
>   ##
>   # @guest-ssh-remove-authorized-keys:
> @@ -1434,4 +1434,4 @@
>   ##
>   { 'command': 'guest-ssh-remove-authorized-keys',
>     'data': { 'username': 'str', 'keys': ['str'] },
> -  'if': 'defined(CONFIG_POSIX)' }
> +  'if': 'CONFIG_POSIX' }
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 6236bfc457..2a36e0366e 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -210,7 +210,7 @@ def __init__(self, option: str):
>           self.option = option
>   
>       def cgen(self) -> str:
> -        return self.option
> +        return f"defined({self.option})"
>   
>       def docgen(self) -> str:
>           return self.option
> diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
> index 0a97a6f020..a605a796db 100644
> --- a/scripts/qapi/expr.py
> +++ b/scripts/qapi/expr.py
> @@ -294,10 +294,10 @@ def check_if(expr: _JSONObject, info: QAPISourceInfo, source: str) -> None:
>   
>       def normalize(cond: Union[str, List[str], object]) -> IfPredicate:
>           if isinstance(cond, str):
> -            if not cond.strip():
> +            if not cond.isidentifier():
>                   raise QAPISemError(
>                       info,
> -                    "'if' condition '%s' of %s makes no sense"
> +                    "'if' condition '%s' of %s is not a valid identifier"
>                       % (cond, source))
>               return IfOption(cond)
>           if isinstance(cond, list):
> diff --git a/tests/qapi-schema/alternate-branch-if-invalid.err b/tests/qapi-schema/alternate-branch-if-invalid.err
> index d384929c51..03bad877a3 100644
> --- a/tests/qapi-schema/alternate-branch-if-invalid.err
> +++ b/tests/qapi-schema/alternate-branch-if-invalid.err
> @@ -1,2 +1,2 @@
>   alternate-branch-if-invalid.json: In alternate 'Alt':
> -alternate-branch-if-invalid.json:2: 'if' condition ' ' of 'data' member 'branch' makes no sense
> +alternate-branch-if-invalid.json:2: 'if' condition ' ' of 'data' member 'branch' is not a valid identifier
> diff --git a/tests/qapi-schema/bad-if-empty.err b/tests/qapi-schema/bad-if-empty.err
> index a0f3effefb..5208f543ce 100644
> --- a/tests/qapi-schema/bad-if-empty.err
> +++ b/tests/qapi-schema/bad-if-empty.err
> @@ -1,2 +1,2 @@
>   bad-if-empty.json: In struct 'TestIfStruct':
> -bad-if-empty.json:2: 'if' condition '' of struct makes no sense
> +bad-if-empty.json:2: 'if' condition '' of struct is not a valid identifier
> diff --git a/tests/qapi-schema/bad-if-list.err b/tests/qapi-schema/bad-if-list.err
> index c462f11b90..fa01894d03 100644
> --- a/tests/qapi-schema/bad-if-list.err
> +++ b/tests/qapi-schema/bad-if-list.err
> @@ -1,2 +1,2 @@
>   bad-if-list.json: In struct 'TestIfStruct':
> -bad-if-list.json:2: 'if' condition ' ' of struct makes no sense
> +bad-if-list.json:2: 'if' condition ' ' of struct is not a valid identifier
> diff --git a/tests/qapi-schema/bad-if.json b/tests/qapi-schema/bad-if.json
> index 3edd1a0bf2..67818888de 100644
> --- a/tests/qapi-schema/bad-if.json
> +++ b/tests/qapi-schema/bad-if.json
> @@ -1,3 +1,3 @@
>   # check invalid 'if' type
>   { 'struct': 'TestIfStruct', 'data': { 'foo': 'int' },
> -  'if': { 'value': 'defined(TEST_IF_STRUCT)' } }
> +  'if': { 'value': 'TEST_IF_STRUCT' } }
> diff --git a/tests/qapi-schema/doc-good.json b/tests/qapi-schema/doc-good.json
> index 423ea23e07..ae531e89b5 100644
> --- a/tests/qapi-schema/doc-good.json
> +++ b/tests/qapi-schema/doc-good.json
> @@ -61,9 +61,9 @@
>   # @two is undocumented
>   ##
>   { 'enum': 'Enum', 'data':
> -  [ { 'name': 'one', 'if': 'defined(IFONE)' }, 'two' ],
> +  [ { 'name': 'one', 'if': 'IFONE' }, 'two' ],
>     'features': [ 'enum-feat' ],
> -  'if': 'defined(IFCOND)' }
> +  'if': 'IFCOND' }
>   
>   ##
>   # @Base:
> @@ -86,7 +86,7 @@
>     'features': [ 'variant1-feat' ],
>     'data': { 'var1': { 'type': 'str',
>                         'features': [ 'member-feat' ],
> -                      'if': 'defined(IFSTR)' } } }
> +                      'if': 'IFSTR' } } }
>   
>   ##
>   # @Variant2:
> diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
> index ca7e53f3b5..869d0b8636 100644
> --- a/tests/qapi-schema/doc-good.out
> +++ b/tests/qapi-schema/doc-good.out
> @@ -12,15 +12,15 @@ enum QType
>   module doc-good.json
>   enum Enum
>       member one
> -        if 'defined(IFONE)'
> +        if 'IFONE'
>       member two
> -    if 'defined(IFCOND)'
> +    if 'IFCOND'
>       feature enum-feat
>   object Base
>       member base1: Enum optional=False
>   object Variant1
>       member var1: str optional=False
> -        if 'defined(IFSTR)'
> +        if 'IFSTR'
>           feature member-feat
>       feature variant1-feat
>   object Variant2
> diff --git a/tests/qapi-schema/doc-good.txt b/tests/qapi-schema/doc-good.txt
> index 726727af74..27b7ce8799 100644
> --- a/tests/qapi-schema/doc-good.txt
> +++ b/tests/qapi-schema/doc-good.txt
> @@ -43,7 +43,7 @@ Example:
>   Values
>   ~~~~~~
>   
> -"one" (**If: **"defined(IFONE)")
> +"one" (**If: **"IFONE")
>      The _one_ {and only}
>   
>   "two"
> @@ -62,7 +62,7 @@ Features
>   If
>   ~~
>   
> -"defined(IFCOND)"
> +"IFCOND"
>   
>   
>   "Base" (Object)
> @@ -87,7 +87,7 @@ Another paragraph (but no "var": line)
>   Members
>   ~~~~~~~
>   
> -"var1": "string" (**If: **"defined(IFSTR)")
> +"var1": "string" (**If: **"IFSTR")
>      Not documented
>   
>   
> diff --git a/tests/qapi-schema/features-missing-name.json b/tests/qapi-schema/features-missing-name.json
> index 2314f97c00..8772c8f7b3 100644
> --- a/tests/qapi-schema/features-missing-name.json
> +++ b/tests/qapi-schema/features-missing-name.json
> @@ -1,3 +1,3 @@
>   { 'struct': 'FeatureStruct0',
>     'data': { 'foo': 'int' },
> -  'features': [ { 'if': 'defined(NAMELESS_FEATURES)' } ] }
> +  'features': [ { 'if': 'NAMELESS_FEATURES' } ] }
> diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json
> index 2d5e480b44..fad64d879f 100644
> --- a/tests/qapi-schema/qapi-schema-test.json
> +++ b/tests/qapi-schema/qapi-schema-test.json
> @@ -222,43 +222,43 @@
>   
>   { 'struct': 'TestIfStruct', 'data':
>     { 'foo': 'int',
> -    'bar': { 'type': 'int', 'if': 'defined(TEST_IF_STRUCT_BAR)'} },
> -  'if': 'defined(TEST_IF_STRUCT)' }
> +    'bar': { 'type': 'int', 'if': 'TEST_IF_STRUCT_BAR'} },
> +  'if': 'TEST_IF_STRUCT' }
>   
>   { 'enum': 'TestIfEnum', 'data':
> -  [ 'foo', { 'name' : 'bar', 'if': 'defined(TEST_IF_ENUM_BAR)' } ],
> -  'if': 'defined(TEST_IF_ENUM)' }
> +  [ 'foo', { 'name' : 'bar', 'if': 'TEST_IF_ENUM_BAR' } ],
> +  'if': 'TEST_IF_ENUM' }
>   
>   { 'union': 'TestIfUnion', 'data':
>     { 'foo': 'TestStruct',
> -    'union-bar': { 'type': 'str', 'if': 'defined(TEST_IF_UNION_BAR)'} },
> -  'if': ['defined(TEST_IF_UNION)', 'defined(TEST_IF_STRUCT)'] }
> +    'union-bar': { 'type': 'str', 'if': 'TEST_IF_UNION_BAR'} },
> +  'if': ['TEST_IF_UNION', 'TEST_IF_STRUCT'] }
>   
>   { 'command': 'test-if-union-cmd',
>     'data': { 'union-cmd-arg': 'TestIfUnion' },
> -  'if': 'defined(TEST_IF_UNION)' }
> +  'if': 'TEST_IF_UNION' }
>   
>   { 'alternate': 'TestIfAlternate', 'data':
>     { 'foo': 'int',
> -    'bar': { 'type': 'TestStruct', 'if': 'defined(TEST_IF_ALT_BAR)'} },
> -  'if': {'all': ['defined(TEST_IF_ALT)', 'defined(TEST_IF_STRUCT)'] } }
> +    'bar': { 'type': 'TestStruct', 'if': 'TEST_IF_ALT_BAR'} },
> +  'if': {'all': ['TEST_IF_ALT', 'TEST_IF_STRUCT'] } }
>   
>   { 'command': 'test-if-alternate-cmd', 'data': { 'alt-cmd-arg': 'TestIfAlternate' },
> -  'if': {'all': ['defined(TEST_IF_ALT)', {'not': 'defined(TEST_IF_NOT_ALT)'}] } }
> +  'if': {'all': ['TEST_IF_ALT', {'not': 'TEST_IF_NOT_ALT'}] } }
>   
>   { 'command': 'test-if-cmd',
>     'data': {
>       'foo': 'TestIfStruct',
> -    'bar': { 'type': 'TestIfEnum', 'if': 'defined(TEST_IF_CMD_BAR)' } },
> +    'bar': { 'type': 'TestIfEnum', 'if': 'TEST_IF_CMD_BAR' } },
>     'returns': 'UserDefThree',
> -  'if': ['defined(TEST_IF_CMD)', 'defined(TEST_IF_STRUCT)'] }
> +  'if': ['TEST_IF_CMD', 'TEST_IF_STRUCT'] }
>   
>   { 'command': 'test-cmd-return-def-three', 'returns': 'UserDefThree' }
>   
>   { 'event': 'TEST_IF_EVENT', 'data':
>     { 'foo': 'TestIfStruct',
> -    'bar': { 'type': ['TestIfEnum'], 'if': 'defined(TEST_IF_EVT_BAR)' } },
> -  'if': ['defined(TEST_IF_EVT)', 'defined(TEST_IF_STRUCT)'] }
> +    'bar': { 'type': ['TestIfEnum'], 'if': 'TEST_IF_EVT_BAR' } },
> +  'if': ['TEST_IF_EVT', 'TEST_IF_STRUCT'] }
>   
>   # test 'features'
>   
> @@ -280,19 +280,19 @@
>   
>   { 'struct': 'CondFeatureStruct1',
>     'data': { 'foo': 'int' },
> -  'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'} ] }
> +  'features': [ { 'name': 'feature1', 'if': 'TEST_IF_FEATURE_1'} ] }
>   { 'struct': 'CondFeatureStruct2',
>     'data': { 'foo': 'int' },
> -  'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'},
> -                { 'name': 'feature2', 'if': 'defined(TEST_IF_FEATURE_2)'} ] }
> +  'features': [ { 'name': 'feature1', 'if': 'TEST_IF_FEATURE_1'},
> +                { 'name': 'feature2', 'if': 'TEST_IF_FEATURE_2'} ] }
>   { 'struct': 'CondFeatureStruct3',
>     'data': { 'foo': 'int' },
> -  'features': [ { 'name': 'feature1', 'if': [ 'defined(TEST_IF_COND_1)',
> -                                              'defined(TEST_IF_COND_2)'] } ] }
> +  'features': [ { 'name': 'feature1', 'if': [ 'TEST_IF_COND_1',
> +                                              'TEST_IF_COND_2'] } ] }
>   { 'struct': 'CondFeatureStruct4',
>     'data': { 'foo': 'int' },
> -  'features': [ { 'name': 'feature1', 'if': {'any': ['defined(TEST_IF_COND_1)',
> -                                                     'defined(TEST_IF_COND_2)'] } } ] }
> +  'features': [ { 'name': 'feature1', 'if': {'any': ['TEST_IF_COND_1',
> +                                                     'TEST_IF_COND_2'] } } ] }
>   
>   { 'enum': 'FeatureEnum1',
>     'data': [ 'eins', 'zwei', 'drei' ],
> @@ -327,13 +327,13 @@
>     'features': [ 'feature1', 'feature2' ] }
>   
>   { 'command': 'test-command-cond-features1',
> -  'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'} ] }
> +  'features': [ { 'name': 'feature1', 'if': 'TEST_IF_FEATURE_1'} ] }
>   { 'command': 'test-command-cond-features2',
> -  'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'},
> -                { 'name': 'feature2', 'if': 'defined(TEST_IF_FEATURE_2)'} ] }
> +  'features': [ { 'name': 'feature1', 'if': 'TEST_IF_FEATURE_1'},
> +                { 'name': 'feature2', 'if': 'TEST_IF_FEATURE_2'} ] }
>   { 'command': 'test-command-cond-features3',
> -  'features': [ { 'name': 'feature1', 'if': [ 'defined(TEST_IF_COND_1)',
> -                                              'defined(TEST_IF_COND_2)'] } ] }
> +  'features': [ { 'name': 'feature1', 'if': [ 'TEST_IF_COND_1',
> +                                              'TEST_IF_COND_2' ] } ] }
>   
>   { 'event': 'TEST_EVENT_FEATURES0',
>     'data': 'FeatureStruct1' }
> diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
> index f859bf648d..95006e60c4 100644
> --- a/tests/qapi-schema/qapi-schema-test.out
> +++ b/tests/qapi-schema/qapi-schema-test.out
> @@ -298,65 +298,65 @@ command __org.qemu_x-command q_obj___org.qemu_x-command-arg -> __org.qemu_x-Unio
>   object TestIfStruct
>       member foo: int optional=False
>       member bar: int optional=False
> -        if 'defined(TEST_IF_STRUCT_BAR)'
> -    if 'defined(TEST_IF_STRUCT)'
> +        if 'TEST_IF_STRUCT_BAR'
> +    if 'TEST_IF_STRUCT'
>   enum TestIfEnum
>       member foo
>       member bar
> -        if 'defined(TEST_IF_ENUM_BAR)'
> -    if 'defined(TEST_IF_ENUM)'
> +        if 'TEST_IF_ENUM_BAR'
> +    if 'TEST_IF_ENUM'
>   object q_obj_TestStruct-wrapper
>       member data: TestStruct optional=False
>   enum TestIfUnionKind
>       member foo
>       member union-bar
> -        if 'defined(TEST_IF_UNION_BAR)'
> -    if IfAll(['defined(TEST_IF_UNION)', 'defined(TEST_IF_STRUCT)'])
> +        if 'TEST_IF_UNION_BAR'
> +    if IfAll(['TEST_IF_UNION', 'TEST_IF_STRUCT'])
>   object TestIfUnion
>       member type: TestIfUnionKind optional=False
>       tag type
>       case foo: q_obj_TestStruct-wrapper
>       case union-bar: q_obj_str-wrapper
> -        if 'defined(TEST_IF_UNION_BAR)'
> -    if IfAll(['defined(TEST_IF_UNION)', 'defined(TEST_IF_STRUCT)'])
> +        if 'TEST_IF_UNION_BAR'
> +    if IfAll(['TEST_IF_UNION', 'TEST_IF_STRUCT'])
>   object q_obj_test-if-union-cmd-arg
>       member union-cmd-arg: TestIfUnion optional=False
> -    if 'defined(TEST_IF_UNION)'
> +    if 'TEST_IF_UNION'
>   command test-if-union-cmd q_obj_test-if-union-cmd-arg -> None
>       gen=True success_response=True boxed=False oob=False preconfig=False
> -    if 'defined(TEST_IF_UNION)'
> +    if 'TEST_IF_UNION'
>   alternate TestIfAlternate
>       tag type
>       case foo: int
>       case bar: TestStruct
> -        if 'defined(TEST_IF_ALT_BAR)'
> -    if IfAll(['defined(TEST_IF_ALT)', 'defined(TEST_IF_STRUCT)'])
> +        if 'TEST_IF_ALT_BAR'
> +    if IfAll(['TEST_IF_ALT', 'TEST_IF_STRUCT'])
>   object q_obj_test-if-alternate-cmd-arg
>       member alt-cmd-arg: TestIfAlternate optional=False
> -    if IfAll(['defined(TEST_IF_ALT)', IfNot('defined(TEST_IF_NOT_ALT)')])
> +    if IfAll(['TEST_IF_ALT', IfNot('TEST_IF_NOT_ALT')])
>   command test-if-alternate-cmd q_obj_test-if-alternate-cmd-arg -> None
>       gen=True success_response=True boxed=False oob=False preconfig=False
> -    if IfAll(['defined(TEST_IF_ALT)', IfNot('defined(TEST_IF_NOT_ALT)')])
> +    if IfAll(['TEST_IF_ALT', IfNot('TEST_IF_NOT_ALT')])
>   object q_obj_test-if-cmd-arg
>       member foo: TestIfStruct optional=False
>       member bar: TestIfEnum optional=False
> -        if 'defined(TEST_IF_CMD_BAR)'
> -    if IfAll(['defined(TEST_IF_CMD)', 'defined(TEST_IF_STRUCT)'])
> +        if 'TEST_IF_CMD_BAR'
> +    if IfAll(['TEST_IF_CMD', 'TEST_IF_STRUCT'])
>   command test-if-cmd q_obj_test-if-cmd-arg -> UserDefThree
>       gen=True success_response=True boxed=False oob=False preconfig=False
> -    if IfAll(['defined(TEST_IF_CMD)', 'defined(TEST_IF_STRUCT)'])
> +    if IfAll(['TEST_IF_CMD', 'TEST_IF_STRUCT'])
>   command test-cmd-return-def-three None -> UserDefThree
>       gen=True success_response=True boxed=False oob=False preconfig=False
>   array TestIfEnumList TestIfEnum
> -    if 'defined(TEST_IF_ENUM)'
> +    if 'TEST_IF_ENUM'
>   object q_obj_TEST_IF_EVENT-arg
>       member foo: TestIfStruct optional=False
>       member bar: TestIfEnumList optional=False
> -        if 'defined(TEST_IF_EVT_BAR)'
> -    if IfAll(['defined(TEST_IF_EVT)', 'defined(TEST_IF_STRUCT)'])
> +        if 'TEST_IF_EVT_BAR'
> +    if IfAll(['TEST_IF_EVT', 'TEST_IF_STRUCT'])
>   event TEST_IF_EVENT q_obj_TEST_IF_EVENT-arg
>       boxed=False
> -    if IfAll(['defined(TEST_IF_EVT)', 'defined(TEST_IF_STRUCT)'])
> +    if IfAll(['TEST_IF_EVT', 'TEST_IF_STRUCT'])
>   object FeatureStruct0
>       member foo: int optional=False
>   object FeatureStruct1
> @@ -379,21 +379,21 @@ object FeatureStruct4
>   object CondFeatureStruct1
>       member foo: int optional=False
>       feature feature1
> -        if 'defined(TEST_IF_FEATURE_1)'
> +        if 'TEST_IF_FEATURE_1'
>   object CondFeatureStruct2
>       member foo: int optional=False
>       feature feature1
> -        if 'defined(TEST_IF_FEATURE_1)'
> +        if 'TEST_IF_FEATURE_1'
>       feature feature2
> -        if 'defined(TEST_IF_FEATURE_2)'
> +        if 'TEST_IF_FEATURE_2'
>   object CondFeatureStruct3
>       member foo: int optional=False
>       feature feature1
> -        if IfAll(['defined(TEST_IF_COND_1)', 'defined(TEST_IF_COND_2)'])
> +        if IfAll(['TEST_IF_COND_1', 'TEST_IF_COND_2'])
>   object CondFeatureStruct4
>       member foo: int optional=False
>       feature feature1
> -        if IfAny(['defined(TEST_IF_COND_1)', 'defined(TEST_IF_COND_2)'])
> +        if IfAny(['TEST_IF_COND_1', 'TEST_IF_COND_2'])
>   enum FeatureEnum1
>       member eins
>       member zwei
> @@ -434,17 +434,17 @@ command test-command-features3 None -> None
>   command test-command-cond-features1 None -> None
>       gen=True success_response=True boxed=False oob=False preconfig=False
>       feature feature1
> -        if 'defined(TEST_IF_FEATURE_1)'
> +        if 'TEST_IF_FEATURE_1'
>   command test-command-cond-features2 None -> None
>       gen=True success_response=True boxed=False oob=False preconfig=False
>       feature feature1
> -        if 'defined(TEST_IF_FEATURE_1)'
> +        if 'TEST_IF_FEATURE_1'
>       feature feature2
> -        if 'defined(TEST_IF_FEATURE_2)'
> +        if 'TEST_IF_FEATURE_2'
>   command test-command-cond-features3 None -> None
>       gen=True success_response=True boxed=False oob=False preconfig=False
>       feature feature1
> -        if IfAll(['defined(TEST_IF_COND_1)', 'defined(TEST_IF_COND_2)'])
> +        if IfAll(['TEST_IF_COND_1', 'TEST_IF_COND_2'])
>   event TEST_EVENT_FEATURES0 FeatureStruct1
>       boxed=False
>   event TEST_EVENT_FEATURES1 None
> diff --git a/tests/qapi-schema/union-branch-if-invalid.err b/tests/qapi-schema/union-branch-if-invalid.err
> index dd4518233e..046187a5b9 100644
> --- a/tests/qapi-schema/union-branch-if-invalid.err
> +++ b/tests/qapi-schema/union-branch-if-invalid.err
> @@ -1,2 +1,2 @@
>   union-branch-if-invalid.json: In union 'Uni':
> -union-branch-if-invalid.json:4: 'if' condition '' of 'data' member 'branch1' makes no sense
> +union-branch-if-invalid.json:4: 'if' condition '' of 'data' member 'branch1' is not a valid identifier
> 



  reply	other threads:[~2021-05-12 23:57 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-29 13:40 [PATCH v3 0/9] qapi: untie 'if' conditions from C preprocessor marcandre.lureau
2021-04-29 13:40 ` [PATCH v3 1/9] qapi: replace List[str] by QAPISchemaIfCond marcandre.lureau
2021-05-12 20:53   ` John Snow
2021-05-17 11:17     ` Marc-André Lureau
2021-05-17 16:30       ` John Snow
2021-04-29 13:40 ` [PATCH v3 2/9] qapi: move gen_if/gen_endif to QAPISchemaIfCond marcandre.lureau
2021-05-11 16:39   ` Stefan Hajnoczi
2021-05-12 12:36     ` Marc-André Lureau
2021-05-12 18:53     ` John Snow
2021-05-17 11:18       ` Marc-André Lureau
2021-05-12 21:01   ` John Snow
2021-05-21 14:35     ` Markus Armbruster
2021-04-29 13:40 ` [PATCH v3 3/9] qapi: start building an 'if' predicate tree marcandre.lureau
2021-05-12 21:39   ` John Snow
2021-05-17 11:18     ` Marc-André Lureau
2021-05-17 16:34       ` John Snow
2021-05-21 14:48     ` Markus Armbruster
2021-05-21 16:18       ` John Snow
2021-06-08 13:57         ` Markus Armbruster
2021-04-29 13:40 ` [PATCH v3 4/9] qapi: introduce IfPredicateList and IfAny marcandre.lureau
2021-05-12 23:26   ` John Snow
2021-05-17 11:18     ` Marc-André Lureau
2021-05-17 16:35       ` John Snow
2021-04-29 13:40 ` [PATCH v3 5/9] qapi: add IfNot marcandre.lureau
2021-05-12 23:32   ` John Snow
2021-04-29 13:40 ` [PATCH v3 6/9] qapi: normalize 'if' condition to IfPredicate tree marcandre.lureau
2021-05-12 23:47   ` John Snow
2021-05-17 11:18     ` Marc-André Lureau
2021-05-17 16:41       ` John Snow
2021-04-29 13:40 ` [PATCH v3 7/9] qapi: convert 'if' C-expressions to the new syntax tree marcandre.lureau
2021-05-12 23:51   ` John Snow
2021-05-17 11:20     ` Marc-André Lureau
2021-04-29 13:40 ` [PATCH v3 8/9] qapi: make 'if' condition strings simple identifiers marcandre.lureau
2021-05-12 23:56   ` John Snow [this message]
2021-04-29 13:40 ` [PATCH v3 9/9] docs: update the documentation about schema configuration marcandre.lureau
2021-05-13  0:01   ` John Snow
2021-05-11 16:52 ` [PATCH v3 0/9] qapi: untie 'if' conditions from C preprocessor Stefan Hajnoczi
2021-05-12 12:39   ` Marc-André Lureau
2021-05-12 17:43     ` Markus Armbruster
2021-05-12 18:58       ` John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6fcc67a8-cb4f-90f9-f34d-6f73628d449b@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).