[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 28/54] qapi: do not define enumeration value
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH v2 28/54] qapi: do not define enumeration value explicitely |
Date: |
Wed, 6 Sep 2017 08:09:26 -0400 (EDT) |
----- Original Message -----
> Marc-André Lureau <address@hidden> writes:
>
> > The C standard has the initial value at 0 and the subsequent values
> > incremented by 1. No need to set this explicitely.
> >
> > This will prevent from artificial "gaps" when compiling out some enum
> > values and having unnecessarily large MAX values & enums arrays.
>
> Yes, but it also risks entertaining mishaps like compiling this one
>
> typedef enum Color {
> COLOR_WHITE,
> #if defined(NEED_CPU_H)
> #if defined(TARGET_S390X)
> COLOR_BLUE,
> #endif /* defined(TARGET_S390X) */
> #endif /* defined(NEED_CPU_H) */
> COLOR_BLACK,
> } Color;
>
> in s390x-code (COLOR_BLACK = 2) and in target-independent code
> (COLOR_BLACK = 1), then linking the two together.
This is also true with other kind of types, like struct.
One of the main reason why we should have schemas for target-only and the
NEED_CPU_H is a temporary working hack.
>
> > Signed-off-by: Marc-André Lureau <address@hidden>
> > ---
> > scripts/qapi.py | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/scripts/qapi.py b/scripts/qapi.py
> > index 52099332f1..9d075440d3 100644
> > --- a/scripts/qapi.py
> > +++ b/scripts/qapi.py
> > @@ -1979,14 +1979,11 @@ typedef enum %(c_name)s {
> > ''',
> > c_name=c_name(name))
> >
> > - i = 0
> > for value in enum_values:
> > ret += mcgen('''
> > - %(c_enum)s = %(i)d,
> > + %(c_enum)s,
> > ''',
> > - c_enum=c_enum_const(name, value, prefix),
> > - i=i)
> > - i += 1
> > + c_enum=c_enum_const(name, value, prefix))
> >
> > ret += mcgen('''
> > } %(c_name)s;
>