Commit 376863ef authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

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: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1443565276-4535-10-git-send-email-eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 9c51b441
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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.
+1 −1
Original line number Diff line number Diff line
tests/qapi-schema/flat-union-bad-base.json:9: Flat union 'TestUnion' must have a string base field
tests/qapi-schema/flat-union-bad-base.json:9: 'base' for union 'TestUnion' should be a type name
+1 −1
Original line number Diff line number Diff line
tests/qapi-schema/flat-union-base-any.json:8: Base 'any' is not a valid struct
tests/qapi-schema/flat-union-base-any.json:8: 'base' for union 'TestUnion' cannot use built-in type 'any'
+1 −1
Original line number Diff line number Diff line
tests/qapi-schema/flat-union-base-union.json:14: Base 'UnionBase' is not a valid struct
tests/qapi-schema/flat-union-base-union.json:14: 'base' for union 'TestUnion' cannot use union type 'UnionBase'
+1 −1
Original line number Diff line number Diff line
tests/qapi-schema/flat-union-inline.json:7: Flat union 'TestUnion' must have a string base field
tests/qapi-schema/flat-union-inline.json:7: Member 'value1' of union 'TestUnion' should be a type name
Loading