Commit 6f6568b1fd

Veikka Tuominen <git@vexu.eu>
2021-02-19 19:48:06
translate-c: correctly add semicolon to if statements
1 parent d672c20
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) {};
         \\}
     });