diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig index 34498e7315620d4049fa0ddd8ea8ad2a5c2954d6..99d198c995d6325477d3534a5ff1a3677eea28f1 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 34e6897c9409bec9264262f6f69e206c87e5bcd6..6eb23201e5d6c53389ab0cf6a67b6415eb9a0206 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) {}; \\} });