Now that we have is_empty() and gen_visit_fields_call(), it's
fairly easy to skip the visit of a variant type that has no
members. Only one such instance exists at the moment
(CpuInfoOther), but the idea of a union where some branches
add no fields beyond the base type is common enough that we
may add syntax for other cases, as in
{ 'union':'U', 'base':'B', 'discriminator':'D',
'data': { 'default': {}, 'extra':'Type' } }
Note that the Abort type is another example of an empty type,
but it is only used by a simple union rather than a flat
union; and with simple unions, the wrapper type providing
the 'data' QMP key is not empty.
Signed-off-by: Eric Blake <ebl...@redhat.com>
---
v2: no change
---
scripts/qapi-visit.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index dbae00c..a9de393 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -37,7 +37,9 @@ void visit_type_%(c_name)s_members(Visitor *v, %(c_name)s
*obj, Error **errp);
def gen_visit_members_call(typ, c_name):
ret = ''
assert isinstance(typ, QAPISchemaObjectType)
- if typ.is_implicit():
+ if typ.is_empty():
+ pass
+ elif typ.is_implicit():
# TODO ugly special case for simple union
assert len(typ.members) == 1
assert not typ.variants
--
2.5.0