Commit 8e08bf4e authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qapi: Assert incomplete object occurs only in dealloc visitor



Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <20200424084338.26803-7-armbru@redhat.com>
parent 554d6586
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1446,6 +1446,8 @@ Example:
            goto out;
        }
        if (!*obj) {
            /* incomplete */
            assert(visit_is_dealloc(v));
            goto out_obj;
        }
        visit_type_UserDefOne_members(v, *obj, &err);
+5 −0
Original line number Diff line number Diff line
@@ -479,6 +479,11 @@ void visit_type_enum(Visitor *v, const char *name, int *obj,
 */
bool visit_is_input(Visitor *v);

/*
 * Check if visitor is a dealloc visitor.
 */
bool visit_is_dealloc(Visitor *v);

/*** Visiting built-in types ***/

/*
+5 −0
Original line number Diff line number Diff line
@@ -142,6 +142,11 @@ bool visit_is_input(Visitor *v)
    return v->type == VISITOR_INPUT;
}

bool visit_is_dealloc(Visitor *v)
{
    return v->type == VISITOR_DEALLOC;
}

void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp)
{
    assert(obj);
+4 −0
Original line number Diff line number Diff line
@@ -189,6 +189,8 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
        goto out;
    }
    if (!*obj) {
        /* incomplete */
        assert(visit_is_dealloc(v));
        goto out_obj;
    }
    switch ((*obj)->type) {
@@ -260,6 +262,8 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
        goto out;
    }
    if (!*obj) {
        /* incomplete */
        assert(visit_is_dealloc(v));
        goto out_obj;
    }
    visit_type_%(c_name)s_members(v, *obj, &err);