diff --git a/src/generator/js.rs b/src/generator/js.rs index 8c02f5d..ab0d5e0 100644 --- a/src/generator/js.rs +++ b/src/generator/js.rs @@ -72,7 +72,7 @@ fn generate_block(block: Statement) -> String { } fn generate_statement(statement: Statement) -> String { - match statement { + let state = match statement { Statement::Return(ret) => generate_return(ret), Statement::Declare(name, val) => generate_declare(name.name, 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::Block(_) => generate_block(statement), Statement::While(expr, body) => generate_while_loop(expr, *body), - } + }; + + format!("{};\n", state) } fn generate_expression(expr: Expression) -> String { @@ -159,8 +161,8 @@ fn generate_declare(name: String, val: Option) -> String { // var is used here to not collide with scopes. // TODO: Can let be used instead? match val { - Some(expr) => format!("var {} = {};\n", name, generate_expression(expr)), - None => format!("var {};\n", name), + Some(expr) => format!("var {} = {}", name, generate_expression(expr)), + None => format!("var {}", name), } } @@ -179,13 +181,13 @@ fn generate_function_call(func: String, args: Vec) -> String { }) .collect::>() .join(","); - format!("{N}({A})\n", N = func, A = formatted_args) + format!("{N}({A})", N = func, A = formatted_args) } fn generate_return(ret: Option) -> String { match ret { - Some(expr) => format!("return {}\n", generate_expression(expr)), - None => "return;\n".to_string(), + Some(expr) => format!("return {}", generate_expression(expr)), + 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 { - format!("{} = {};\n", name, generate_expression(expr)) + format!("{} = {}", name, generate_expression(expr)) }