diff --git a/src/main.rs b/src/main.rs index e487b03..e196144 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ fn main() { let arg = &args .next() .unwrap_or_else(|| find_in_splpath("repl.spl").expect("no file to be run")); - if arg == "--build" || arg == "--run" { + if arg == "--build" || arg == "--run" || arg == "--buildrun" { let file = args.next().unwrap(); let data = fs::read_to_string(file.clone()).expect("unable to read specified file"); let build_only = arg == "--build"; @@ -29,14 +29,17 @@ fn main() { if build_only { println!("Building..."); } - let app = builder.build(build_only).unwrap(); + let app = builder.build(build_only || arg == "--buildrun").unwrap(); if build_only { println!("Built! Binary is {}", app.get_binary()); } else { let mut args: Vec = args.collect(); args.insert(0, file); let mut command = app.execute(args).unwrap(); - app.delete(); + if arg != "--buildrun" { + println!("spl: cleaning temporary dir (run with --buildrun to keep)"); + app.delete(); + } command.wait().unwrap(); } diff --git a/src/oxidizer/mod.rs b/src/oxidizer/mod.rs index 1fb2804..a7be31f 100644 --- a/src/oxidizer/mod.rs +++ b/src/oxidizer/mod.rs @@ -146,16 +146,16 @@ impl RustAppBuilder { let mut code = String::new(); for func in self.rust_functions.into_iter().enumerate() { code += &format!( - "fn spl_oxidizer_{}(stack: &mut Stack) -> OError {{ {} Ok(()) }}", + "fn spl_oxidizer_{}(stack: &mut Stack) -> OError {{ {} Ok(()) }}\n", func.0, func.1.content ); runtime_init += &format!( - "rt.native_functions.insert({:?}, (0, FuncImpl::Native(spl_oxidizer_{})));", + "rt.native_functions.insert({:?}, (0, FuncImpl::Native(spl_oxidizer_{})));\n", func.1.fn_name, func.0 ) } for (name, data) in self.to_embed.into_iter() { - runtime_init += &format!("rt.embedded_files.insert({:?}, {:?});", name, data); + runtime_init += &format!("rt.embedded_files.insert({:?}, {:?});\n", name, data); } fs::write( format!("{tmp}/spl-{name}/src/main.rs"), diff --git a/src/oxidizer/splrs.rs b/src/oxidizer/splrs.rs index dce495f..8468531 100644 --- a/src/oxidizer/splrs.rs +++ b/src/oxidizer/splrs.rs @@ -4,12 +4,16 @@ use super::RustFunction; /// Parses a #-expression and returns the string to be inserted in its place. fn parse_hash_expr(s: String, name: &str) -> String { + if &s == "drop" { + return "let _ = stack.pop();".to_owned(); + } if &s == "pop" { return "stack.pop().lock_ro()".to_owned(); } if &s == "pop_mut" { return "stack.pop().lock()".to_owned(); } + // TODO: broken. fix. if &s == "pop:Array" { return format!("{{ require_array_on_stack!(tmp, stack, {name:?}); tmp }}"); }