Commit 6f6568b1fd
Changed files (2)
src
translate_c
test
src/translate_c/ast.zig
@@ -1902,36 +1902,25 @@ fn addSemicolonIfNeeded(c: *Context, node: Node) !void {
.var_decl, .var_simple, .arg_redecl, .alias, .enum_redecl, .block, .empty_block, .block_single, .@"switch" => {},
.while_true => {
const payload = node.castTag(.while_true).?.data;
- return addSemicolonIfNotBlock(c, payload, .yes_if);
+ return addSemicolonIfNotBlock(c, payload);
},
.@"while" => {
const payload = node.castTag(.@"while").?.data;
- return addSemicolonIfNotBlock(c, payload.body, .yes_if);
+ return addSemicolonIfNotBlock(c, payload.body);
},
.@"if" => {
const payload = node.castTag(.@"if").?.data;
if (payload.@"else") |some|
- return addSemicolonIfNotBlock(c, some, .no_if);
- return addSemicolonIfNotBlock(c, payload.then, .no_if);
+ return addSemicolonIfNeeded(c, some);
+ return addSemicolonIfNotBlock(c, payload.then);
},
else => _ = try c.addToken(.semicolon, ";"),
}
}
-fn addSemicolonIfNotBlock(c: *Context, node: Node, if_needs_semicolon: enum{ yes_if, no_if}) !void {
+fn addSemicolonIfNotBlock(c: *Context, node: Node) !void {
switch (node.tag()) {
.block, .empty_block, .block_single => {},
- .@"if" => {
- if (if_needs_semicolon == .yes_if) {
- _ = try c.addToken(.semicolon, ";");
- return;
- }
-
- const payload = node.castTag(.@"if").?.data;
- if (payload.@"else") |some|
- return addSemicolonIfNotBlock(c, some, .no_if);
- return addSemicolonIfNotBlock(c, payload.then, .no_if);
- },
else => _ = try c.addToken(.semicolon, ";"),
}
}
test/translate_c.zig
@@ -10,6 +10,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
\\ } else {
\\ int b = 2;
\\ }
+ \\ if (1) if (1) {}
\\}
, &[_][]const u8{
\\pub export fn foo() void {
@@ -18,6 +19,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
\\ } else {
\\ var b: c_int = 2;
\\ };
+ \\ if (true) if (true) {};
\\}
});