summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorWenchao Xia <wenchaoqemu@gmail.com>2014-03-04 18:44:40 -0800
committerLuiz Capitulino <lcapitulino@redhat.com>2014-03-11 09:07:42 -0400
commit5d371f41b4db8e47c89626ecf9d9914119583e23 (patch)
treeab8fa3a72976eb570eeb59e77ec56cf29d216409 /scripts
parent5223070c47c6fc35ee000b2392ae76d9fab54f16 (diff)
downloadqemu-5d371f41b4db8e47c89626ecf9d9914119583e23.tar.gz
qemu-5d371f41b4db8e47c89626ecf9d9914119583e23.tar.bz2
qemu-5d371f41b4db8e47c89626ecf9d9914119583e23.zip
qapi script: do not add "_" for every capitalized char in enum
Now "enum AIOContext" will generate AIO_CONTEXT instead of A_I_O_CONTEXT, "X86CPU" will generate X86_CPU instead of X86_C_P_U. Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py
index bd00d01c0f..b474c39558 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -498,17 +498,29 @@ def guardend(name):
''',
name=guardname(name))
-def _generate_enum_value_string(value):
+# ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
+# ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
+# ENUM24_Name -> ENUM24_NAME
+def _generate_enum_string(value):
+ c_fun_str = c_fun(value, False)
if value.isupper():
- return c_fun(value, False)
+ return c_fun_str
+
new_name = ''
- for c in c_fun(value, False):
- if c.isupper():
- new_name += '_'
+ l = len(c_fun_str)
+ for i in range(l):
+ c = c_fun_str[i]
+ # When c is upper and no "_" appears before, do more checks
+ if c.isupper() and (i > 0) and c_fun_str[i - 1] != "_":
+ # Case 1: next string is lower
+ # Case 2: previous string is digit
+ if (i < (l - 1) and c_fun_str[i + 1].islower()) or \
+ c_fun_str[i - 1].isdigit():
+ new_name += '_'
new_name += c
return new_name.lstrip('_').upper()
def generate_enum_full_value(enum_name, enum_value):
- abbrev_string = de_camel_case(enum_name).upper()
- value_string = _generate_enum_value_string(enum_value)
+ abbrev_string = _generate_enum_string(enum_name)
+ value_string = _generate_enum_string(enum_value)
return "%s_%s" % (abbrev_string, value_string)