summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2015-09-29 16:21:07 -0600
committerMarkus Armbruster <armbru@redhat.com>2015-10-12 18:46:49 +0200
commit376863ef4895ae709aadb6f26365a5973310ef09 (patch)
treec12bb1e568857c788a7dc6bfad1e3dc32c7c61e9 /scripts
parent9c51b4412959c5331a8a931d848c4b755b5bb36a (diff)
downloadqemu-376863ef4895ae709aadb6f26365a5973310ef09.tar.gz
qapi: Reuse code for flat union base validation
Rather than open-code the check for a valid base type, we should reuse the common functionality. This allows for consistent error messages, and also makes it easier for a later patch to turn on support for inline anonymous base structures. Test flat-union-inline is updated to test only one feature (anonymous branch dictionaries), which can be implemented independently (test flat-union-bad-base already covers the idea of an anonymous base dictionary). Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1443565276-4535-10-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi.py11
1 files changed, 5 insertions, 6 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 8d2681b24b..c0728d73e1 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -560,15 +560,14 @@ def check_union(expr, expr_info):
# Else, it's a flat union.
else:
# The object must have a string member 'base'.
- if not isinstance(base, str):
+ check_type(expr_info, "'base' for union '%s'" % name,
+ base, allow_metas=['struct'])
+ if not base:
raise QAPIExprError(expr_info,
- "Flat union '%s' must have a string base field"
+ "Flat union '%s' must have a base"
% name)
base_fields = find_base_fields(base)
- if not base_fields:
- raise QAPIExprError(expr_info,
- "Base '%s' is not a valid struct"
- % base)
+ assert base_fields
# The value of member 'discriminator' must name a non-optional
# member of the base struct.