diff --git a/src/main.rs b/src/main.rs index e7a11a9..ec41110 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,41 @@ -fn main() { - println!("Hello, world!"); +use std::{env, fs, io::{self, Write}}; + +/// Execute a script. +fn run(_source: String) { + todo!(); +} + +/// Run the REPL. +fn run_prompt() { + let mut buffer = String::new(); + let stdin = io::stdin(); + let mut stdout = io::stdout(); + loop { + print!("slox> "); + stdout.flush().unwrap(); + let n_read = stdin.read_line(&mut buffer).expect("Failed to read from stdin"); + match n_read { + 0 => return, + _ => run(buffer.clone()), + } + } +} + +/// Load a file and run the script it contains. +fn run_file(file: &str) { + let contents = fs::read_to_string(file).expect(&format!("Could not load {}", file)); + run(contents) +} + +/// Main program. Either load a script from a file, or start the REPL. +fn main() { + let args: Vec = env::args().skip(1).collect(); + let n_args = args.len(); + if n_args == 0 { + run_prompt() + } else if n_args == 1 { + run_file(&args[0]); + } else { + println!("Usage: slox [script]"); + } }