Improved codegen
This commit is contained in:
+5
-2
@@ -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(")");
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user