diff options
| author | freakmangd <53349189+freakmangd@users.noreply.github.com> | 2024-06-05 16:06:51 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-05 23:06:51 +0300 |
| commit | 9bbfb09fc33366bff0a53c02cd78bdd14bed9f9b (patch) | |
| tree | 4808fb1d3e1392b6f1c910b8d83a6d7b84c5193d /test | |
| parent | 8f27fdb84e3788bf6ea9ae7c992f3cf667a4f9ed (diff) | |
| download | zig-9bbfb09fc33366bff0a53c02cd78bdd14bed9f9b.tar.gz zig-9bbfb09fc33366bff0a53c02cd78bdd14bed9f9b.zip | |
translate-c: promote macros that reference var decls to inline functions
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases/translate_c/macro_referencing_var.c | 21 | ||||
| -rw-r--r-- | test/translate_c.zig | 28 |
2 files changed, 42 insertions, 7 deletions
diff --git a/test/cases/translate_c/macro_referencing_var.c b/test/cases/translate_c/macro_referencing_var.c new file mode 100644 index 0000000000..5675d06eda --- /dev/null +++ b/test/cases/translate_c/macro_referencing_var.c @@ -0,0 +1,21 @@ +extern float foo; +#define FOO_TWICE foo * 2.0f +#define FOO_NEGATIVE -foo + +#define BAR 10.0f +#define BAR_TWICE BAR * 2.0f + +// translate-c +// c_frontend=clang +// +// pub extern var foo: f32; +// +// pub inline fn FOO_TWICE() @TypeOf(foo * @as(f32, 2.0)) { +// return foo * @as(f32, 2.0); +// } +// +// pub inline fn FOO_NEGATIVE() @TypeOf(-foo) { +// return -foo; +// } +// pub const BAR = @as(f32, 10.0); +// pub const BAR_TWICE = BAR * @as(f32, 2.0); diff --git a/test/translate_c.zig b/test/translate_c.zig index 890f93a106..c07b29f772 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -223,7 +223,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ | (*((unsigned char *)(p) + 1) << 8) \ \\ | (*((unsigned char *)(p) + 2) << 16)) , &[_][]const u8{ - \\pub const FOO = (foo + @as(c_int, 2)).*; + \\pub inline fn FOO() @TypeOf((foo + @as(c_int, 2)).*) { + \\ return (foo + @as(c_int, 2)).*; + \\} , \\pub const VALUE = ((((@as(c_int, 1) + (@as(c_int, 2) * @as(c_int, 3))) + (@as(c_int, 4) * @as(c_int, 5))) + @as(c_int, 6)) << @as(c_int, 7)) | @intFromBool(@as(c_int, 8) == @as(c_int, 9)); , @@ -452,7 +454,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\#define FOO -\ \\BAR , &[_][]const u8{ - \\pub const FOO = -BAR; + \\pub inline fn FOO() @TypeOf(-BAR) { + \\ return -BAR; + \\} }); cases.add("struct with atomic field", @@ -2453,9 +2457,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ _ = c.*.b; \\} , - \\pub const DOT = a.b; + \\pub inline fn ARROW() @TypeOf(a.*.b) { + \\ return a.*.b; + \\} , - \\pub const ARROW = a.*.b; + \\pub inline fn DOT() @TypeOf(a.b) { + \\ return a.b; + \\} }); cases.add("array access", @@ -2472,7 +2480,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ return array[@as(c_uint, @intCast(index))]; \\} , - \\pub const ACCESS = array[@as(usize, @intCast(@as(c_int, 2)))]; + \\pub inline fn ACCESS() @TypeOf(array[@as(usize, @intCast(@as(c_int, 2)))]) { + \\ return array[@as(usize, @intCast(@as(c_int, 2)))]; + \\} }); cases.add("cast signed array index to unsigned", @@ -3130,7 +3140,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\ int a, b, c; \\#define FOO a ? b : c , &[_][]const u8{ - \\pub const FOO = if (a) b else c; + \\pub inline fn FOO() @TypeOf(if (a) b else c) { + \\ return if (a) b else c; + \\} }); cases.add("do while as expr", @@ -3624,7 +3636,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\#define FOO _ \\int _ = 42; , &[_][]const u8{ - \\pub const FOO = @"_"; + \\pub inline fn FOO() @TypeOf(@"_") { + \\ return @"_"; + \\} , \\pub export var @"_": c_int = 42; }); |
