[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 1/9] qapi: allow override of default enum prefix
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PATCH v5 1/9] qapi: allow override of default enum prefix naming |
Date: |
Wed, 26 Aug 2015 16:05:16 +0100 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH v5 0/9] Extract TLS handling code from VNC server, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 2/9] make: ensure all members of libqemuutil.a are linked, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 3/9] crypto: introduce new base module for TLS credentials, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 1/9] qapi: allow override of default enum prefix naming,
Daniel P. Berrange <=
- [Qemu-devel] [PATCH v5 5/9] crypto: introduce new module for TLS x509 credentials, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 8/9] ui: fix return type for VNC I/O functions to be ssize_t, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 4/9] crypto: introduce new module for TLS anonymous credentials, Daniel P. Berrange, 2015/08/26
- [Qemu-devel] [PATCH v5 7/9] crypto: introduce new module for handling TLS sessions, Daniel P. Berrange, 2015/08/26