[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 2/3] qapi: Do not generate empty enum
From: |
Markus Armbruster |
Subject: |
Re: [PATCH v3 2/3] qapi: Do not generate empty enum |
Date: |
Tue, 21 Mar 2023 20:00:25 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) |
Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> Can we meet half-way only generating the MAX definitions for
> unconditional enums, keeping the conditional ones as is?
>
> -- >8 --
> diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
> @@ -88,16 +88,18 @@ def gen_enum(name: str,
> members: List[QAPISchemaEnumMember],
> prefix: Optional[str] = None) -> str:
> assert members
> - # append automatically generated _MAX value
> - enum_members = members + [QAPISchemaEnumMember('_MAX', None)]
> -
> ret = mcgen('''
>
> typedef enum %(c_name)s {
> ''',
> c_name=c_name(name))
>
> - for memb in enum_members:
> + has_cond = any(memb.ifcond.is_present() for memb in members)
> + if has_cond:
> + # append automatically generated _MAX value
> + members += [QAPISchemaEnumMember('_MAX', None)]
> +
> + for memb in members:
> ret += memb.ifcond.gen_if()
> ret += mcgen('''
> %(c_enum)s,
> @@ -105,6 +107,13 @@ def gen_enum(name: str,
> c_enum=c_enum_const(name, memb.name, prefix))
> ret += memb.ifcond.gen_endif()
>
> + if not has_cond:
> + ret += mcgen('''
> +#define %(c_name)s %(c_length)s
> +''',
> + c_name=c_enum_const(name, '_MAX', prefix),
> + c_length=len(members))
> +
> ret += mcgen('''
> } %(c_name)s;
> ''',
> ---
I doubt the benefit "we need a silly case FOO__MAX only sometimes" is
worth the special case.
We could generate something like
#if [last_member's condition]
#define FOO__MAX (FOO_last_member + 1)
#elif [second_to_last_member's condition]
#define FOO__MAX (FOO_second_to_last_member + 1)
...
#else
#define FOO__MAX (FOO_last_unconditional_member + 1)
#endif
but whether that is worth the additional complexity seems doubtful, too.
- [PATCH v3 2/3] qapi: Do not generate empty enum, (continued)
- [PATCH v3 2/3] qapi: Do not generate empty enum, Philippe Mathieu-Daudé, 2023/03/15
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Richard Henderson, 2023/03/15
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Markus Armbruster, 2023/03/16
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Markus Armbruster, 2023/03/16
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Philippe Mathieu-Daudé, 2023/03/21
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Daniel P . Berrangé, 2023/03/21
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum, Philippe Mathieu-Daudé, 2023/03/21
- Re: [PATCH v3 2/3] qapi: Do not generate empty enum,
Markus Armbruster <=
[PATCH v3 3/3] qapi: Generate enum count as definition, Philippe Mathieu-Daudé, 2023/03/15