[PATCH wayland] Add "enum" attribute to "arg" elements
spitzak at gmail.com
Mon Apr 27 12:12:42 PDT 2015
On 04/27/2015 12:05 AM, Pekka Paalanen wrote:
>> - From the first definition of an interface, specify how unknown values
>> should be handled. Otherwise users do not expect unknown values to
> The latter case is where you do not want an automatic always-on warning
> or error.
This is no problem. The caller has to do a cast, ie EnumName(43), to get
this value. I am pretty certain users of strongly-typed languages do not
expect a raw 43 to work and are quite willing to do the cast.
I suppose you could purposely prevent the cast from working on "final"
enuerations, but that is usually just frustrating to programmers that
will need it some times, even if they know they are only generating
valid values. In particular it may make it difficult to implement one
api atop another.
> Except if you happen to have an old libwayland which you develop your
> 3rd party app against, for instance because you use a distribution that
> does not include a more recent version yet.
The enum part of the protocol has zero effect on the implementation or
abi of libwayland. At the point functions are called in libwayland they
have already been turned into int/uint.
If the arguments to the C abi were changed to C enums instead of
int/uint it would break things. However I think the proposal is to use
the enums in minimal ways in the C abi.
> Depending on the language, I suppose the breakage could go both ways?
> Is there a language where an enum is not allowed to be implicitly
> converted to a uint or int?
Yes lots of them. However this is irrelevant because the binding code
will be changing them to int/uint in some way. Eventually it has to
stuff the value into the Wayland byte stream and that code certainly
will be thinking about int/uint.
More information about the wayland-devel