Browse Source

Fix semicolon position in generated code

github-actions
Garrit Franke 3 years ago
parent
commit
73ed60171c
  1. 18
      src/generator/js.rs

18
src/generator/js.rs

@ -72,7 +72,7 @@ fn generate_block(block: Statement) -> String {
} }
fn generate_statement(statement: Statement) -> String { fn generate_statement(statement: Statement) -> String {
match statement { let state = match statement {
Statement::Return(ret) => generate_return(ret), Statement::Return(ret) => generate_return(ret),
Statement::Declare(name, val) => generate_declare(name.name, val), Statement::Declare(name, val) => generate_declare(name.name, val),
Statement::Exp(val) => generate_expression(val), Statement::Exp(val) => generate_expression(val),
@ -82,7 +82,9 @@ fn generate_statement(statement: Statement) -> String {
Statement::Assign(name, state) => generate_assign(name, *state), Statement::Assign(name, state) => generate_assign(name, *state),
Statement::Block(_) => generate_block(statement), Statement::Block(_) => generate_block(statement),
Statement::While(expr, body) => generate_while_loop(expr, *body), Statement::While(expr, body) => generate_while_loop(expr, *body),
} };
format!("{};\n", state)
} }
fn generate_expression(expr: Expression) -> String { fn generate_expression(expr: Expression) -> String {
@ -159,8 +161,8 @@ fn generate_declare(name: String, val: Option<Expression>) -> String {
// var is used here to not collide with scopes. // var is used here to not collide with scopes.
// TODO: Can let be used instead? // TODO: Can let be used instead?
match val { match val {
Some(expr) => format!("var {} = {};\n", name, generate_expression(expr)), Some(expr) => format!("var {} = {}", name, generate_expression(expr)),
None => format!("var {};\n", name), None => format!("var {}", name),
} }
} }
@ -179,13 +181,13 @@ fn generate_function_call(func: String, args: Vec<Expression>) -> String {
}) })
.collect::<Vec<String>>() .collect::<Vec<String>>()
.join(","); .join(",");
format!("{N}({A})\n", N = func, A = formatted_args) format!("{N}({A})", N = func, A = formatted_args)
} }
fn generate_return(ret: Option<Expression>) -> String { fn generate_return(ret: Option<Expression>) -> String {
match ret { match ret {
Some(expr) => format!("return {}\n", generate_expression(expr)), Some(expr) => format!("return {}", generate_expression(expr)),
None => "return;\n".to_string(), None => "return".to_string(),
} }
} }
@ -214,5 +216,5 @@ fn generate_bin_op(left: Expression, op: BinOp, right: Expression) -> String {
} }
fn generate_assign(name: String, expr: Expression) -> String { fn generate_assign(name: String, expr: Expression) -> String {
format!("{} = {};\n", name, generate_expression(expr)) format!("{} = {}", name, generate_expression(expr))
} }

Loading…
Cancel
Save