return ret
if dealloc:
- errarg = None
ret += mcgen('''
qmp_input_visitor_cleanup(qiv);
qdv = qapi_dealloc_visitor_new();
v = qapi_dealloc_get_visitor(qdv);
''')
else:
- errarg = 'err'
ret += mcgen('''
v = qmp_input_get_visitor(qiv);
''')
- ret += gen_visit_fields(arg_type.members, errarg=errarg)
+ ret += gen_visit_fields(arg_type.members, skiperr=dealloc)
if dealloc:
ret += mcgen('''
return ret
-def gen_err_check(err='err', label='out'):
- if not err:
+def gen_err_check(label='out', skiperr=False):
+ if skiperr:
return ''
return mcgen('''
- if (%(err)s) {
+ if (err) {
goto %(label)s;
}
''',
- err=err, label=label)
+ label=label)
-def gen_visit_fields(members, prefix='', need_cast=False, errarg='err'):
+def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
ret = ''
- if errarg:
- errparg = '&' + errarg
- else:
+ if skiperr:
errparg = 'NULL'
+ else:
+ errparg = '&err'
for memb in members:
if memb.optional:
''',
prefix=prefix, c_name=c_name(memb.name),
name=memb.name, errp=errparg)
- ret += gen_err_check(err=errarg)
+ ret += gen_err_check(skiperr=skiperr)
ret += mcgen('''
if (%(prefix)shas_%(c_name)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(err=errarg)
+ ret += gen_err_check(skiperr=skiperr)
if memb.optional:
pop_indent()