authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-16 12:50:44+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-16 12:50:44+02:00
log6450736c5f9039565802e1f898a8fd402ba12c63
tree4ad8e63b5427adce083836d9beaad8f4b57b264d
parentcb257b4e11768ccce93d7cf11c416fa8e745f206
signature Commit is signed but in an unrecognized format.

translate-c default enum tag type to c_int


2 files changed, 13 insertions(+), 10 deletions(-)

src-self-hosted/translate_c.zig+4-1
...@@ -875,9 +875,12 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No...@@ -875,9 +875,12 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
875 // types, while that's not ISO-C compliant many compilers allow this and875 // types, while that's not ISO-C compliant many compilers allow this and
876 // default to the usual integer type used for all the enums.876 // default to the usual integer type used for all the enums.
877877
878 // default to c_int since msvc and gcc default to different types
878 _ = try appendToken(c, .LParen, "(");879 _ = try appendToken(c, .LParen, "(");
879 container_node.init_arg_expr = .{880 container_node.init_arg_expr = .{
880 .Type = if (int_type.ptr != null)881 .Type = if (int_type.ptr != null and
882 !isCBuiltinType(int_type, .UInt) and
883 !isCBuiltinType(int_type, .Int))
881 transQualType(rp, int_type, enum_loc) catch |err| switch (err) {884 transQualType(rp, int_type, enum_loc) catch |err| switch (err) {
882 error.UnsupportedType => {885 error.UnsupportedType => {
883 try failDecl(c, enum_loc, name, "unable to translate enum tag type", .{});886 try failDecl(c, enum_loc, name, "unable to translate enum tag type", .{});
test/translate_c.zig+9-9
...@@ -1104,7 +1104,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1104,7 +1104,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1104 \\pub const a = @enumToInt(enum_unnamed_1.a);1104 \\pub const a = @enumToInt(enum_unnamed_1.a);
1105 \\pub const b = @enumToInt(enum_unnamed_1.b);1105 \\pub const b = @enumToInt(enum_unnamed_1.b);
1106 \\pub const c = @enumToInt(enum_unnamed_1.c);1106 \\pub const c = @enumToInt(enum_unnamed_1.c);
1107 \\const enum_unnamed_1 = extern enum(c_uint) {1107 \\const enum_unnamed_1 = extern enum(c_int) {
1108 \\ a,1108 \\ a,
1109 \\ b,1109 \\ b,
1110 \\ c,1110 \\ c,
...@@ -1114,7 +1114,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1114,7 +1114,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1114 \\pub const e = @enumToInt(enum_unnamed_2.e);1114 \\pub const e = @enumToInt(enum_unnamed_2.e);
1115 \\pub const f = @enumToInt(enum_unnamed_2.f);1115 \\pub const f = @enumToInt(enum_unnamed_2.f);
1116 \\pub const g = @enumToInt(enum_unnamed_2.g);1116 \\pub const g = @enumToInt(enum_unnamed_2.g);
1117 \\const enum_unnamed_2 = extern enum(c_uint) {1117 \\const enum_unnamed_2 = extern enum(c_int) {
1118 \\ e = 0,1118 \\ e = 0,
1119 \\ f = 4,1119 \\ f = 4,
1120 \\ g = 5,1120 \\ g = 5,
...@@ -1124,7 +1124,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1124,7 +1124,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1124 \\pub const i = @enumToInt(enum_unnamed_3.i);1124 \\pub const i = @enumToInt(enum_unnamed_3.i);
1125 \\pub const j = @enumToInt(enum_unnamed_3.j);1125 \\pub const j = @enumToInt(enum_unnamed_3.j);
1126 \\pub const k = @enumToInt(enum_unnamed_3.k);1126 \\pub const k = @enumToInt(enum_unnamed_3.k);
1127 \\const enum_unnamed_3 = extern enum(c_uint) {1127 \\const enum_unnamed_3 = extern enum(c_int) {
1128 \\ i,1128 \\ i,
1129 \\ j,1129 \\ j,
1130 \\ k,1130 \\ k,
...@@ -1137,7 +1137,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1137,7 +1137,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1137 \\pub const n = @enumToInt(enum_i.n);1137 \\pub const n = @enumToInt(enum_i.n);
1138 \\pub const o = @enumToInt(enum_i.o);1138 \\pub const o = @enumToInt(enum_i.o);
1139 \\pub const p = @enumToInt(enum_i.p);1139 \\pub const p = @enumToInt(enum_i.p);
1140 \\pub const enum_i = extern enum(c_uint) {1140 \\pub const enum_i = extern enum(c_int) {
1141 \\ n,1141 \\ n,
1142 \\ o,1142 \\ o,
1143 \\ p,1143 \\ p,
...@@ -1569,7 +1569,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1569,7 +1569,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1569 , &[_][]const u8{1569 , &[_][]const u8{
1570 \\pub const One = @enumToInt(enum_unnamed_1.One);1570 \\pub const One = @enumToInt(enum_unnamed_1.One);
1571 \\pub const Two = @enumToInt(enum_unnamed_1.Two);1571 \\pub const Two = @enumToInt(enum_unnamed_1.Two);
1572 \\const enum_unnamed_1 = extern enum(c_uint) {1572 \\const enum_unnamed_1 = extern enum(c_int) {
1573 \\ One,1573 \\ One,
1574 \\ Two,1574 \\ Two,
1575 \\ _,1575 \\ _,
...@@ -1672,7 +1672,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1672,7 +1672,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1672 \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);1672 \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);
1673 \\}1673 \\}
1674 , &[_][]const u8{1674 , &[_][]const u8{
1675 \\pub const enum_Foo = extern enum(c_uint) {1675 \\pub const enum_Foo = extern enum(c_int) {
1676 \\ A,1676 \\ A,
1677 \\ B,1677 \\ B,
1678 \\ C,1678 \\ C,
...@@ -1718,7 +1718,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1718,7 +1718,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1718 \\ y: c_int,1718 \\ y: c_int,
1719 \\};1719 \\};
1720 ,1720 ,
1721 \\pub const enum_Bar = extern enum(c_uint) {1721 \\pub const enum_Bar = extern enum(c_int) {
1722 \\ A,1722 \\ A,
1723 \\ B,1723 \\ B,
1724 \\ _,1724 \\ _,
...@@ -1982,7 +1982,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1982,7 +1982,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1982 \\ return 4;1982 \\ return 4;
1983 \\}1983 \\}
1984 , &[_][]const u8{1984 , &[_][]const u8{
1985 \\pub const enum_SomeEnum = extern enum(c_uint) {1985 \\pub const enum_SomeEnum = extern enum(c_int) {
1986 \\ A,1986 \\ A,
1987 \\ B,1987 \\ B,
1988 \\ C,1988 \\ C,
...@@ -2424,7 +2424,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2424,7 +2424,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2424 \\pub const FooA = @enumToInt(enum_Foo.A);2424 \\pub const FooA = @enumToInt(enum_Foo.A);
2425 \\pub const FooB = @enumToInt(enum_Foo.B);2425 \\pub const FooB = @enumToInt(enum_Foo.B);
2426 \\pub const Foo1 = @enumToInt(enum_Foo.@"1");2426 \\pub const Foo1 = @enumToInt(enum_Foo.@"1");
2427 \\pub const enum_Foo = extern enum(c_uint) {2427 \\pub const enum_Foo = extern enum(c_int) {
2428 \\ A = 2,2428 \\ A = 2,
2429 \\ B = 5,2429 \\ B = 5,
2430 \\ @"1" = 6,2430 \\ @"1" = 6,