From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v10 09/25] qapi: Prefer typesafe upcasts to qapi base classes
Date: Mon, 26 Oct 2015 18:54:03 +0100 [thread overview]
Message-ID: <871tchplc4.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <562E53D8.4050205@redhat.com> (Eric Blake's message of "Mon, 26 Oct 2015 10:24:56 -0600")
Eric Blake <eblake@redhat.com> writes:
> On 10/26/2015 01:33 AM, Markus Armbruster wrote:
>> Eric Blake <eblake@redhat.com> writes:
>>
>>> On 10/23/2015 09:30 AM, Markus Armbruster wrote:
>>>> Eric Blake <eblake@redhat.com> writes:
>>>>
>>>>> A previous patch (commit 1e6c1616) made it possible to
>>>>> directly cast from a qapi type to its base type. A future
>>>>> patch will do likewise for structs. However, it requires
>>>>> the client code to use a C cast, which turns off compiler
>>>>> type-safety checks if the client gets it wrong. So this
>>>>
>>>> Who's the client? Suggest to simply drop "if the client gets it wrong".
>>>>
>>>>> patch adds inline type-safe wrappers named qapi_FOO_base()
>>>>> for any type FOO that has a base, which can be used to
>>>>> upcast a qapi type to its base, then uses the new generated
>>>>> functions in places where we were already casting.
>>>>>
>
>>>
>>> Indeed, if I don't port gen_upcast() to types until patch 10/25, then
>>> this hunk also has to move to patch 10. That means no clients of the
>>> upcast macros in patch 9/25, _unless_ I add testsuite coverage. Which I
>>> probably ought to do.
>>>
>>>>> switch (event) {
>>>>> case QAPI_EVENT_VNC_CONNECTED:
>>>>> - qapi_event_send_vnc_connected(si, vs->info->base, &error_abort);
>>>>> + qapi_event_send_vnc_connected(si, qapi_VncClientInfo_base(vs->info),
>>>>> + &error_abort);
>>>>> break;
>>>>> case QAPI_EVENT_VNC_INITIALIZED:
>>>>> qapi_event_send_vnc_initialized(si, vs->info, &error_abort);
>>>>
>>>> Not a single cast to union base?
>>>
>>> Not that I could find. So I'll have to create one in the testsuite.
>>
>> I guess I'd introduce gen_upcast() only with its first real user,
>> i.e. when unboxing struct base. At that time, its obvious
>> implementation should work for both struct and union, even though we
>> actually use it only for struct. If you want to add a test case for
>> unions, go ahead. I'm not sure I'd bother, because once we unify code
>> generation for the two, testing them separately won't add much value
>> anymore.
>
> It sounds like I have two options for v11:
>
> 1. Keep 9/25 introducing gen_upcast(), just for union types, and
> including testsuite coverage. In 10/25, make use of the upcast functions
> to struct as part of making structs sane.
>
> 2. Swap the patch order: do 10/25 to alter struct layout first, using
> ugly casts; then implement 9/25 that adds gen_upcast() and fixes the
> ugly casts to instead use the new upcast functions.
>
> I can go either way, so do you have any preference?
I think I'd 3. Do 10/25 first, with gen_upcast() squashed in, and used
for casts to base. That gen_upcast() will just work for unions, too.
Least churn.
But any of the three options should work.
next prev parent reply other threads:[~2015-10-26 17:54 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-23 5:09 [Qemu-devel] [PATCH v10 00/25] qapi collision reduction (post-introspection subset B') Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 01/25] tests/qapi-schema: Test for reserved names, empty struct Eric Blake
2015-10-23 12:33 ` Markus Armbruster
2015-10-23 12:39 ` Eric Blake
2015-10-23 14:17 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 02/25] qapi: More idiomatic string operations Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 03/25] qapi: More robust conditions for when labels are needed Eric Blake
2015-10-23 12:44 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 04/25] qapi: Reserve '*List' type names for list types Eric Blake
2015-10-23 12:53 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 05/25] qapi: Reserve 'q_*' and 'has_*' member names Eric Blake
2015-10-23 13:05 ` Markus Armbruster
2015-10-23 14:14 ` Eric Blake
2015-10-23 14:47 ` Markus Armbruster
2015-10-23 14:52 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 06/25] vnc: Hoist allocation of VncBasicInfo to callers Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 07/25] qapi-visit: Split off visit_type_FOO_fields forward decl Eric Blake
2015-10-23 13:46 ` Markus Armbruster
2015-10-23 14:35 ` Eric Blake
2015-10-23 18:05 ` Markus Armbruster
2015-10-23 19:44 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 08/25] qapi-types: Refactor base fields output Eric Blake
2015-10-23 15:06 ` Markus Armbruster
2015-10-23 15:16 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 09/25] qapi: Prefer typesafe upcasts to qapi base classes Eric Blake
2015-10-23 15:30 ` Markus Armbruster
2015-10-23 20:44 ` Eric Blake
2015-10-26 7:33 ` Markus Armbruster
2015-10-26 16:24 ` Eric Blake
2015-10-26 17:54 ` Markus Armbruster [this message]
2015-10-26 20:53 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 10/25] qapi: Unbox base members Eric Blake
2015-10-23 19:14 ` Markus Armbruster
2015-10-23 19:19 ` Eric Blake
2015-10-23 20:45 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 11/25] qapi-visit: Remove redundant functions for flat union base Eric Blake
2015-10-23 19:35 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 12/25] qapi: Start converting to new qapi union layout Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 13/25] qapi-visit: Convert " Eric Blake
2015-10-26 17:07 ` Markus Armbruster
2015-10-26 20:39 ` Eric Blake
2015-10-27 7:08 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 14/25] tests: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 15/25] block: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 16/25] sockets: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 17/25] net: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 18/25] char: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 19/25] input: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 20/25] memory: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 21/25] tpm: " Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 22/25] qapi: Finish converting " Eric Blake
2015-10-27 8:33 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 23/25] qapi: Reserve 'u' member name Eric Blake
2015-10-26 17:27 ` Markus Armbruster
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 24/25] qapi: Remove outdated tests related to QMP/branch collisions Eric Blake
2015-10-23 23:27 ` Eric Blake
2015-10-23 5:09 ` [Qemu-devel] [PATCH v10 25/25] qapi: Simplify gen_struct_field() Eric Blake
2015-10-26 17:55 ` [Qemu-devel] [PATCH v10 00/25] qapi collision reduction (post-introspection subset B') 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=871tchplc4.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=kraxel@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.