microimprovements to oxidizer
This commit is contained in:
parent
fbd6d9d43f
commit
9b90d8e516
|
@ -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<String> = 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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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 }}");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue