Skip to content

Commit

Permalink
qapi: Simplify gen_visit_fields() error handling
Browse files Browse the repository at this point in the history
Since we have consolidated all generated code to use 'err' as
the name of the local variable for error detection, we can
simplify the decision on whether to skip error detection (useful
for deallocation paths) to be a boolean.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1443565276-4535-18-git-send-email-eblake@redhat.com>
[Change to gen_visit_fields() simplified]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
  • Loading branch information
ebblake authored and Markus Armbruster committed Oct 12, 2015
1 parent 82ca8e4 commit 18bdbc3
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 13 deletions.
4 changes: 1 addition & 3 deletions scripts/qapi-commands.py
Expand Up @@ -101,19 +101,17 @@ def gen_marshal_input_visit(arg_type, dealloc=False):
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('''
Expand Down
20 changes: 10 additions & 10 deletions scripts/qapi.py
Expand Up @@ -1537,23 +1537,23 @@ def gen_params(arg_type, extra):
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:
Expand All @@ -1562,7 +1562,7 @@ def gen_visit_fields(members, prefix='', need_cast=False, errarg='err'):
''',
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) {
''',
Expand All @@ -1581,7 +1581,7 @@ def gen_visit_fields(members, prefix='', need_cast=False, errarg='err'):
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()
Expand Down

0 comments on commit 18bdbc3

Please sign in to comment.