-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
acceptedThis proposal is planned.This proposal is planned.breakingImplementing this issue could cause existing code to no longer compile or have different behavior.Implementing this issue could cause existing code to no longer compile or have different behavior.proposalThis issue suggests modifications. If it also has the "accepted" label then it is planned.This issue suggests modifications. If it also has the "accepted" label then it is planned.
Milestone
Description
@andrewrk: I re-opened this to propose reversing the decision
A C enum allows multiple values. e.g.
enum Foo {
OPTION1 = 0,
OPTION2 = 1,
DEFAULT = OPTION1,
};However, zig extern enum's do not (note: we cannot declare a member based on another member, another possibly improvement)
const Foo = extern enum {
Option1 = 0,
Option2 = 1,
Default = 0,
};
test "asd" {
const a = Foo.Default;
}Fails with compilation
/tmp/t.zig:4:15: error: enum tag value 0 already taken
Default = 0,
^
/tmp/t.zig:2:15: note: other occurrence here
Option1 = 0,
^
We should allow extern enums to have the same tag value for multiple members. The specific use-case here would be for translate-c. Encountered this when trying to process gmp.h which has this enum present:
/* Available random number generation algorithms. */
typedef enum
{
GMP_RAND_ALG_DEFAULT = 0,
GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */
} gmp_randalg_t;Alternatively for translate-c enums could be translated as sets of constants but this feels wrong. There are possibly some questions regarding switch cases and handling of duplicate values there that I haven't considered.
nrdmn, Miniwoffer, gruebite, svercl, GalaxySnail and 1 more16hournaps
Metadata
Metadata
Assignees
Labels
acceptedThis proposal is planned.This proposal is planned.breakingImplementing this issue could cause existing code to no longer compile or have different behavior.Implementing this issue could cause existing code to no longer compile or have different behavior.proposalThis issue suggests modifications. If it also has the "accepted" label then it is planned.This issue suggests modifications. If it also has the "accepted" label then it is planned.