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
>
next prev parent 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).