From 4294815ee37fe334cec594f15e7eeb9e643471bc Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 18:10:23 -0500 Subject: [PATCH] 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). Backports commit 376863ef4895ae709aadb6f26365a5973310ef09 from qemu --- qemu/scripts/qapi.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/qemu/scripts/qapi.py b/qemu/scripts/qapi.py index d1b47037..a245d104 100644 --- a/qemu/scripts/qapi.py +++ b/qemu/scripts/qapi.py @@ -557,15 +557,15 @@ 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. check_name(expr_info, "Discriminator of flat union '%s'" % name,