[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v4 04/14] qapi: Allow optional discriminators
From: |
Max Reitz |
Subject: |
[Qemu-block] [PATCH v4 04/14] qapi: Allow optional discriminators |
Date: |
Mon, 24 Jun 2019 19:39:24 +0200 |
Optional discriminators are fine, as long as there is a default value.
Signed-off-by: Max Reitz <address@hidden>
---
scripts/qapi/common.py | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 8c57d0c67a..203623795b 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -1052,11 +1052,21 @@ def check_union(expr, info):
base_members = find_base_members(base)
assert base_members is not None
- # The value of member 'discriminator' must name a non-optional
- # member of the base struct.
+ # The value of member 'discriminator' must name a member of
+ # the base struct. (Optional members are allowed, but the
+ # discriminator name must not start with '*', so keep
+ # allow_optional=False.)
check_name(info, "Discriminator of flat union '%s'" % name,
discriminator)
+
discriminator_value = base_members.get(discriminator)
+ if not discriminator_value:
+ discriminator_value = base_members.get('*' + discriminator)
+ if discriminator_value and 'default' not in discriminator_value:
+ raise QAPISemError(info,
+ "Optional discriminator '%s' has no default value" %
+ discriminator)
+
if not discriminator_value:
raise QAPISemError(info,
"Discriminator '%s' is not a member of base "
--
2.21.0
- [Qemu-block] [PATCH v4 00/14] block: Try to create well-typed json:{} filenames, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 01/14] qapi: Parse numeric values, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 02/14] qapi: Move to_c_string() to common.py, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 04/14] qapi: Allow optional discriminators,
Max Reitz <=
- [Qemu-block] [PATCH v4 05/14] qapi: Document default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 03/14] qapi: Introduce default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 06/14] test-qapi: Print struct members' default values, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 10/14] qapi: Formalize qcow encryption probing, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 09/14] qapi: Formalize qcow2 encryption probing, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 08/14] tests: Add QAPI optional discriminator tests, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 13/14] iotests: qcow2's encrypt.format is now optional, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 07/14] tests: Test QAPI default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 11/14] block: Try to create well typed json:{} filenames, Max Reitz, 2019/06/24