Skip to content

Commit

Permalink
qapi: Assert incomplete object occurs only in dealloc visitor
Browse files Browse the repository at this point in the history
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200424084338.26803-7-armbru@redhat.com>
  • Loading branch information
Markus Armbruster committed Apr 30, 2020
1 parent 554d658 commit 8e08bf4
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 0 deletions.
2 changes: 2 additions & 0 deletions docs/devel/qapi-code-gen.txt
Expand Up @@ -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);
Expand Down
5 changes: 5 additions & 0 deletions include/qapi/visitor.h
Expand Up @@ -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 ***/

/*
Expand Down
5 changes: 5 additions & 0 deletions qapi/qapi-visit-core.c
Expand Up @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions scripts/qapi/visit.py
Expand Up @@ -189,6 +189,8 @@ def gen_visit_alternate(name, variants):
goto out;
}
if (!*obj) {
/* incomplete */
assert(visit_is_dealloc(v));
goto out_obj;
}
switch ((*obj)->type) {
Expand Down Expand Up @@ -260,6 +262,8 @@ def gen_visit_object(name, base, members, variants):
goto out;
}
if (!*obj) {
/* incomplete */
assert(visit_is_dealloc(v));
goto out_obj;
}
visit_type_%(c_name)s_members(v, *obj, &err);
Expand Down

0 comments on commit 8e08bf4

Please sign in to comment.