Wenchao Xia <xiaw...@linux.vnet.ibm.com> writes: > 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 <xiaw...@linux.vnet.ibm.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- > include/qapi/qmp/qerror.h | 2 +- > scripts/qapi.py | 26 +++++++++++++++++++------- > target-i386/cpu.c | 2 +- > 3 files changed, 21 insertions(+), 9 deletions(-) > > diff --git a/include/qapi/qmp/qerror.h b/include/qapi/qmp/qerror.h > index 73c67b7..78db342 100644 > --- a/include/qapi/qmp/qerror.h > +++ b/include/qapi/qmp/qerror.h > @@ -159,7 +159,7 @@ void qerror_report_err(Error *err); > ERROR_CLASS_GENERIC_ERROR, "Invalid JSON syntax" > > #define QERR_KVM_MISSING_CAP \ > - ERROR_CLASS_K_V_M_MISSING_CAP, "Using KVM without %s, %s unavailable" > + ERROR_CLASS_KVM_MISSING_CAP, "Using KVM without %s, %s unavailable" > > #define QERR_MIGRATION_ACTIVE \ > ERROR_CLASS_GENERIC_ERROR, "There's a migration process in progress" > diff --git a/scripts/qapi.py b/scripts/qapi.py > index c3c118b..548d559 100644 > --- a/scripts/qapi.py > +++ b/scripts/qapi.py > @@ -485,19 +485,31 @@ 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] != "_":
c_fun_str[i - 1]... what if i == 0? > + # 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_string(enum_name, enum_value): > # generate abbrev string > - abbrev_string = de_camel_case(enum_name).upper() > + abbrev_string = _generate_enum_string(enum_name) > # generate value string > - value_string = _generate_enum_value_string(enum_value) > + value_string = _generate_enum_string(enum_value) > return "%s_%s" % (abbrev_string, value_string) > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 0e8812a..c83ab0f 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -315,7 +315,7 @@ typedef struct X86RegisterInfo32 { > } X86RegisterInfo32; > > #define REGISTER(reg) \ > - [R_##reg] = { .name = #reg, .qapi_enum = X86_C_P_U_REGISTER32_##reg } > + [R_##reg] = { .name = #reg, .qapi_enum = X86_CPU_REGISTER32_##reg } > X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = { > REGISTER(EAX), > REGISTER(ECX),