qapi: Assert incomplete object occurs only in dealloc visitor
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20200424084338.26803-7-armbru@redhat.com>
This commit is contained in:
parent
554d6586ae
commit
8e08bf4ea2
@ -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);
|
||||
|
@ -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 ***/
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user