From 937daf7d25bb2f23a83bef2c115ddee38631478b Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 14:34:13 -0500 Subject: [PATCH] qapi: Drop dead visitor code related to nested structs Now that we no longer have nested structs to visit, the use of prefix strings is no longer required. Remove the code that is no longer reachable. Backports commit a82b982e2bddf7cd7cb490f83643e952e17d4523 from qemu --- msvc/unicorn/qapi-visit.c | 1 + qemu/scripts/qapi-visit.py | 48 ++++++++++---------------------------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/msvc/unicorn/qapi-visit.c b/msvc/unicorn/qapi-visit.c index dd19f20d..599222dc 100644 --- a/msvc/unicorn/qapi-visit.c +++ b/msvc/unicorn/qapi-visit.c @@ -418,6 +418,7 @@ void visit_type_X86CPUFeatureWordInfo(Visitor *m, X86CPUFeatureWordInfo **obj, c Error *err = NULL; visit_start_struct(m, (void **)obj, "X86CPUFeatureWordInfo", name, sizeof(X86CPUFeatureWordInfo), &err); + if (!err) { if (*obj) { visit_type_X86CPUFeatureWordInfo_fields(m, obj, errp); diff --git a/qemu/scripts/qapi-visit.py b/qemu/scripts/qapi-visit.py index f4132ad4..f90dfcb6 100644 --- a/qemu/scripts/qapi-visit.py +++ b/qemu/scripts/qapi-visit.py @@ -43,50 +43,43 @@ static void visit_type_implicit_%(c_type)s(Visitor *m, %(c_type)s **obj, Error * ''', c_type=type_name(type)) -def generate_visit_struct_fields(name, field_prefix, fn_prefix, members, base = None): +def generate_visit_struct_fields(name, members, base = None): substructs = [] ret = '' - if not fn_prefix: - full_name = name - else: - full_name = "%s_%s" % (name, fn_prefix) if base: ret += generate_visit_implicit_struct(base) ret += mcgen(''' -static void visit_type_%(full_name)s_fields(Visitor *m, %(name)s **obj, Error **errp) +static void visit_type_%(name)s_fields(Visitor *m, %(name)s **obj, Error **errp) { Error *err = NULL; ''', - name=name, full_name=full_name) + name=name) push_indent() if base: ret += mcgen(''' -visit_type_implicit_%(type)s(m, &(*obj)->%(c_prefix)s%(c_name)s, &err); +visit_type_implicit_%(type)s(m, &(*obj)->%(c_name)s, &err); if (err) { goto out; } ''', - c_prefix=c_var(field_prefix), type=type_name(base), c_name=c_var('base')) for argname, argentry, optional in parse_args(members): if optional: ret += mcgen(''' -visit_optional(m, &(*obj)->%(c_prefix)shas_%(c_name)s, "%(name)s", &err); -if (!err && (*obj)->%(prefix)shas_%(c_name)s) { +visit_optional(m, &(*obj)->has_%(c_name)s, "%(name)s", &err); +if (!err && (*obj)->has_%(c_name)s) { ''', - c_prefix=c_var(field_prefix), prefix=field_prefix, c_name=c_var(argname), name=argname) push_indent() ret += mcgen(''' -visit_type_%(type)s(m, &(*obj)->%(c_prefix)s%(c_name)s, "%(name)s", &err); +visit_type_%(type)s(m, &(*obj)->%(c_name)s, "%(name)s", &err); ''', - c_prefix=c_var(field_prefix), prefix=field_prefix, type=type_name(argentry), c_name=c_var(argname), name=argname) @@ -114,29 +107,12 @@ out: return ret -def generate_visit_struct_body(field_prefix, name, members): +def generate_visit_struct_body(name, members): ret = mcgen(''' Error *err = NULL; -''') - - if not field_prefix: - full_name = name - else: - full_name = "%s_%s" % (field_prefix, name) - - if len(field_prefix): - ret += mcgen(''' - visit_start_struct(m, NULL, "", "%(name)s", 0, &err); -''', - name=name) - else: - ret += mcgen(''' visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err); -''', - name=name) - ret += mcgen(''' if (!err) { if (*obj) { visit_type_%(name)s_fields(m, obj, errp); @@ -145,7 +121,7 @@ def generate_visit_struct_body(field_prefix, name, members): } error_propagate(errp, err); ''', - name=full_name) + name=name) return ret @@ -155,7 +131,7 @@ def generate_visit_struct(expr): members = expr['data'] base = expr.get('base') - ret = generate_visit_struct_fields(name, "", "", members, base) + ret = generate_visit_struct_fields(name, members, base) ret += mcgen(''' @@ -164,7 +140,7 @@ void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **e ''', name=name) - ret += generate_visit_struct_body("", name, members) + ret += generate_visit_struct_body(name, members) ret += mcgen(''' } @@ -288,7 +264,7 @@ def generate_visit_union(expr): assert discriminator base_fields = find_struct(base)['data'].copy() del base_fields[discriminator] - ret += generate_visit_struct_fields(name, "", "", base_fields) + ret += generate_visit_struct_fields(name, base_fields) if discriminator: for key in members: