• E
    qapi: Track simple union tag in object.local_members · da34a9bd
    Eric Blake 提交于
    We were previously creating all unions with an empty list for
    local_members.  However, it will make it easier to unify struct
    and union generation if we include the generated tag member in
    local_members.  That way, we can have a common code pattern:
    visit the base (if any), visit the local members (if any), visit
    the variants (if any).  The local_members of a flat union
    remains empty (because the discriminator is already visited as
    part of the base).  Then, by visiting tag_member.check() during
    AlternateType.check(), we no longer need to call it during
    Variants.check().
    
    The various front end entities now exist as follows:
    struct: optional base, optional local_members, no variants
    simple union: no base, one-element local_members, variants with tag_member
      from local_members
    flat union: base, no local_members, variants with tag_member from base
    alternate: no base, no local_members, variants
    
    With the new local members, we require a bit of finesse to
    avoid assertions in the clients.
    
    No change to generated code.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Message-Id: <1447836791-369-2-git-send-email-eblake@redhat.com>
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    da34a9bd
qapi-visit.py 11.7 KB