qapi: Consistent generated code: prefer visitor 'v'
We had some pointless differences in the generated code for visit, command marshalling, and events; unifying them makes it easier for future patches to consolidate to common helper functions. This is one patch of a series to clean up these differences. This patch names the local visitor variable 'v' rather than 'm'. Related objects, such as 'QapiDeallocVisitor', are also named by their initials instead of an unrelated leading m. No change in semantics to the generated code. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1443565276-4535-12-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
		
							parent
							
								
									2a0f50e8d9
								
							
						
					
					
						commit
						f8b7f1a8ea
					
				| 
						 | 
				
			
			@ -740,32 +740,32 @@ Example:
 | 
			
		|||
 | 
			
		||||
    void qapi_free_UserDefOne(UserDefOne *obj)
 | 
			
		||||
    {
 | 
			
		||||
        QapiDeallocVisitor *md;
 | 
			
		||||
        QapiDeallocVisitor *qdv;
 | 
			
		||||
        Visitor *v;
 | 
			
		||||
 | 
			
		||||
        if (!obj) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        md = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
        qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
        visit_type_UserDefOne(v, &obj, NULL, NULL);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void qapi_free_UserDefOneList(UserDefOneList *obj)
 | 
			
		||||
    {
 | 
			
		||||
        QapiDeallocVisitor *md;
 | 
			
		||||
        QapiDeallocVisitor *qdv;
 | 
			
		||||
        Visitor *v;
 | 
			
		||||
 | 
			
		||||
        if (!obj) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        md = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
        qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
        visit_type_UserDefOneList(v, &obj, NULL, NULL);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
    }
 | 
			
		||||
    $ cat qapi-generated/example-qapi-types.h
 | 
			
		||||
[Uninteresting stuff omitted...]
 | 
			
		||||
| 
						 | 
				
			
			@ -823,15 +823,15 @@ Example:
 | 
			
		|||
    $ cat qapi-generated/example-qapi-visit.c
 | 
			
		||||
[Uninteresting stuff omitted...]
 | 
			
		||||
 | 
			
		||||
    static void visit_type_UserDefOne_fields(Visitor *m, UserDefOne **obj, Error **errp)
 | 
			
		||||
    static void visit_type_UserDefOne_fields(Visitor *v, UserDefOne **obj, Error **errp)
 | 
			
		||||
    {
 | 
			
		||||
        Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
        visit_type_int(m, &(*obj)->integer, "integer", &err);
 | 
			
		||||
        visit_type_int(v, &(*obj)->integer, "integer", &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
        visit_type_str(m, &(*obj)->string, "string", &err);
 | 
			
		||||
        visit_type_str(v, &(*obj)->string, "string", &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -840,40 +840,40 @@ Example:
 | 
			
		|||
        error_propagate(errp, err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void visit_type_UserDefOne(Visitor *m, UserDefOne **obj, const char *name, Error **errp)
 | 
			
		||||
    void visit_type_UserDefOne(Visitor *v, UserDefOne **obj, const char *name, Error **errp)
 | 
			
		||||
    {
 | 
			
		||||
        Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
        visit_start_struct(m, (void **)obj, "UserDefOne", name, sizeof(UserDefOne), &err);
 | 
			
		||||
        visit_start_struct(v, (void **)obj, "UserDefOne", name, sizeof(UserDefOne), &err);
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            if (*obj) {
 | 
			
		||||
                visit_type_UserDefOne_fields(m, obj, errp);
 | 
			
		||||
                visit_type_UserDefOne_fields(v, obj, errp);
 | 
			
		||||
            }
 | 
			
		||||
            visit_end_struct(m, &err);
 | 
			
		||||
            visit_end_struct(v, &err);
 | 
			
		||||
        }
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void visit_type_UserDefOneList(Visitor *m, UserDefOneList **obj, const char *name, Error **errp)
 | 
			
		||||
    void visit_type_UserDefOneList(Visitor *v, UserDefOneList **obj, const char *name, Error **errp)
 | 
			
		||||
    {
 | 
			
		||||
        Error *err = NULL;
 | 
			
		||||
        GenericList *i, **prev;
 | 
			
		||||
 | 
			
		||||
        visit_start_list(m, name, &err);
 | 
			
		||||
        visit_start_list(v, name, &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (prev = (GenericList **)obj;
 | 
			
		||||
             !err && (i = visit_next_list(m, prev, &err)) != NULL;
 | 
			
		||||
             !err && (i = visit_next_list(v, prev, &err)) != NULL;
 | 
			
		||||
             prev = &i) {
 | 
			
		||||
            UserDefOneList *native_i = (UserDefOneList *)i;
 | 
			
		||||
            visit_type_UserDefOne(m, &native_i->value, NULL, &err);
 | 
			
		||||
            visit_type_UserDefOne(v, &native_i->value, NULL, &err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
        err = NULL;
 | 
			
		||||
        visit_end_list(m, &err);
 | 
			
		||||
        visit_end_list(v, &err);
 | 
			
		||||
    out:
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -885,8 +885,8 @@ Example:
 | 
			
		|||
 | 
			
		||||
[Visitors for built-in types omitted...]
 | 
			
		||||
 | 
			
		||||
    void visit_type_UserDefOne(Visitor *m, UserDefOne **obj, const char *name, Error **errp);
 | 
			
		||||
    void visit_type_UserDefOneList(Visitor *m, UserDefOneList **obj, const char *name, Error **errp);
 | 
			
		||||
    void visit_type_UserDefOne(Visitor *v, UserDefOne **obj, const char *name, Error **errp);
 | 
			
		||||
    void visit_type_UserDefOneList(Visitor *v, UserDefOneList **obj, const char *name, Error **errp);
 | 
			
		||||
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -917,36 +917,36 @@ Example:
 | 
			
		|||
    static void qmp_marshal_output_UserDefOne(UserDefOne *ret_in, QObject **ret_out, Error **errp)
 | 
			
		||||
    {
 | 
			
		||||
        Error *err = NULL;
 | 
			
		||||
        QmpOutputVisitor *mo = qmp_output_visitor_new();
 | 
			
		||||
        QapiDeallocVisitor *md;
 | 
			
		||||
        QmpOutputVisitor *qov = qmp_output_visitor_new();
 | 
			
		||||
        QapiDeallocVisitor *qdv;
 | 
			
		||||
        Visitor *v;
 | 
			
		||||
 | 
			
		||||
        v = qmp_output_get_visitor(mo);
 | 
			
		||||
        v = qmp_output_get_visitor(qov);
 | 
			
		||||
        visit_type_UserDefOne(v, &ret_in, "unused", &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
        *ret_out = qmp_output_get_qobject(mo);
 | 
			
		||||
        *ret_out = qmp_output_get_qobject(qov);
 | 
			
		||||
 | 
			
		||||
    out:
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
        qmp_output_visitor_cleanup(mo);
 | 
			
		||||
        md = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
        qmp_output_visitor_cleanup(qov);
 | 
			
		||||
        qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
        visit_type_UserDefOne(v, &ret_in, "unused", NULL);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
 | 
			
		||||
    {
 | 
			
		||||
        Error *err = NULL;
 | 
			
		||||
        UserDefOne *retval;
 | 
			
		||||
        QmpInputVisitor *mi = qmp_input_visitor_new_strict(QOBJECT(args));
 | 
			
		||||
        QapiDeallocVisitor *md;
 | 
			
		||||
        QmpInputVisitor *qiv = qmp_input_visitor_new_strict(QOBJECT(args));
 | 
			
		||||
        QapiDeallocVisitor *qdv;
 | 
			
		||||
        Visitor *v;
 | 
			
		||||
        UserDefOne *arg1 = NULL;
 | 
			
		||||
 | 
			
		||||
        v = qmp_input_get_visitor(mi);
 | 
			
		||||
        v = qmp_input_get_visitor(qiv);
 | 
			
		||||
        visit_type_UserDefOne(v, &arg1, "arg1", &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out;
 | 
			
		||||
| 
						 | 
				
			
			@ -961,11 +961,11 @@ Example:
 | 
			
		|||
 | 
			
		||||
    out:
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
        qmp_input_visitor_cleanup(mi);
 | 
			
		||||
        md = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
        qmp_input_visitor_cleanup(qiv);
 | 
			
		||||
        qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
        v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
        visit_type_UserDefOne(v, &arg1, "arg1", NULL);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
        qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void qmp_init_marshal(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								qom/object.c
								
								
								
								
							
							
						
						
									
										18
									
								
								qom/object.c
								
								
								
								
							| 
						 | 
				
			
			@ -1167,31 +1167,31 @@ out:
 | 
			
		|||
void object_property_parse(Object *obj, const char *string,
 | 
			
		||||
                           const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    StringInputVisitor *mi;
 | 
			
		||||
    mi = string_input_visitor_new(string);
 | 
			
		||||
    object_property_set(obj, string_input_get_visitor(mi), name, errp);
 | 
			
		||||
    StringInputVisitor *siv;
 | 
			
		||||
    siv = string_input_visitor_new(string);
 | 
			
		||||
    object_property_set(obj, string_input_get_visitor(siv), name, errp);
 | 
			
		||||
 | 
			
		||||
    string_input_visitor_cleanup(mi);
 | 
			
		||||
    string_input_visitor_cleanup(siv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *object_property_print(Object *obj, const char *name, bool human,
 | 
			
		||||
                            Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    StringOutputVisitor *mo;
 | 
			
		||||
    StringOutputVisitor *sov;
 | 
			
		||||
    char *string = NULL;
 | 
			
		||||
    Error *local_err = NULL;
 | 
			
		||||
 | 
			
		||||
    mo = string_output_visitor_new(human);
 | 
			
		||||
    object_property_get(obj, string_output_get_visitor(mo), name, &local_err);
 | 
			
		||||
    sov = string_output_visitor_new(human);
 | 
			
		||||
    object_property_get(obj, string_output_get_visitor(sov), name, &local_err);
 | 
			
		||||
    if (local_err) {
 | 
			
		||||
        error_propagate(errp, local_err);
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    string = string_output_get_string(mo);
 | 
			
		||||
    string = string_output_get_string(sov);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
    string_output_visitor_cleanup(mo);
 | 
			
		||||
    string_output_visitor_cleanup(sov);
 | 
			
		||||
    return string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,11 +19,11 @@
 | 
			
		|||
void object_property_set_qobject(Object *obj, QObject *value,
 | 
			
		||||
                                 const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    QmpInputVisitor *mi;
 | 
			
		||||
    mi = qmp_input_visitor_new(value);
 | 
			
		||||
    object_property_set(obj, qmp_input_get_visitor(mi), name, errp);
 | 
			
		||||
    QmpInputVisitor *qiv;
 | 
			
		||||
    qiv = qmp_input_visitor_new(value);
 | 
			
		||||
    object_property_set(obj, qmp_input_get_visitor(qiv), name, errp);
 | 
			
		||||
 | 
			
		||||
    qmp_input_visitor_cleanup(mi);
 | 
			
		||||
    qmp_input_visitor_cleanup(qiv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QObject *object_property_get_qobject(Object *obj, const char *name,
 | 
			
		||||
| 
						 | 
				
			
			@ -31,14 +31,14 @@ QObject *object_property_get_qobject(Object *obj, const char *name,
 | 
			
		|||
{
 | 
			
		||||
    QObject *ret = NULL;
 | 
			
		||||
    Error *local_err = NULL;
 | 
			
		||||
    QmpOutputVisitor *mo;
 | 
			
		||||
    QmpOutputVisitor *qov;
 | 
			
		||||
 | 
			
		||||
    mo = qmp_output_visitor_new();
 | 
			
		||||
    object_property_get(obj, qmp_output_get_visitor(mo), name, &local_err);
 | 
			
		||||
    qov = qmp_output_visitor_new();
 | 
			
		||||
    object_property_get(obj, qmp_output_get_visitor(qov), name, &local_err);
 | 
			
		||||
    if (!local_err) {
 | 
			
		||||
        ret = qmp_output_get_qobject(mo);
 | 
			
		||||
        ret = qmp_output_get_qobject(qov);
 | 
			
		||||
    }
 | 
			
		||||
    error_propagate(errp, local_err);
 | 
			
		||||
    qmp_output_visitor_cleanup(mo);
 | 
			
		||||
    qmp_output_visitor_cleanup(qov);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,8 +82,8 @@ def gen_marshal_vars(arg_type, ret_type):
 | 
			
		|||
 | 
			
		||||
    if arg_type:
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
QmpInputVisitor *mi = qmp_input_visitor_new_strict(QOBJECT(args));
 | 
			
		||||
QapiDeallocVisitor *md;
 | 
			
		||||
QmpInputVisitor *qiv = qmp_input_visitor_new_strict(QOBJECT(args));
 | 
			
		||||
QapiDeallocVisitor *qdv;
 | 
			
		||||
Visitor *v;
 | 
			
		||||
''')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -122,15 +122,15 @@ def gen_marshal_input_visit(arg_type, dealloc=False):
 | 
			
		|||
        errparg = 'NULL'
 | 
			
		||||
        errarg = None
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
qmp_input_visitor_cleanup(mi);
 | 
			
		||||
md = qapi_dealloc_visitor_new();
 | 
			
		||||
v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
qmp_input_visitor_cleanup(qiv);
 | 
			
		||||
qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
''')
 | 
			
		||||
    else:
 | 
			
		||||
        errparg = '&err'
 | 
			
		||||
        errarg = 'err'
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
v = qmp_input_get_visitor(mi);
 | 
			
		||||
v = qmp_input_get_visitor(qiv);
 | 
			
		||||
''')
 | 
			
		||||
 | 
			
		||||
    for memb in arg_type.members:
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ visit_type_%(c_type)s(v, &%(c_name)s, "%(name)s", %(errp)s);
 | 
			
		|||
 | 
			
		||||
    if dealloc:
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
''')
 | 
			
		||||
    pop_indent()
 | 
			
		||||
    return ret
 | 
			
		||||
| 
						 | 
				
			
			@ -172,24 +172,24 @@ def gen_marshal_output(ret_type):
 | 
			
		|||
static void qmp_marshal_output_%(c_name)s(%(c_type)s ret_in, QObject **ret_out, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
    QmpOutputVisitor *mo = qmp_output_visitor_new();
 | 
			
		||||
    QapiDeallocVisitor *md;
 | 
			
		||||
    QmpOutputVisitor *qov = qmp_output_visitor_new();
 | 
			
		||||
    QapiDeallocVisitor *qdv;
 | 
			
		||||
    Visitor *v;
 | 
			
		||||
 | 
			
		||||
    v = qmp_output_get_visitor(mo);
 | 
			
		||||
    v = qmp_output_get_visitor(qov);
 | 
			
		||||
    visit_type_%(c_name)s(v, &ret_in, "unused", &err);
 | 
			
		||||
    if (err) {
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
    *ret_out = qmp_output_get_qobject(mo);
 | 
			
		||||
    *ret_out = qmp_output_get_qobject(qov);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
    qmp_output_visitor_cleanup(mo);
 | 
			
		||||
    md = qapi_dealloc_visitor_new();
 | 
			
		||||
    v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
    qmp_output_visitor_cleanup(qov);
 | 
			
		||||
    qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
    v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
    visit_type_%(c_name)s(v, &ret_in, "unused", NULL);
 | 
			
		||||
    qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
    qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
}
 | 
			
		||||
''',
 | 
			
		||||
                 c_type=ret_type.c_type(), c_name=ret_type.c_name())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,17 +188,17 @@ def gen_type_cleanup(name):
 | 
			
		|||
 | 
			
		||||
void qapi_free_%(c_name)s(%(c_name)s *obj)
 | 
			
		||||
{
 | 
			
		||||
    QapiDeallocVisitor *md;
 | 
			
		||||
    QapiDeallocVisitor *qdv;
 | 
			
		||||
    Visitor *v;
 | 
			
		||||
 | 
			
		||||
    if (!obj) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    md = qapi_dealloc_visitor_new();
 | 
			
		||||
    v = qapi_dealloc_get_visitor(md);
 | 
			
		||||
    qdv = qapi_dealloc_visitor_new();
 | 
			
		||||
    v = qapi_dealloc_get_visitor(qdv);
 | 
			
		||||
    visit_type_%(c_name)s(v, &obj, NULL, NULL);
 | 
			
		||||
    qapi_dealloc_visitor_cleanup(md);
 | 
			
		||||
    qapi_dealloc_visitor_cleanup(qdv);
 | 
			
		||||
}
 | 
			
		||||
''',
 | 
			
		||||
                c_name=c_name(name))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ def gen_visit_decl(name, scalar=False):
 | 
			
		|||
    if not scalar:
 | 
			
		||||
        c_type += '*'
 | 
			
		||||
    return mcgen('''
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_type)sobj, const char *name, Error **errp);
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_type)sobj, const char *name, Error **errp);
 | 
			
		||||
''',
 | 
			
		||||
                 c_name=c_name(name), c_type=c_type)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -39,20 +39,20 @@ def gen_visit_implicit_struct(typ):
 | 
			
		|||
        # Need a forward declaration
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
 | 
			
		||||
static void visit_type_%(c_type)s_fields(Visitor *m, %(c_type)s **obj, Error **errp);
 | 
			
		||||
static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s **obj, Error **errp);
 | 
			
		||||
''',
 | 
			
		||||
                     c_type=typ.c_name())
 | 
			
		||||
 | 
			
		||||
    ret += mcgen('''
 | 
			
		||||
 | 
			
		||||
static void visit_type_implicit_%(c_type)s(Visitor *m, %(c_type)s **obj, Error **errp)
 | 
			
		||||
static void visit_type_implicit_%(c_type)s(Visitor *v, %(c_type)s **obj, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
    visit_start_implicit_struct(m, (void **)obj, sizeof(%(c_type)s), &err);
 | 
			
		||||
    visit_start_implicit_struct(v, (void **)obj, sizeof(%(c_type)s), &err);
 | 
			
		||||
    if (!err) {
 | 
			
		||||
        visit_type_%(c_type)s_fields(m, obj, errp);
 | 
			
		||||
        visit_end_implicit_struct(m, &err);
 | 
			
		||||
        visit_type_%(c_type)s_fields(v, obj, errp);
 | 
			
		||||
        visit_end_implicit_struct(v, &err);
 | 
			
		||||
    }
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ def gen_visit_struct_fields(name, base, members):
 | 
			
		|||
 | 
			
		||||
    ret += mcgen('''
 | 
			
		||||
 | 
			
		||||
static void visit_type_%(c_name)s_fields(Visitor *m, %(c_name)s **obj, Error **errp)
 | 
			
		||||
static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s **obj, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ static void visit_type_%(c_name)s_fields(Visitor *m, %(c_name)s **obj, Error **e
 | 
			
		|||
 | 
			
		||||
    if base:
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
visit_type_implicit_%(c_type)s(m, &(*obj)->%(c_name)s, &err);
 | 
			
		||||
visit_type_implicit_%(c_type)s(v, &(*obj)->%(c_name)s, &err);
 | 
			
		||||
if (err) {
 | 
			
		||||
    goto out;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -91,14 +91,14 @@ if (err) {
 | 
			
		|||
    for memb in members:
 | 
			
		||||
        if memb.optional:
 | 
			
		||||
            ret += mcgen('''
 | 
			
		||||
visit_optional(m, &(*obj)->has_%(c_name)s, "%(name)s", &err);
 | 
			
		||||
visit_optional(v, &(*obj)->has_%(c_name)s, "%(name)s", &err);
 | 
			
		||||
if (!err && (*obj)->has_%(c_name)s) {
 | 
			
		||||
''',
 | 
			
		||||
                         c_name=c_name(memb.name), name=memb.name)
 | 
			
		||||
            push_indent()
 | 
			
		||||
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, "%(name)s", &err);
 | 
			
		||||
visit_type_%(c_type)s(v, &(*obj)->%(c_name)s, "%(name)s", &err);
 | 
			
		||||
''',
 | 
			
		||||
                     c_type=memb.type.c_name(), c_name=c_name(memb.name),
 | 
			
		||||
                     name=memb.name)
 | 
			
		||||
| 
						 | 
				
			
			@ -136,16 +136,16 @@ def gen_visit_struct(name, base, members):
 | 
			
		|||
    # call qapi_free_FOO() to avoid a memory leak of the partial FOO.
 | 
			
		||||
    ret += mcgen('''
 | 
			
		||||
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
    visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
 | 
			
		||||
    visit_start_struct(v, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
 | 
			
		||||
    if (!err) {
 | 
			
		||||
        if (*obj) {
 | 
			
		||||
            visit_type_%(c_name)s_fields(m, obj, errp);
 | 
			
		||||
            visit_type_%(c_name)s_fields(v, obj, errp);
 | 
			
		||||
        }
 | 
			
		||||
        visit_end_struct(m, &err);
 | 
			
		||||
        visit_end_struct(v, &err);
 | 
			
		||||
    }
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -158,26 +158,26 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
def gen_visit_list(name, element_type):
 | 
			
		||||
    return mcgen('''
 | 
			
		||||
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
    GenericList *i, **prev;
 | 
			
		||||
 | 
			
		||||
    visit_start_list(m, name, &err);
 | 
			
		||||
    visit_start_list(v, name, &err);
 | 
			
		||||
    if (err) {
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (prev = (GenericList **)obj;
 | 
			
		||||
         !err && (i = visit_next_list(m, prev, &err)) != NULL;
 | 
			
		||||
         !err && (i = visit_next_list(v, prev, &err)) != NULL;
 | 
			
		||||
         prev = &i) {
 | 
			
		||||
        %(c_name)s *native_i = (%(c_name)s *)i;
 | 
			
		||||
        visit_type_%(c_elt_type)s(m, &native_i->value, NULL, &err);
 | 
			
		||||
        visit_type_%(c_elt_type)s(v, &native_i->value, NULL, &err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
    err = NULL;
 | 
			
		||||
    visit_end_list(m, &err);
 | 
			
		||||
    visit_end_list(v, &err);
 | 
			
		||||
out:
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -188,9 +188,9 @@ out:
 | 
			
		|||
def gen_visit_enum(name):
 | 
			
		||||
    return mcgen('''
 | 
			
		||||
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_name)s *obj, const char *name, Error **errp)
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s *obj, const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    visit_type_enum(m, (int *)obj, %(c_name)s_lookup, "%(name)s", name, errp);
 | 
			
		||||
    visit_type_enum(v, (int *)obj, %(c_name)s_lookup, "%(name)s", name, errp);
 | 
			
		||||
}
 | 
			
		||||
''',
 | 
			
		||||
                 c_name=c_name(name), name=name)
 | 
			
		||||
| 
						 | 
				
			
			@ -199,15 +199,15 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s *obj, const char *name, Error
 | 
			
		|||
def gen_visit_alternate(name, variants):
 | 
			
		||||
    ret = mcgen('''
 | 
			
		||||
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
    visit_start_implicit_struct(m, (void**) obj, sizeof(%(c_name)s), &err);
 | 
			
		||||
    visit_start_implicit_struct(v, (void**) obj, sizeof(%(c_name)s), &err);
 | 
			
		||||
    if (err) {
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
    visit_get_next_type(m, (int*) &(*obj)->kind, %(c_name)s_qtypes, name, &err);
 | 
			
		||||
    visit_get_next_type(v, (int*) &(*obj)->kind, %(c_name)s_qtypes, name, &err);
 | 
			
		||||
    if (err) {
 | 
			
		||||
        goto out_end;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -218,7 +218,7 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
    for var in variants.variants:
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
    case %(case)s:
 | 
			
		||||
        visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, name, &err);
 | 
			
		||||
        visit_type_%(c_type)s(v, &(*obj)->%(c_name)s, name, &err);
 | 
			
		||||
        break;
 | 
			
		||||
''',
 | 
			
		||||
                     case=c_enum_const(variants.tag_member.type.name,
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
out_end:
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
    err = NULL;
 | 
			
		||||
    visit_end_implicit_struct(m, &err);
 | 
			
		||||
    visit_end_implicit_struct(v, &err);
 | 
			
		||||
out:
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -256,11 +256,11 @@ def gen_visit_union(name, base, variants):
 | 
			
		|||
 | 
			
		||||
    ret += mcgen('''
 | 
			
		||||
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    Error *err = NULL;
 | 
			
		||||
 | 
			
		||||
    visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
 | 
			
		||||
    visit_start_struct(v, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
 | 
			
		||||
    if (err) {
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +270,7 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
 | 
			
		||||
    if base:
 | 
			
		||||
        ret += mcgen('''
 | 
			
		||||
        visit_type_%(c_name)s_fields(m, obj, &err);
 | 
			
		||||
        visit_type_%(c_name)s_fields(v, obj, &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out_obj;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -282,11 +282,11 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
        # we pointlessly use a different key for simple unions
 | 
			
		||||
        tag_key = 'type'
 | 
			
		||||
    ret += mcgen('''
 | 
			
		||||
        visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, "%(name)s", &err);
 | 
			
		||||
        visit_type_%(c_type)s(v, &(*obj)->%(c_name)s, "%(name)s", &err);
 | 
			
		||||
        if (err) {
 | 
			
		||||
            goto out_obj;
 | 
			
		||||
        }
 | 
			
		||||
        if (!visit_start_union(m, !!(*obj)->data, &err) || err) {
 | 
			
		||||
        if (!visit_start_union(v, !!(*obj)->data, &err) || err) {
 | 
			
		||||
            goto out_obj;
 | 
			
		||||
        }
 | 
			
		||||
        switch ((*obj)->%(c_name)s) {
 | 
			
		||||
| 
						 | 
				
			
			@ -308,13 +308,13 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
                                       var.name))
 | 
			
		||||
        if simple_union_type:
 | 
			
		||||
            ret += mcgen('''
 | 
			
		||||
            visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, "data", &err);
 | 
			
		||||
            visit_type_%(c_type)s(v, &(*obj)->%(c_name)s, "data", &err);
 | 
			
		||||
''',
 | 
			
		||||
                         c_type=simple_union_type.c_name(),
 | 
			
		||||
                         c_name=c_name(var.name))
 | 
			
		||||
        else:
 | 
			
		||||
            ret += mcgen('''
 | 
			
		||||
            visit_type_implicit_%(c_type)s(m, &(*obj)->%(c_name)s, &err);
 | 
			
		||||
            visit_type_implicit_%(c_type)s(v, &(*obj)->%(c_name)s, &err);
 | 
			
		||||
''',
 | 
			
		||||
                         c_type=var.type.c_name(),
 | 
			
		||||
                         c_name=c_name(var.name))
 | 
			
		||||
| 
						 | 
				
			
			@ -329,11 +329,11 @@ void visit_type_%(c_name)s(Visitor *m, %(c_name)s **obj, const char *name, Error
 | 
			
		|||
out_obj:
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
        err = NULL;
 | 
			
		||||
        visit_end_union(m, !!(*obj)->data, &err);
 | 
			
		||||
        visit_end_union(v, !!(*obj)->data, &err);
 | 
			
		||||
        error_propagate(errp, err);
 | 
			
		||||
        err = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    visit_end_struct(m, &err);
 | 
			
		||||
    visit_end_struct(v, &err);
 | 
			
		||||
out:
 | 
			
		||||
    error_propagate(errp, err);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue