From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43356) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUcGe-0004FG-KN for qemu-devel@nongnu.org; Wed, 26 Aug 2015 11:05:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZUcGa-0002U0-Rg for qemu-devel@nongnu.org; Wed, 26 Aug 2015 11:05:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60873) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUcGa-0002Tv-KJ for qemu-devel@nongnu.org; Wed, 26 Aug 2015 11:05:32 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 3F528550D5 for ; Wed, 26 Aug 2015 15:05:32 +0000 (UTC) From: "Daniel P. Berrange" Date: Wed, 26 Aug 2015 16:05:16 +0100 Message-Id: <1440601524-30316-2-git-send-email-berrange@redhat.com> In-Reply-To: <1440601524-30316-1-git-send-email-berrange@redhat.com> References: <1440601524-30316-1-git-send-email-berrange@redhat.com> Subject: [Qemu-devel] [PATCH v5 1/9] qapi: allow override of default enum prefix naming List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Gerd Hoffmann The camel_to_upper() method applies some heuristics to turn a mixed case type name into an all-uppercase name. This is used for example, to generate enum constant name prefixes. The heuristics don't also generate a satisfactory name though. eg { 'enum': 'QCryptoTLSCredsEndpoint', 'data': ['client', 'server']} Results in Q_CRYPTOTLS_CREDS_ENDPOINT_CLIENT. This has an undesirable _ after the initial Q and is missing an _ betweeen the CRYPTO & TLS strings. Rather than try to add more and more heuristics to try to cope with this, simply allow the QAPI schema to specify the desired enum constant prefix explicitly. eg { 'enum': 'QCryptoTLSCredsEndpoint', 'prefix': 'QCRYPTO_TLS_CREDS_ENDPOINT', 'data': ['client', 'server']} Now gives the QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT name. Signed-off-by: Daniel P. Berrange --- scripts/qapi-types.py | 14 +++++++------- scripts/qapi.py | 9 ++++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py index e6eb4b6..549c2f7 100644 --- a/scripts/qapi-types.py +++ b/scripts/qapi-types.py @@ -103,20 +103,20 @@ struct %(name)s return ret -def generate_enum_lookup(name, values): +def generate_enum_lookup(name, values, prefix=None): ret = mcgen(''' const char * const %(name)s_lookup[] = { ''', name=c_name(name)) i = 0 for value in values: - index = c_enum_const(name, value) + index = c_enum_const(name, value, prefix) ret += mcgen(''' [%(index)s] = "%(value)s", ''', index = index, value = value) - max_index = c_enum_const(name, 'MAX') + max_index = c_enum_const(name, 'MAX', prefix) ret += mcgen(''' [%(max_index)s] = NULL, }; @@ -125,7 +125,7 @@ const char * const %(name)s_lookup[] = { max_index=max_index) return ret -def generate_enum(name, values): +def generate_enum(name, values, prefix=None): name = c_name(name) lookup_decl = mcgen(''' extern const char * const %(name)s_lookup[]; @@ -143,7 +143,7 @@ typedef enum %(name)s i = 0 for value in enum_values: - enum_full_value = c_enum_const(name, value) + enum_full_value = c_enum_const(name, value, prefix) enum_decl += mcgen(''' %(enum_full_value)s = %(i)d, ''', @@ -336,9 +336,9 @@ for expr in exprs: if expr.has_key('struct'): ret += generate_fwd_struct(expr['struct']) elif expr.has_key('enum'): - ret += generate_enum(expr['enum'], expr['data']) + "\n" + ret += generate_enum(expr['enum'], expr['data'], expr.get('prefix')) + "\n" ret += generate_fwd_enum_struct(expr['enum']) - fdef.write(generate_enum_lookup(expr['enum'], expr['data'])) + fdef.write(generate_enum_lookup(expr['enum'], expr['data'], expr.get('prefix'))) elif expr.has_key('union'): ret += generate_fwd_struct(expr['union']) + "\n" enum_define = discriminator_find_enum_define(expr) diff --git a/scripts/qapi.py b/scripts/qapi.py index 06d7fc2..9c1ef36 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -698,7 +698,7 @@ def check_exprs(exprs): expr = expr_elem['expr'] info = expr_elem['info'] if expr.has_key('enum'): - check_keys(expr_elem, 'enum', ['data']) + check_keys(expr_elem, 'enum', ['data'], ['prefix']) add_enum(expr['enum'], info, expr['data']) elif expr.has_key('union'): check_keys(expr_elem, 'union', ['data'], @@ -818,8 +818,11 @@ def camel_to_upper(value): new_name += c return new_name.lstrip('_').upper() -def c_enum_const(type_name, const_name): - return camel_to_upper(type_name + '_' + const_name) +def c_enum_const(type_name, const_name, prefix=None): + if prefix is not None: + return prefix + '_' + camel_to_upper(const_name) + else: + return camel_to_upper(type_name + '_' + const_name) c_name_trans = string.maketrans('.-', '__') -- 2.4.3