[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members |
Date: |
Tue, 27 Oct 2015 08:52:59 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> Rather than storing a base class as a pointer to a box, just
> store the fields of that base class in the same order, so that
> a child struct can be directly cast to its parent. This gives
> less malloc overhead, less pointer dereferencing, and even less
> generated code. Compare to the earlier commit 1e6c1616a "qapi:
> Generate a nicer struct for flat unions" (although that patch
> had fewer places to change, as less of qemu was directly using
> qapi structs for flat unions). It also allows us to turn on
> automatic type-safe wrappers for upcasting to the base class
> of a struct.
>
> Changes to the generated code look like this in qapi-types.h:
>
> | struct SpiceChannel {
> |- SpiceBasicInfo *base;
> |+ /* Members inherited from SpiceBasicInfo: */
> |+ char *host;
> |+ char *port;
> |+ NetworkAddressFamily family;
> |+ /* Own members: */
> | int64_t connection_id;
>
> as well as added upcast functions like qapi_SpiceChannel_base().
"additional upcast functions" sounds better to my ears.
> Meanwhile, changes to qapi-visit.c look like:
>
> | static void visit_type_SpiceChannel_fields(Visitor *v, SpiceChannel **obj,
> Error **errp)
> | {
> | Error *err = NULL;
> |
> |- visit_type_implicit_SpiceBasicInfo(v, &(*obj)->base, &err);
> |+ visit_type_SpiceBasicInfo_fields(v, (SpiceBasicInfo **)obj, &err);
> | if (err) {
>
> (the cast is necessary, since our upcast wrappers only deal with a
> single pointer, not pointer-to-pointer); plus the wholesale
> elimination of some now-unused visit_type_implicit_FOO() functions.
>
> Without boxing, the corner case of one empty struct having
> another empty struct as its base type now requires inserting a
> dummy member (previously, the 'Base *base' member sufficed).
>
> And now that we no longer consume a 'base' member in the generated
> C struct, we can delete the former negative struct-base-clash-base
> test.
>
> Signed-off-by: Eric Blake <address@hidden>
>
> ---
> v11: delay gen_upcast for structs until here, rebase to proper use
> of gen_visit_fields_decl() in gen_visit_struct_fields(), improve
> commit message
> v10: split off some of the cleanups into earlier patches, improve
> commit message, don't emit visit_type_FOO_fields out of order,
> save positive tests in qapi-schema-tests for later
> v9: (no v6-8): hoist from v5 34/46, rebase to master
Patch looks good. I can touch up the commit message in my tree.
- [Qemu-devel] [PATCH v11 00/24] qapi collision reduction (post-introspection subset B'), Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 04/24] qapi: Reserve '*List' type names for list types, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 07/24] qapi-visit: Split off visit_type_FOO_fields forward decl, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 01/24] tests/qapi-schema: Test for reserved names, empty struct, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 05/24] qapi: Reserve 'q_*' and 'has_*' member names, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 11/24] qapi-visit: Remove redundant functions for flat union base, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 12/24] qapi: Start converting to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 13/24] qapi-visit: Convert to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members, Eric Blake, 2015/10/26
- Re: [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members,
Markus Armbruster <=
- [Qemu-devel] [PATCH v11 14/24] tests: Convert to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 08/24] qapi-types: Refactor base fields output, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 09/24] qapi: Prefer typesafe upcasts to qapi base classes, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 24/24] qapi: Simplify gen_struct_field(), Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 21/24] tpm: Convert to new qapi union layout, Eric Blake, 2015/10/26
- [Qemu-devel] [PATCH v11 22/24] qapi: Finish converting to new qapi union layout, Eric Blake, 2015/10/26