diff options
-rw-r--r-- | users/tazjin/rlox/default.nix | 5 | ||||
-rw-r--r-- | users/tazjin/rlox/src/interpreter.rs | 4 | ||||
-rw-r--r-- | users/tazjin/rlox/src/main.rs | 37 |
3 files changed, 36 insertions, 10 deletions
diff --git a/users/tazjin/rlox/default.nix b/users/tazjin/rlox/default.nix new file mode 100644 index 000000000000..4b2d650cb585 --- /dev/null +++ b/users/tazjin/rlox/default.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +pkgs.naersk.buildPackage { + src = ./.; +} diff --git a/users/tazjin/rlox/src/interpreter.rs b/users/tazjin/rlox/src/interpreter.rs new file mode 100644 index 000000000000..6a7687c2685e --- /dev/null +++ b/users/tazjin/rlox/src/interpreter.rs @@ -0,0 +1,4 @@ +// Run some Lox code and print it to stdout +pub fn run(_code: &str) { + println!("no interpreter yet, sorry") +} diff --git a/users/tazjin/rlox/src/main.rs b/users/tazjin/rlox/src/main.rs index 3f173673a177..83d220c81631 100644 --- a/users/tazjin/rlox/src/main.rs +++ b/users/tazjin/rlox/src/main.rs @@ -1,23 +1,40 @@ -use std::process; use std::env; +use std::fs; +use std::io; +use std::io::Write; +use std::process; -fn run_file(_file: &str) { - unimplemented!("no file support yet") -} - -fn run_prompt() { - unimplemented!("no prompt support yet") -} +mod interpreter; fn main() { let mut args = env::args(); - if args.len() > 1 { + if args.len() > 2 { println!("Usage: rlox [script]"); process::exit(1); - } else if let Some(file) = args.next() { + } else if let Some(file) = args.nth(1) { run_file(&file); } else { run_prompt(); } } + +// Run Lox code from a file and print results to stdout +fn run_file(file: &str) { + let contents = fs::read_to_string(file).expect("failed to read the input file"); + interpreter::run(&contents); +} + +// Evaluate Lox code interactively in a shitty REPL. +fn run_prompt() { + let mut line = String::new(); + + loop { + print!("> "); + io::stdout().flush().unwrap(); + io::stdin() + .read_line(&mut line) + .expect("failed to read user input"); + interpreter::run(&line); + } +} |