Commit 18bdbc3a authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

qapi: Simplify gen_visit_fields() error handling



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: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1443565276-4535-18-git-send-email-eblake@redhat.com>
[Change to gen_visit_fields() simplified]
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 82ca8e46
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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('''
+10 −10
Original line number Diff line number Diff line
@@ -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:
@@ -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) {
''',
@@ -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()