qemu-devel
[Top][All Lists]
Advanced

[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;
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]