All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v10 07/25] qapi-visit: Split off visit_type_FOO_fields forward decl
Date: Fri, 23 Oct 2015 15:46:46 +0200	[thread overview]
Message-ID: <87pp05g0jd.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1445576998-2921-8-git-send-email-eblake@redhat.com> (Eric Blake's message of "Thu, 22 Oct 2015 23:09:40 -0600")

Eric Blake <eblake@redhat.com> writes:

> We generate a static visit_type_FOO_fields() for every type
> FOO.  However, sometimes we need a forward declaration. Split
> the code to generate the forward declaration out of
> gen_visit_implicit_struct() into a new gen_visit_fields_decl(),
> and also prepare for a forward declaration to be emitted
> during gen_visit_struct(), so that a future patch can switch
> from using visit_type_FOO_implicit() to the simpler
> visit_type_FOO_fields() as part of unboxing the base class
> of a struct.
>
> No change to generated code.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
>
> ---
> v10: new patch, split from 5/17
> ---
>  scripts/qapi-visit.py | 35 ++++++++++++++++++++++++-----------
>  1 file changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
> index e878018..7204ed0 100644
> --- a/scripts/qapi-visit.py
> +++ b/scripts/qapi-visit.py
> @@ -15,7 +15,12 @@
>  from qapi import *
>  import re
>
> +# visit_type_FOO_implicit() is emitted as needed; track if it has already
> +# been output. No forward declaration is needed.
>  implicit_structs_seen = set()

I initially read this as "No forward is needed then", but that's wrong.
Suggest to drop that sentence.

> +
> +# visit_type_FOO_fields() is always emitted; track if a forward declaration
> +# or implementation has already been output.
>  struct_fields_seen = set()

Yup.

> @@ -29,19 +34,24 @@ void visit_type_%(c_name)s(Visitor *v, %(c_type)sobj, const char *name, Error **
>                   c_name=c_name(name), c_type=c_type)
>
>
> +def gen_visit_fields_decl(typ):
> +    ret = ''
> +    if typ.name not in struct_fields_seen:
> +        ret += mcgen('''
> +
> +static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s **obj, Error **errp);
> +''',
> +                     c_type=typ.c_name())
> +        struct_fields_seen.add(typ.name)
> +    return ret
> +
> +
>  def gen_visit_implicit_struct(typ):
>      if typ in implicit_structs_seen:
>          return ''
>      implicit_structs_seen.add(typ)
>
> -    ret = ''
> -    if typ.name not in struct_fields_seen:
> -        # Need a forward declaration
> -        ret += mcgen('''
> -
> -static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s **obj, Error **errp);
> -''',
> -                     c_type=typ.c_name())
> +    ret = gen_visit_fields_decl(typ)
>
>      ret += mcgen('''
>
> @@ -62,13 +72,12 @@ static void visit_type_implicit_%(c_type)s(Visitor *v, %(c_type)s **obj, Error *
>
>
>  def gen_visit_struct_fields(name, base, members):
> -    struct_fields_seen.add(name)
> -
>      ret = ''
>
>      if base:
>          ret += gen_visit_implicit_struct(base)
>
> +    struct_fields_seen.add(name)
>      ret += mcgen('''
>

Minor cleanup not mentioned in commit message.  Okay.

>  static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s **obj, Error **errp)
> @@ -100,7 +109,11 @@ out:
>
>
>  def gen_visit_struct(name, base, members):
> -    ret = gen_visit_struct_fields(name, base, members)
> +    ret = ''
> +    if base:
> +        ret += gen_visit_fields_decl(base)
> +
> +    ret += gen_visit_struct_fields(name, base, members)
>
>      # FIXME: if *obj is NULL on entry, and visit_start_struct() assigns to
>      # *obj, but then visit_type_FOO_fields() fails, we should clean up *obj

What's the purpose of this hunk?

  reply	other threads:[~2015-10-23 13:46 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 [this message]
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
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=87pp05g0jd.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=eblake@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.