| ... | @@ -166,50 +166,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -166,50 +166,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 166 | \\} | 166 | \\} |
| 167 | }); | 167 | }); |
| 168 | | 168 | |
| 169 | cases.add_both("enums", | | |
| 170 | \\enum Foo { | | |
| 171 | \\ FooA, | | |
| 172 | \\ FooB, | | |
| 173 | \\ Foo1, | | |
| 174 | \\}; | | |
| 175 | , &[_][]const u8{ | | |
| 176 | \\pub const enum_Foo = extern enum { | | |
| 177 | \\ A, | | |
| 178 | \\ B, | | |
| 179 | \\ @"1", | | |
| 180 | \\}; | | |
| 181 | , | | |
| 182 | \\pub const FooA = enum_Foo.A; | | |
| 183 | , | | |
| 184 | \\pub const FooB = enum_Foo.B; | | |
| 185 | , | | |
| 186 | \\pub const Foo1 = enum_Foo.@"1"; | | |
| 187 | , | | |
| 188 | \\pub const Foo = enum_Foo; | | |
| 189 | }); | | |
| 190 | | | |
| 191 | cases.add_both("enums", | | |
| 192 | \\enum Foo { | | |
| 193 | \\ FooA = 2, | | |
| 194 | \\ FooB = 5, | | |
| 195 | \\ Foo1, | | |
| 196 | \\}; | | |
| 197 | , &[_][]const u8{ | | |
| 198 | \\pub const enum_Foo = extern enum { | | |
| 199 | \\ A = 2, | | |
| 200 | \\ B = 5, | | |
| 201 | \\ @"1" = 6, | | |
| 202 | \\}; | | |
| 203 | , | | |
| 204 | \\pub const FooA = enum_Foo.A; | | |
| 205 | , | | |
| 206 | \\pub const FooB = enum_Foo.B; | | |
| 207 | , | | |
| 208 | \\pub const Foo1 = enum_Foo.@"1"; | | |
| 209 | , | | |
| 210 | \\pub const Foo = enum_Foo; | | |
| 211 | }); | | |
| 212 | | | |
| 213 | cases.add_both("typedef of function in struct field", | 169 | cases.add_both("typedef of function in struct field", |
| 214 | \\typedef void lws_callback_function(void); | 170 | \\typedef void lws_callback_function(void); |
| 215 | \\struct Foo { | 171 | \\struct Foo { |
| ... | @@ -921,27 +877,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -921,27 +877,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 921 | \\ p, | 877 | \\ p, |
| 922 | \\}; | 878 | \\}; |
| 923 | , &[_][]const u8{ | 879 | , &[_][]const u8{ |
| 924 | \\pub const a = enum_unnamed_1.a; | 880 | \\pub const a = 0; |
| 925 | \\pub const b = enum_unnamed_1.b; | 881 | \\pub const b = 1; |
| 926 | \\pub const c = enum_unnamed_1.c; | 882 | \\pub const c = 2; |
| 927 | \\const enum_unnamed_1 = extern enum { | 883 | \\const enum_unnamed_1 = extern enum { |
| 928 | \\ a, | 884 | \\ a, |
| 929 | \\ b, | 885 | \\ b, |
| 930 | \\ c, | 886 | \\ c, |
| 931 | \\}; | 887 | \\}; |
| 932 | \\pub const d = enum_unnamed_1; | 888 | \\pub const d = enum_unnamed_1; |
| 933 | \\pub const e = enum_unnamed_2.e; | 889 | \\pub const e = 0; |
| 934 | \\pub const f = enum_unnamed_2.f; | 890 | \\pub const f = 4; |
| 935 | \\pub const g = enum_unnamed_2.g; | 891 | \\pub const g = 5; |
| 936 | \\const enum_unnamed_2 = extern enum { | 892 | \\const enum_unnamed_2 = extern enum { |
| 937 | \\ e = 0, | 893 | \\ e = 0, |
| 938 | \\ f = 4, | 894 | \\ f = 4, |
| 939 | \\ g = 5, | 895 | \\ g = 5, |
| 940 | \\}; | 896 | \\}; |
| 941 | \\pub export var h: enum_unnamed_2 = @as(enum_unnamed_2, e); | 897 | \\pub export var h: enum_unnamed_2 = @intToEnum(enum_unnamed_2, e); |
| 942 | \\pub const i = enum_unnamed_3.i; | 898 | \\pub const i = 0; |
| 943 | \\pub const j = enum_unnamed_3.j; | 899 | \\pub const j = 1; |
| 944 | \\pub const k = enum_unnamed_3.k; | 900 | \\pub const k = 2; |
| 945 | \\const enum_unnamed_3 = extern enum { | 901 | \\const enum_unnamed_3 = extern enum { |
| 946 | \\ i, | 902 | \\ i, |
| 947 | \\ j, | 903 | \\ j, |
| ... | @@ -951,9 +907,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -951,9 +907,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 951 | \\ l: enum_unnamed_3, | 907 | \\ l: enum_unnamed_3, |
| 952 | \\ m: d, | 908 | \\ m: d, |
| 953 | \\}; | 909 | \\}; |
| 954 | \\pub const n = enum_i.n; | 910 | \\pub const n = 0; |
| 955 | \\pub const o = enum_i.o; | 911 | \\pub const o = 1; |
| 956 | \\pub const p = enum_i.p; | 912 | \\pub const p = 2; |
| 957 | \\pub const enum_i = extern enum { | 913 | \\pub const enum_i = extern enum { |
| 958 | \\ n, | 914 | \\ n, |
| 959 | \\ o, | 915 | \\ o, |
| ... | @@ -1393,8 +1349,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1393,8 +1349,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1393 | \\ Two, | 1349 | \\ Two, |
| 1394 | \\}; | 1350 | \\}; |
| 1395 | , &[_][]const u8{ | 1351 | , &[_][]const u8{ |
| 1396 | \\pub const One = enum_unnamed_1.One; | 1352 | \\pub const One = 0; |
| 1397 | \\pub const Two = enum_unnamed_1.Two; | 1353 | \\pub const Two = 1; |
| 1398 | \\const enum_unnamed_1 = extern enum { | 1354 | \\const enum_unnamed_1 = extern enum { |
| 1399 | \\ One, | 1355 | \\ One, |
| 1400 | \\ Two, | 1356 | \\ Two, |
| ... | @@ -1496,9 +1452,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1496,9 +1452,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1496 | \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p); | 1452 | \\ return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p); |
| 1497 | \\} | 1453 | \\} |
| 1498 | , &[_][]const u8{ | 1454 | , &[_][]const u8{ |
| 1499 | \\pub const FooA = enum_Foo.A; | | |
| 1500 | \\pub const FooB = enum_Foo.B; | | |
| 1501 | \\pub const FooC = enum_Foo.C; | | |
| 1502 | \\pub const enum_Foo = extern enum { | 1455 | \\pub const enum_Foo = extern enum { |
| 1503 | \\ A, | 1456 | \\ A, |
| 1504 | \\ B, | 1457 | \\ B, |
| ... | @@ -1509,7 +1462,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1509,7 +1462,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1509 | \\ var a = _arg_a; | 1462 | \\ var a = _arg_a; |
| 1510 | \\ var b = _arg_b; | 1463 | \\ var b = _arg_b; |
| 1511 | \\ var c = _arg_c; | 1464 | \\ var c = _arg_c; |
| 1512 | \\ var d: enum_Foo = @as(enum_Foo, FooA); | 1465 | \\ var d: enum_Foo = @intToEnum(enum_Foo, FooA); |
| 1513 | \\ var e: c_int = @boolToInt(((a != 0) and (b != 0))); | 1466 | \\ var e: c_int = @boolToInt(((a != 0) and (b != 0))); |
| 1514 | \\ var f: c_int = @boolToInt(((b != 0) and (c != null))); | 1467 | \\ var f: c_int = @boolToInt(((b != 0) and (c != null))); |
| 1515 | \\ var g: c_int = @boolToInt(((a != 0) and (c != null))); | 1468 | \\ var g: c_int = @boolToInt(((a != 0) and (c != null))); |
| ... | @@ -1543,8 +1496,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1543,8 +1496,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1543 | \\ x: c_int, | 1496 | \\ x: c_int, |
| 1544 | \\ y: c_int, | 1497 | \\ y: c_int, |
| 1545 | \\}; | 1498 | \\}; |
| 1546 | \\pub const BarA = enum_Bar.A; | 1499 | , |
| 1547 | \\pub const BarB = enum_Bar.B; | | |
| 1548 | \\pub const enum_Bar = extern enum { | 1500 | \\pub const enum_Bar = extern enum { |
| 1549 | \\ A, | 1501 | \\ A, |
| 1550 | \\ B, | 1502 | \\ B, |
| ... | @@ -1746,9 +1698,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1746,9 +1698,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1746 | \\ return 4; | 1698 | \\ return 4; |
| 1747 | \\} | 1699 | \\} |
| 1748 | , &[_][]const u8{ | 1700 | , &[_][]const u8{ |
| 1749 | \\pub const A = enum_SomeEnum.A; | | |
| 1750 | \\pub const B = enum_SomeEnum.B; | | |
| 1751 | \\pub const C = enum_SomeEnum.C; | | |
| 1752 | \\pub const enum_SomeEnum = extern enum { | 1701 | \\pub const enum_SomeEnum = extern enum { |
| 1753 | \\ A, | 1702 | \\ A, |
| 1754 | \\ B, | 1703 | \\ B, |
| ... | @@ -1863,26 +1812,26 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -1863,26 +1812,26 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1863 | \\ i -= 1; | 1812 | \\ i -= 1; |
| 1864 | \\ u +%= 1; | 1813 | \\ u +%= 1; |
| 1865 | \\ u -%= 1; | 1814 | \\ u -%= 1; |
| 1866 | \\ i = blk: { | 1815 | \\ i = (blk: { |
| 1867 | \\ const _ref_1 = &i; | 1816 | \\ const _ref_1 = &i; |
| 1868 | \\ _ref_1.* += 1; | 1817 | \\ _ref_1.* += 1; |
| 1869 | \\ break :blk _ref_1.*; | 1818 | \\ break :blk _ref_1.*; |
| 1870 | \\ }; | 1819 | \\ }); |
| 1871 | \\ i = blk: { | 1820 | \\ i = (blk: { |
| 1872 | \\ const _ref_2 = &i; | 1821 | \\ const _ref_2 = &i; |
| 1873 | \\ _ref_2.* -= 1; | 1822 | \\ _ref_2.* -= 1; |
| 1874 | \\ break :blk _ref_2.*; | 1823 | \\ break :blk _ref_2.*; |
| 1875 | \\ }; | 1824 | \\ }); |
| 1876 | \\ u = blk: { | 1825 | \\ u = (blk: { |
| 1877 | \\ const _ref_3 = &u; | 1826 | \\ const _ref_3 = &u; |
| 1878 | \\ _ref_3.* +%= 1; | 1827 | \\ _ref_3.* +%= 1; |
| 1879 | \\ break :blk _ref_3.*; | 1828 | \\ break :blk _ref_3.*; |
| 1880 | \\ }; | 1829 | \\ }); |
| 1881 | \\ u = blk: { | 1830 | \\ u = (blk: { |
| 1882 | \\ const _ref_4 = &u; | 1831 | \\ const _ref_4 = &u; |
| 1883 | \\ _ref_4.* -%= 1; | 1832 | \\ _ref_4.* -%= 1; |
| 1884 | \\ break :blk _ref_4.*; | 1833 | \\ break :blk _ref_4.*; |
| 1885 | \\ }; | 1834 | \\ }); |
| 1886 | \\} | 1835 | \\} |
| 1887 | }); | 1836 | }); |
| 1888 | | 1837 | |
| ... | @@ -2062,30 +2011,30 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -2062,30 +2011,30 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2062 | \\ i -= 1; | 2011 | \\ i -= 1; |
| 2063 | \\ u +%= 1; | 2012 | \\ u +%= 1; |
| 2064 | \\ u -%= 1; | 2013 | \\ u -%= 1; |
| 2065 | \\ i = blk: { | 2014 | \\ i = (blk: { |
| 2066 | \\ const _ref_1 = &i; | 2015 | \\ const _ref_1 = &i; |
| 2067 | \\ const _tmp_2 = _ref_1.*; | 2016 | \\ const _tmp_2 = _ref_1.*; |
| 2068 | \\ _ref_1.* += 1; | 2017 | \\ _ref_1.* += 1; |
| 2069 | \\ break :blk _tmp_2; | 2018 | \\ break :blk _tmp_2; |
| 2070 | \\ }; | 2019 | \\ }); |
| 2071 | \\ i = blk: { | 2020 | \\ i = (blk: { |
| 2072 | \\ const _ref_3 = &i; | 2021 | \\ const _ref_3 = &i; |
| 2073 | \\ const _tmp_4 = _ref_3.*; | 2022 | \\ const _tmp_4 = _ref_3.*; |
| 2074 | \\ _ref_3.* -= 1; | 2023 | \\ _ref_3.* -= 1; |
| 2075 | \\ break :blk _tmp_4; | 2024 | \\ break :blk _tmp_4; |
| 2076 | \\ }; | 2025 | \\ }); |
| 2077 | \\ u = blk: { | 2026 | \\ u = (blk: { |
| 2078 | \\ const _ref_5 = &u; | 2027 | \\ const _ref_5 = &u; |
| 2079 | \\ const _tmp_6 = _ref_5.*; | 2028 | \\ const _tmp_6 = _ref_5.*; |
| 2080 | \\ _ref_5.* +%= 1; | 2029 | \\ _ref_5.* +%= 1; |
| 2081 | \\ break :blk _tmp_6; | 2030 | \\ break :blk _tmp_6; |
| 2082 | \\ }; | 2031 | \\ }); |
| 2083 | \\ u = blk: { | 2032 | \\ u = (blk: { |
| 2084 | \\ const _ref_7 = &u; | 2033 | \\ const _ref_7 = &u; |
| 2085 | \\ const _tmp_8 = _ref_7.*; | 2034 | \\ const _tmp_8 = _ref_7.*; |
| 2086 | \\ _ref_7.* -%= 1; | 2035 | \\ _ref_7.* -%= 1; |
| 2087 | \\ break :blk _tmp_8; | 2036 | \\ break :blk _tmp_8; |
| 2088 | \\ }; | 2037 | \\ }); |
| 2089 | \\} | 2038 | \\} |
| 2090 | }); | 2039 | }); |
| 2091 | | 2040 | |
| ... | @@ -2172,6 +2121,58 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -2172,6 +2121,58 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2172 | \\pub const FOO_CHAR = '\x3f'; | 2121 | \\pub const FOO_CHAR = '\x3f'; |
| 2173 | }); | 2122 | }); |
| 2174 | | 2123 | |
| | 2124 | cases.add_2("enums", |
| | 2125 | \\enum Foo { |
| | 2126 | \\ FooA, |
| | 2127 | \\ FooB, |
| | 2128 | \\ Foo1, |
| | 2129 | \\}; |
| | 2130 | , &[_][]const u8{ |
| | 2131 | \\pub const enum_Foo = extern enum { |
| | 2132 | \\ A, |
| | 2133 | \\ B, |
| | 2134 | \\ @"1", |
| | 2135 | \\}; |
| | 2136 | , |
| | 2137 | \\pub const FooA = 0; |
| | 2138 | , |
| | 2139 | \\pub const FooB = 1; |
| | 2140 | , |
| | 2141 | \\pub const Foo1 = 2; |
| | 2142 | , |
| | 2143 | \\pub const Foo = enum_Foo; |
| | 2144 | }); |
| | 2145 | |
| | 2146 | cases.add_2("enums", |
| | 2147 | \\enum Foo { |
| | 2148 | \\ FooA = 2, |
| | 2149 | \\ FooB = 5, |
| | 2150 | \\ Foo1, |
| | 2151 | \\}; |
| | 2152 | , &[_][]const u8{ |
| | 2153 | \\pub const enum_Foo = extern enum { |
| | 2154 | \\ A = 2, |
| | 2155 | \\ B = 5, |
| | 2156 | \\ @"1" = 6, |
| | 2157 | \\}; |
| | 2158 | , |
| | 2159 | \\pub const FooA = 2; |
| | 2160 | , |
| | 2161 | \\pub const FooB = 5; |
| | 2162 | , |
| | 2163 | \\pub const Foo1 = 6; |
| | 2164 | , |
| | 2165 | \\pub const Foo = enum_Foo; |
| | 2166 | }); |
| | 2167 | |
| | 2168 | cases.add_2("macro cast", |
| | 2169 | \\#define FOO(bar) baz((void *)(baz)) |
| | 2170 | , &[_][]const u8{ |
| | 2171 | \\pub inline fn FOO(bar: var) @TypeOf(baz(if (@typeId(@TypeOf(baz)) == .Pointer) @ptrCast([*c]void, baz) else if (@typeId(@TypeOf(baz)) == .Int) @intToPtr([*c]void, baz) else @as([*c]void, baz))) { |
| | 2172 | \\ return baz(if (@typeId(@TypeOf(baz)) == .Pointer) @ptrCast([*c]void, baz) else if (@typeId(@TypeOf(baz)) == .Int) @intToPtr([*c]void, baz) else @as([*c]void, baz)); |
| | 2173 | \\} |
| | 2174 | }); |
| | 2175 | |
| 2175 | /////////////// Cases for only stage1 because stage2 behavior is better //////////////// | 2176 | /////////////// Cases for only stage1 because stage2 behavior is better //////////////// |
| 2176 | cases.addC("Parameterless function prototypes", | 2177 | cases.addC("Parameterless function prototypes", |
| 2177 | \\void foo() {} | 2178 | \\void foo() {} |
| ... | @@ -3124,4 +3125,48 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -3124,4 +3125,48 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3124 | , | 3125 | , |
| 3125 | \\pub const FOO_CHAR = 63; | 3126 | \\pub const FOO_CHAR = 63; |
| 3126 | }); | 3127 | }); |
| | 3128 | |
| | 3129 | cases.add("enums", |
| | 3130 | \\enum Foo { |
| | 3131 | \\ FooA, |
| | 3132 | \\ FooB, |
| | 3133 | \\ Foo1, |
| | 3134 | \\}; |
| | 3135 | , &[_][]const u8{ |
| | 3136 | \\pub const enum_Foo = extern enum { |
| | 3137 | \\ A, |
| | 3138 | \\ B, |
| | 3139 | \\ @"1", |
| | 3140 | \\}; |
| | 3141 | , |
| | 3142 | \\pub const FooA = enum_Foo.A; |
| | 3143 | , |
| | 3144 | \\pub const FooB = enum_Foo.B; |
| | 3145 | , |
| | 3146 | \\pub const Foo1 = enum_Foo.@"1"; |
| | 3147 | , |
| | 3148 | \\pub const Foo = enum_Foo; |
| | 3149 | }); |
| | 3150 | |
| | 3151 | cases.add("enums", |
| | 3152 | \\enum Foo { |
| | 3153 | \\ FooA = 2, |
| | 3154 | \\ FooB = 5, |
| | 3155 | \\ Foo1, |
| | 3156 | \\}; |
| | 3157 | , &[_][]const u8{ |
| | 3158 | \\pub const enum_Foo = extern enum { |
| | 3159 | \\ A = 2, |
| | 3160 | \\ B = 5, |
| | 3161 | \\ @"1" = 6, |
| | 3162 | \\}; |
| | 3163 | , |
| | 3164 | \\pub const FooA = enum_Foo.A; |
| | 3165 | , |
| | 3166 | \\pub const FooB = enum_Foo.B; |
| | 3167 | , |
| | 3168 | \\pub const Foo1 = enum_Foo.@"1"; |
| | 3169 | , |
| | 3170 | \\pub const Foo = enum_Foo; |
| | 3171 | }); |
| 3127 | } | 3172 | } |