|
@@ -69,16 +69,17 @@ def gen_marshal_output_call(name, ret_type):
|
|
return ""
|
|
return ""
|
|
return "qmp_marshal_output_%s(retval, ret, errp);" % c_fun(name)
|
|
return "qmp_marshal_output_%s(retval, ret, errp);" % c_fun(name)
|
|
|
|
|
|
-def gen_visitor_input_containers_decl(args):
|
|
|
|
|
|
+def gen_visitor_input_containers_decl(args, obj):
|
|
ret = ""
|
|
ret = ""
|
|
|
|
|
|
push_indent()
|
|
push_indent()
|
|
if len(args) > 0:
|
|
if len(args) > 0:
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
-QmpInputVisitor *mi;
|
|
|
|
|
|
+QmpInputVisitor *mi = qmp_input_visitor_new_strict(%(obj)s);
|
|
QapiDeallocVisitor *md;
|
|
QapiDeallocVisitor *md;
|
|
Visitor *v;
|
|
Visitor *v;
|
|
-''')
|
|
|
|
|
|
+''',
|
|
|
|
+ obj=obj)
|
|
pop_indent()
|
|
pop_indent()
|
|
|
|
|
|
return ret.rstrip()
|
|
return ret.rstrip()
|
|
@@ -106,7 +107,7 @@ def gen_visitor_input_vars_decl(args):
|
|
pop_indent()
|
|
pop_indent()
|
|
return ret.rstrip()
|
|
return ret.rstrip()
|
|
|
|
|
|
-def gen_visitor_input_block(args, obj, dealloc=False):
|
|
|
|
|
|
+def gen_visitor_input_block(args, dealloc=False):
|
|
ret = ""
|
|
ret = ""
|
|
errparg = 'errp'
|
|
errparg = 'errp'
|
|
|
|
|
|
@@ -118,15 +119,14 @@ def gen_visitor_input_block(args, obj, dealloc=False):
|
|
if dealloc:
|
|
if dealloc:
|
|
errparg = 'NULL'
|
|
errparg = 'NULL'
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
|
|
+qmp_input_visitor_cleanup(mi);
|
|
md = qapi_dealloc_visitor_new();
|
|
md = qapi_dealloc_visitor_new();
|
|
v = qapi_dealloc_get_visitor(md);
|
|
v = qapi_dealloc_get_visitor(md);
|
|
''')
|
|
''')
|
|
else:
|
|
else:
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
-mi = qmp_input_visitor_new_strict(%(obj)s);
|
|
|
|
v = qmp_input_get_visitor(mi);
|
|
v = qmp_input_get_visitor(mi);
|
|
-''',
|
|
|
|
- obj=obj)
|
|
|
|
|
|
+''')
|
|
|
|
|
|
for argname, argtype, optional, structured in parse_args(args):
|
|
for argname, argtype, optional, structured in parse_args(args):
|
|
if optional:
|
|
if optional:
|
|
@@ -151,10 +151,6 @@ def gen_visitor_input_block(args, obj, dealloc=False):
|
|
if dealloc:
|
|
if dealloc:
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
qapi_dealloc_visitor_cleanup(md);
|
|
qapi_dealloc_visitor_cleanup(md);
|
|
-''')
|
|
|
|
- else:
|
|
|
|
- ret += mcgen('''
|
|
|
|
-qmp_input_visitor_cleanup(mi);
|
|
|
|
''')
|
|
''')
|
|
pop_indent()
|
|
pop_indent()
|
|
return ret.rstrip()
|
|
return ret.rstrip()
|
|
@@ -166,8 +162,8 @@ def gen_marshal_output(name, args, ret_type, middle_mode):
|
|
ret = mcgen('''
|
|
ret = mcgen('''
|
|
static void qmp_marshal_output_%(c_name)s(%(c_ret_type)s ret_in, QObject **ret_out, Error **errp)
|
|
static void qmp_marshal_output_%(c_name)s(%(c_ret_type)s ret_in, QObject **ret_out, Error **errp)
|
|
{
|
|
{
|
|
- QapiDeallocVisitor *md = qapi_dealloc_visitor_new();
|
|
|
|
QmpOutputVisitor *mo = qmp_output_visitor_new();
|
|
QmpOutputVisitor *mo = qmp_output_visitor_new();
|
|
|
|
+ QapiDeallocVisitor *md;
|
|
Visitor *v;
|
|
Visitor *v;
|
|
|
|
|
|
v = qmp_output_get_visitor(mo);
|
|
v = qmp_output_get_visitor(mo);
|
|
@@ -176,6 +172,7 @@ def gen_marshal_output(name, args, ret_type, middle_mode):
|
|
*ret_out = qmp_output_get_qobject(mo);
|
|
*ret_out = qmp_output_get_qobject(mo);
|
|
}
|
|
}
|
|
qmp_output_visitor_cleanup(mo);
|
|
qmp_output_visitor_cleanup(mo);
|
|
|
|
+ md = qapi_dealloc_visitor_new();
|
|
v = qapi_dealloc_get_visitor(md);
|
|
v = qapi_dealloc_get_visitor(md);
|
|
%(visitor)s(v, &ret_in, "unused", NULL);
|
|
%(visitor)s(v, &ret_in, "unused", NULL);
|
|
qapi_dealloc_visitor_cleanup(md);
|
|
qapi_dealloc_visitor_cleanup(md);
|
|
@@ -228,9 +225,9 @@ def gen_marshal_input(name, args, ret_type, middle_mode):
|
|
%(visitor_input_block)s
|
|
%(visitor_input_block)s
|
|
|
|
|
|
''',
|
|
''',
|
|
- visitor_input_containers_decl=gen_visitor_input_containers_decl(args),
|
|
|
|
|
|
+ visitor_input_containers_decl=gen_visitor_input_containers_decl(args, "QOBJECT(args)"),
|
|
visitor_input_vars_decl=gen_visitor_input_vars_decl(args),
|
|
visitor_input_vars_decl=gen_visitor_input_vars_decl(args),
|
|
- visitor_input_block=gen_visitor_input_block(args, "QOBJECT(args)"))
|
|
|
|
|
|
+ visitor_input_block=gen_visitor_input_block(args))
|
|
else:
|
|
else:
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
(void)args;
|
|
(void)args;
|
|
@@ -250,7 +247,7 @@ def gen_marshal_input(name, args, ret_type, middle_mode):
|
|
ret += mcgen('''
|
|
ret += mcgen('''
|
|
%(visitor_input_block_cleanup)s
|
|
%(visitor_input_block_cleanup)s
|
|
''',
|
|
''',
|
|
- visitor_input_block_cleanup=gen_visitor_input_block(args, None,
|
|
|
|
|
|
+ visitor_input_block_cleanup=gen_visitor_input_block(args,
|
|
dealloc=True))
|
|
dealloc=True))
|
|
|
|
|
|
if middle_mode:
|
|
if middle_mode:
|