All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v4 08/10] qapi: Allow anonymous base for flat union
Date: Tue, 8 Mar 2016 09:29:46 -0700	[thread overview]
Message-ID: <56DEFDFA.5050701@redhat.com> (raw)
In-Reply-To: <87si015474.fsf@blackfin.pond.sub.org>

[-- Attachment #1: Type: text/plain, Size: 2791 bytes --]

On 03/08/2016 09:23 AM, Markus Armbruster wrote:
> Eric Blake <eblake@redhat.com> writes:
> 
>> Rather than requiring all flat unions to explicitly create
>> a separate base struct, we can allow the qapi schema to specify
>> the common members via an inline dictionary. This is similar to
>> how commands can specify an inline anonymous type for its 'data'.
>> We already have several struct types that only exist to serve as
>> a single flat union's base; the next commit will clean them up.
>>

> 
> I think you also
> 
> * fixed a missing allow_optional=True in check_union()

More on that below.

> 
> * fixed a missing "non-optional" in qapi-code-gen.txt (mention in commit
>   message?  separate patch?)
> 
> * renamed readonly to read-only in an example in qapi-code-gen.txt to be
>   closer to the code (separate patch?)

Could separate those two cleanups if it helps.


>> @@ -560,9 +562,10 @@ def check_union(expr, expr_info):
>>
>>      # Else, it's a flat union.
>>      else:
>> -        # The object must have a string member 'base'.
>> +        # The object must have a string or dictionary 'base'.
>>          check_type(expr_info, "'base' for union '%s'" % name,
>> -                   base, allow_metas=['struct'])
>> +                   base, allow_dict=True, allow_optional=True,
>> +                   allow_metas=['struct'])
> 
> This is where you added allow_optional=True.

allow_optional only matters if allow_dict is True.  We have places where
we allow a dict but do not allow optionals (namely, simple unions); but
where we are creating an anonymous type, we want to allow optionals at
the same time we allow a dict.  I think this is just a case where the
commit message needs to be beefed up.


>> +A flat union definition avoids nesting on the wire, and specifies a
>> +set of common members that occur in all variants of the union.  The
>> +'base' key must specifiy either a type name (the type must be a
>> +struct, not a union), or a dictionary representing an anonymous type.
>> +All branches of the union must be complex types, and the top-level
>> +members of the union dictionary on the wire will be combination of
>> +members from both the base type and the appropriate branch type (when
>> +merging two dictionaries, there must be no keys in common).  The
>> +'discriminator' member must be the name of a non-optional enum-typed
> 
> This is where you supplied the missing "non-optional".
> 
>> +member of the base struct.
>>
> 
> And below, you rename readonly to read-only.

They touch the same paragraph, but I can separate them if it would make
this patch feel cleaner.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

  reply	other threads:[~2016-03-08 16:29 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-05 16:16 [Qemu-devel] [PATCH v4 00/10] easier unboxed visits/qapi implicit types Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 01/10] qapi: Assert in places where variants are not handled Eric Blake
2016-03-08 10:12   ` Markus Armbruster
2016-03-08 15:49     ` Eric Blake
2016-03-08 17:46       ` Markus Armbruster
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 02/10] qapi: Fix command with named empty argument type Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 03/10] qapi: Make c_type() more OO-like Eric Blake
2016-03-08 10:54   ` Markus Armbruster
2016-03-08 15:50     ` Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 04/10] qapi: Emit implicit structs in generated C Eric Blake
2016-03-08 14:24   ` Markus Armbruster
2016-03-08 16:03     ` Eric Blake
2016-03-08 19:09       ` Markus Armbruster
2016-03-09  5:42         ` Eric Blake
2016-03-09  7:23           ` Markus Armbruster
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 05/10] qapi: Utilize implicit struct visits Eric Blake
2016-03-08 15:10   ` Markus Armbruster
2016-03-08 16:11     ` Eric Blake
2016-03-08 18:09       ` Markus Armbruster
2016-03-08 18:28         ` Eric Blake
2016-03-08 19:21           ` Markus Armbruster
2016-03-09 23:28       ` Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 06/10] qapi-commands: Inline single-use helpers of gen_marshal() Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 07/10] qapi: Don't special-case simple union wrappers Eric Blake
2016-03-08 15:59   ` Markus Armbruster
2016-03-08 16:16     ` Eric Blake
2016-03-08 18:10       ` Markus Armbruster
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 08/10] qapi: Allow anonymous base for flat union Eric Blake
2016-03-08 16:23   ` Markus Armbruster
2016-03-08 16:29     ` Eric Blake [this message]
2016-03-08 18:14       ` Markus Armbruster
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 09/10] qapi: Use anonymous bases in QMP flat unions Eric Blake
2016-03-05 16:16 ` [Qemu-devel] [PATCH v4 10/10] qapi: Populate info['name'] for each entity Eric Blake
2016-03-08 16:46   ` Markus Armbruster
2016-03-08 16:59     ` Eric Blake
2016-03-08 19:14       ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56DEFDFA.5050701@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.