aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi/visit.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qapi/visit.py')
-rw-r--r--scripts/qapi/visit.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index 380fa197f5..26a584ee4c 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -71,6 +71,16 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
''',
c_name=c_name(name))
+ sep = ''
+ for memb in members:
+ if memb.optional and not memb.need_has():
+ ret += mcgen('''
+ bool has_%(c_name)s = !!obj->%(c_name)s;
+''',
+ c_name=c_name(memb.name))
+ sep = '\n'
+ ret += sep
+
if base:
ret += mcgen('''
if (!visit_type_%(c_type)s_members(v, (%(c_type)s *)obj, errp)) {
@@ -82,10 +92,13 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
for memb in members:
ret += memb.ifcond.gen_if()
if memb.optional:
+ has = 'has_' + c_name(memb.name)
+ if memb.need_has():
+ has = 'obj->' + has
ret += mcgen('''
- if (visit_optional(v, "%(name)s", &obj->has_%(c_name)s)) {
+ if (visit_optional(v, "%(name)s", &%(has)s)) {
''',
- name=memb.name, c_name=c_name(memb.name))
+ name=memb.name, has=has)
indent.increase()
special_features = gen_special_features(memb.features)
if special_features != '0':