qapi: Support downstream structs
Enhance the testsuite to cover downstream structs, including struct
members and base structs. Update the generator to mangle the
struct names in the appropriate places.
Signed-off-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index 7697ec6..b500724 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -56,7 +56,7 @@
{
Error *err = NULL;
''',
- name=name)
+ name=c_name(name))
push_indent()
if base:
@@ -111,16 +111,16 @@
ret = mcgen('''
Error *err = NULL;
- visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err);
+ visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
if (!err) {
if (*obj) {
- visit_type_%(name)s_fields(m, obj, errp);
+ visit_type_%(c_name)s_fields(m, obj, errp);
}
visit_end_struct(m, &err);
}
error_propagate(errp, err);
''',
- name=name)
+ name=name, c_name=c_name(name))
return ret
@@ -137,7 +137,7 @@
void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **errp)
{
''',
- name=name)
+ name=c_name(name))
ret += generate_visit_struct_body(name, members)
@@ -347,6 +347,7 @@
def generate_declaration(name, members, builtin_type=False):
ret = ""
if not builtin_type:
+ name = c_name(name)
ret += mcgen('''
void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **errp);