summaryrefslogtreecommitdiffstats
path: root/scripts/qapi-visit.py
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2016-03-17 16:48:35 -0600
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:49:38 -0600
commitc3f93819a8f988633c2ec1177c28a1f75a7d448d (patch)
tree46a88da4bd0c3f76fbb495ecdd2b76a58da11fa1 /scripts/qapi-visit.py
parentbff19134f7bee61ecf5012e2e1a1192894ef219f (diff)
downloadhqemu-c3f93819a8f988633c2ec1177c28a1f75a7d448d.zip
hqemu-c3f93819a8f988633c2ec1177c28a1f75a7d448d.tar.gz
qapi: Inline gen_visit_members() into lone caller
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> Message-Id: <1458254921-17042-11-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'scripts/qapi-visit.py')
-rw-r--r--scripts/qapi-visit.py23
1 files changed, 20 insertions, 3 deletions
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('''
OpenPOWER on IntegriCloud