From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: armbru@redhat.com, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH v6 10/16] qapi: Inline gen_visit_members() into lone caller
Date: Thu, 17 Mar 2016 16:48:35 -0600 [thread overview]
Message-ID: <1458254921-17042-11-git-send-email-eblake@redhat.com> (raw)
In-Reply-To: <1458254921-17042-1-git-send-email-eblake@redhat.com>
Commit 82ca8e46 noticed that we had multiple implementations of
visiting every member of a struct, and consolidated it into
gen_visit_fields() (now gen_visit_members()) with enough
parameters to cater to slight differences between the clients.
But recent exposure of implicit types has meant that we are now
down to a single use of that method, so we can clean up the
unused conditionals and just inline it into the remaining
caller: gen_visit_object_members().
Likewise, gen_err_check() no longer needs optional parameters,
as the lone use of non-defaults was via gen_visit_members().
No change to generated code.
Suggested-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
v6: no change
v5: new patch
---
scripts/qapi.py | 46 ++--------------------------------------------
scripts/qapi-visit.py | 23 ++++++++++++++++++++---
2 files changed, 22 insertions(+), 47 deletions(-)
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 96fb216..3b50e4d 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1657,54 +1657,12 @@ def gen_params(arg_type, extra):
return ret
-def gen_err_check(label='out', skiperr=False):
- if skiperr:
- return ''
+def gen_err_check():
return mcgen('''
if (err) {
- goto %(label)s;
- }
-''',
- label=label)
-
-
-def gen_visit_members(members, prefix='', need_cast=False, skiperr=False,
- label='out'):
- ret = ''
- if skiperr:
- errparg = 'NULL'
- else:
- errparg = '&err'
-
- for memb in members:
- if memb.optional:
- ret += mcgen('''
- if (visit_optional(v, "%(name)s", &%(prefix)shas_%(c_name)s)) {
-''',
- prefix=prefix, c_name=c_name(memb.name),
- name=memb.name)
- push_indent()
-
- # Ugly: sometimes we need to cast away const
- if need_cast and memb.type.name == 'str':
- cast = '(char **)'
- else:
- cast = ''
-
- ret += mcgen('''
- visit_type_%(c_type)s(v, "%(name)s", %(cast)s&%(prefix)s%(c_name)s, %(errp)s);
-''',
- c_type=memb.type.c_name(), prefix=prefix, cast=cast,
- c_name=c_name(memb.name), name=memb.name,
- errp=errparg)
- ret += gen_err_check(skiperr=skiperr, label=label)
-
- if memb.optional:
- pop_indent()
- ret += mcgen('''
+ goto out;
}
''')
- return ret
#
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index 4923b2e..5220bad 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -51,7 +51,24 @@ void visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
c_type=base.c_name())
ret += gen_err_check()
- ret += gen_visit_members(members, prefix='obj->')
+ for memb in members:
+ if memb.optional:
+ ret += mcgen('''
+ if (visit_optional(v, "%(name)s", &obj->has_%(c_name)s)) {
+''',
+ name=memb.name, c_name=c_name(memb.name))
+ push_indent()
+ ret += mcgen('''
+ visit_type_%(c_type)s(v, "%(name)s", &obj->%(c_name)s, &err);
+''',
+ c_type=memb.type.c_name(), name=memb.name,
+ c_name=c_name(memb.name))
+ ret += gen_err_check()
+ if memb.optional:
+ pop_indent()
+ ret += mcgen('''
+ }
+''')
if variants:
ret += mcgen('''
@@ -90,8 +107,8 @@ void visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
}
''')
- # 'goto out' produced for base, by gen_visit_members() for each member,
- # and if variants were present
+ # 'goto out' produced for base, for each member, and if variants were
+ # present
if base or members or variants:
ret += mcgen('''
--
2.5.0
next prev parent reply other threads:[~2016-03-17 22:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-17 22:48 [Qemu-devel] [PATCH v6 00/16] easier unboxed visits/qapi implicit types Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 01/16] qapi: Assert in places where variants are not handled Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 02/16] qapi: Fix command with named empty argument type Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 03/16] qapi: Make c_type() more OO-like Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 04/16] qapi: Adjust names of implicit types Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 05/16] qapi: Emit implicit structs in generated C Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 06/16] qapi-event: Drop qmp_output_get_qobject() null check Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 07/16] qapi-event: Utilize implicit struct visits Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 08/16] qapi-commands: " Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 09/16] qapi-commands: Inline single-use helpers of gen_marshal() Eric Blake
2016-03-17 22:48 ` Eric Blake [this message]
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 11/16] qapi: Drop unused c_null() Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 12/16] qapi: Don't special-case simple union wrappers Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 13/16] qapi: Make BlockdevOptions doc example closer to reality Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 14/16] qapi: Allow anonymous base for flat union Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 15/16] qapi: Use anonymous bases in QMP flat unions Eric Blake
2016-03-17 22:48 ` [Qemu-devel] [PATCH v6 16/16] qapi: Consolidate object visitors Eric Blake
2016-03-18 7:47 ` Markus Armbruster
2016-03-18 10:01 ` [Qemu-devel] [PATCH v6 00/16] easier unboxed visits/qapi implicit types 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=1458254921-17042-11-git-send-email-eblake@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).