All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.