Improved codegen

This commit is contained in:
2026-05-22 02:34:01 +02:00
parent c9a3c4693c
commit 960cc40886
5 changed files with 38 additions and 20 deletions
+5 -2
View File
@@ -166,9 +166,12 @@ impl GenRust for Postfix {
Postfix::Call(args) => {
cg.add("(");
for arg in args {
for (i, arg) in args.iter().enumerate() {
if i > 0 {
cg.add(", ");
}
arg.gen_rust(ctx, cg);
cg.add(", ");
}
cg.add(")");
+13
View File
@@ -81,6 +81,19 @@ impl RustCodegen {
}
}
}
pub fn ensure_brackets_expr(&mut self, ctx: &mut Context, expr: &Expression) {
match expr {
Expression::Statement(stmt) => self.ensure_brackets(ctx, stmt),
_ => {
self.add("{");
self.indent += 1;
expr.gen_rust(ctx, self);
self.indent -= 1;
self.add("}");
}
}
}
}
impl GenRust for Attribute {
+12 -10
View File
@@ -18,10 +18,11 @@ impl GenRust for Block {
if let Some(soft_return) = &self.1 {
ctx.expr_ensure_semicolon = false;
soft_return.gen_rust(ctx, cg);
cg.addln("");
}
cg.indent -= 1;
cg.add_indentedln("}");
cg.add_indented("}");
}
}
@@ -57,17 +58,14 @@ impl GenRust for Statement {
p.gen_rust(ctx, cg);
}
cg.add(" => {");
cg.indent += 1;
cg.add(" => ");
body.gen_rust(ctx, cg);
cg.indent -= 1;
cg.add_indentedln("}");
cg.ensure_brackets_expr(ctx, body);
}
cg.indent -= 1;
cg.add_indentedln("}");
cg.addln("");
cg.add_indented("}");
}
Statement::If {
@@ -77,16 +75,18 @@ impl GenRust for Statement {
} => {
cg.add("if ");
initial.condition.gen_rust(ctx, cg);
cg.add(" ");
cg.ensure_brackets(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(ctx, &else_if_branch.body);
}
if let Some(else_br) = else_branch {
cg.add("else");
cg.add(" else ");
cg.ensure_brackets(ctx, else_br);
}
}
@@ -116,7 +116,9 @@ impl GenRust for Statement {
cg.indent += 1;
cg.ensure_brackets(ctx, body);
ctx.expr_ensure_semicolon = true;
body.gen_rust(ctx, cg);
update.gen_rust(ctx, cg);