# See the COPYING file in the top-level directory.
from qapi import *
-import re
def gen_visit_decl(name, scalar=False):
if base:
ret += mcgen('''
visit_type_%(c_type)s_members(v, (%(c_type)s *)obj, &err);
+ if (err) {
+ goto out;
+ }
''',
c_type=base.c_name())
- ret += gen_err_check()
for memb in members:
if memb.optional:
push_indent()
ret += mcgen('''
visit_type_%(c_type)s(v, "%(name)s", &obj->%(c_name)s, &err);
+ if (err) {
+ goto out;
+ }
''',
c_type=memb.type.c_name(), name=memb.name,
c_name=c_name(memb.name))
- ret += gen_err_check()
if memb.optional:
pop_indent()
ret += mcgen('''
}
}
- visit_end_list(v);
+ if (!err) {
+ visit_check_list(v, &err);
+ }
+ visit_end_list(v, (void **)obj);
if (err && visit_is_input(v)) {
qapi_free_%(c_name)s(*obj);
*obj = NULL;
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s *obj, Error **errp)
{
int value = *obj;
- visit_type_enum(v, name, &value, %(c_name)s_lookup, errp);
+ visit_type_enum(v, name, &value, &%(c_name)s_lookup, errp);
*obj = value;
}
''',
def gen_visit_alternate(name, variants):
- promote_int = 'true'
- ret = ''
- for var in variants.variants:
- if var.type.alternate_qtype() == 'QTYPE_QINT':
- promote_int = 'false'
-
- ret += mcgen('''
+ ret = mcgen('''
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error **errp)
{
Error *err = NULL;
visit_start_alternate(v, name, (GenericAlternate **)obj, sizeof(**obj),
- %(promote_int)s, &err);
+ &err);
if (err) {
goto out;
}
}
switch ((*obj)->type) {
''',
- c_name=c_name(name), promote_int=promote_int)
+ c_name=c_name(name))
for var in variants.variants:
ret += mcgen('''
if (!err) {
visit_check_struct(v, &err);
}
- visit_end_struct(v);
+ visit_end_struct(v, NULL);
''',
c_type=var.type.c_name(),
c_name=c_name(var.name))
"%(name)s");
}
out_obj:
- visit_end_alternate(v);
+ visit_end_alternate(v, (void **)obj);
if (err && visit_is_input(v)) {
qapi_free_%(c_name)s(*obj);
*obj = NULL;
}
visit_check_struct(v, &err);
out_obj:
- visit_end_struct(v);
+ visit_end_struct(v, (void **)obj);
if (err && visit_is_input(v)) {
qapi_free_%(c_name)s(*obj);
*obj = NULL;
do_builtins = False
(input_file, output_dir, do_c, do_h, prefix, opts) = \
- parse_command_line("b", ["builtins"])
+ parse_command_line('b', ['builtins'])
for o, a in opts:
- if o in ("-b", "--builtins"):
+ if o in ('-b', '--builtins'):
do_builtins = True
c_comment = '''