From 2dcd6722fabdf5cbb7b87c18fc18e98e070cd8ee Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 15:09:04 -0500 Subject: [PATCH] qapi: Support downstream alternates Enhance the testsuite to cover downstream alternates, including whether the branch name or type is downstream. Update the generator to mangle alternate names in the appropriate places. Backports commit d1f07c86c05706facf950b0b0dba370f71fd5ef6 from qemu --- qemu/scripts/qapi-types.py | 10 +++++----- qemu/scripts/qapi-visit.py | 6 +++--- qemu/scripts/qapi.py | 11 ----------- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/qemu/scripts/qapi-types.py b/qemu/scripts/qapi-types.py index 741cc326..1364035e 100644 --- a/qemu/scripts/qapi-types.py +++ b/qemu/scripts/qapi-types.py @@ -163,18 +163,18 @@ def generate_alternate_qtypes(expr): ret = mcgen(''' const int %(name)s_qtypes[QTYPE_MAX] = { ''', - name=name) + name=c_name(name)) for key in members: qtype = find_alternate_member_qtype(members[key]) assert qtype, "Invalid alternate member" ret += mcgen(''' - [ %(qtype)s ] = %(abbrev)s_KIND_%(enum)s, + [%(qtype)s] = %(enum_const)s, ''', - qtype = qtype, - abbrev = de_camel_case(name).upper(), - enum = c_name(de_camel_case(key),False).upper()) + qtype = qtype, + enum_const = c_enum_const(name + 'Kind', key)) + ret += mcgen(''' }; diff --git a/qemu/scripts/qapi-visit.py b/qemu/scripts/qapi-visit.py index 589f2d67..947b56e3 100644 --- a/qemu/scripts/qapi-visit.py +++ b/qemu/scripts/qapi-visit.py @@ -203,11 +203,11 @@ void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **e } switch ((*obj)->kind) { ''', - name=name) + name=c_name(name)) # For alternate, always use the default enum type automatically generated - # as "'%sKind' % (name)" - disc_type = '%sKind' % (name) + # as name + 'Kind' + disc_type = c_name(name) + 'Kind' for key in members: assert (members[key] in builtin_types.keys() diff --git a/qemu/scripts/qapi.py b/qemu/scripts/qapi.py index cc009dc1..2b053db5 100644 --- a/qemu/scripts/qapi.py +++ b/qemu/scripts/qapi.py @@ -728,17 +728,6 @@ def parse_args(typeinfo): # value of an optional argument. yield (argname, argentry, optional) -def de_camel_case(name): - new_name = '' - for ch in name: - if ch.isupper() and new_name: - new_name += '_' - if ch == '-': - new_name += '_' - else: - new_name += ch.lower() - return new_name - def camel_case(name): new_name = '' first = True