Soft returning refactor

This commit is contained in:
2026-05-24 13:20:08 +02:00
parent f4fe38140a
commit 63cc20107c
8 changed files with 61 additions and 21 deletions
+18 -6
View File
@@ -26,6 +26,18 @@ impl GenRust for Block {
}
}
impl GenRust for StatementBody {
fn gen_rust(&self, ctx: &mut Context, cg: &mut RustCodegen) {
match self {
Self::Expression(expr) => expr.gen_rust(ctx, cg),
Self::Statement(stmt) => {
stmt.gen_rust(ctx, cg);
cg.add(";");
}
}
}
}
impl GenRust for Statement {
fn gen_rust(&self, ctx: &mut Context, cg: &mut RustCodegen) {
match self {
@@ -76,18 +88,18 @@ impl GenRust for Statement {
cg.add("if ");
initial.condition.gen_rust(ctx, cg);
cg.add(" ");
cg.ensure_brackets_expr(ctx, &initial.body);
cg.ensure_brackets_body(ctx, &initial.body);
for else_if_branch in else_if {
cg.add("else if");
else_if_branch.condition.gen_rust(ctx, cg);
cg.add(" ");
cg.ensure_brackets_expr(ctx, &else_if_branch.body);
cg.ensure_brackets_body(ctx, &else_if_branch.body);
}
if let Some(else_br) = else_branch {
cg.add(" else ");
cg.ensure_brackets_expr(ctx, else_br);
cg.ensure_brackets_body(ctx, else_br);
}
}
@@ -95,12 +107,12 @@ impl GenRust for Statement {
cg.add("while ");
condition.gen_rust(ctx, cg);
cg.add(" ");
cg.ensure_brackets_expr(ctx, body);
cg.ensure_brackets_body(ctx, body);
}
Statement::Loop(body) => {
cg.add("loop ");
cg.ensure_brackets_expr(ctx, body);
cg.ensure_brackets_body(ctx, body);
}
Statement::CStyleFor {
@@ -156,7 +168,7 @@ impl GenRust for Statement {
pattern.gen_rust(ctx, cg);
cg.add(" in ");
iterator.gen_rust(ctx, cg);
cg.ensure_brackets_expr(ctx, body);
cg.ensure_brackets_body(ctx, body);
}
Statement::Return(expr) => {