use std::{ env, fs, io::{self, Write}, mem, process, }; mod errors; mod eval; fn main() { let mut args = env::args(); if args.len() > 2 { println!("Usage: tvix-eval [script]"); process::exit(1); } if let Some(file) = args.nth(1) { run_file(&file); } else { run_prompt(); } } fn run_file(file: &str) { let contents = fs::read_to_string(file).expect("failed to read the input file"); run(contents); } 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"); run(mem::take(&mut line)); line.clear(); } } fn run(code: String) { match eval::interpret(code) { Ok(result) => println!("=> {:?}", result), Err(err) => eprintln!("{}", err), } }