diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 34498e7315..99d198c995 100644 --- a/src/translate_c/ast.zig +++ b/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, ";"), } } diff --git a/test/translate_c.zig b/test/translate_c.zig index 34e6897c94..6eb23201e5 100644 --- a/test/translate_c.zig +++ b/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) {}; \\} });