translate-c: correctly add semicolon to if statements
This commit is contained in:
@@ -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, ";"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {};
|
||||
\\}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user