diff --git a/src/main.rs b/src/main.rs index 847fa2e..eb1e2c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,8 @@ mod parser; mod repl; mod variables; +use std::process::exit; + use clap::{App, Arg}; use interpret::ExecEnv; use logos::Source; @@ -34,32 +36,30 @@ fn main() { match matches.value_of("file") { Some(file_path) => { // Read file - let source = std::fs::read_to_string(file_path).unwrap(); - - // Parse - let mut parser = Parser::new(&source); - let ast = parser.init(); - match ast { - Ok(ast) => { - println!("{:#?}", ast); - let mut env = ExecEnv::new(); - println!("{:?}", env.eval_stmts(&ast)); - } + let source = match std::fs::read_to_string(file_path) { + Ok(s) => s, Err(e) => { - println!( - "Error `{:?}` occurred at span: {:?} = `{:?}`", - e.kind, - e.span.clone(), - source.slice(e.span) - ); + println!("Failed to read file \"{}\": {}", file_path, e); + exit(1) } + }; + + // Parse & evaluate + let mut parser = Parser::new(&source); + if let Err(e) = parser + .init() + .and_then(|ast| ExecEnv::new().eval_stmts(&ast)) + { + println!( + "Error `{:?}` occurred at span: {:?} = `{:?}`", + e.kind, + e.span.clone(), + source.slice(e.span) + ); } } None => { - println!( - "Hi [AbleScript {}] - AST Printer & Interpreter", - env!("CARGO_PKG_VERSION") - ); + println!("Hi [AbleScript {}]", env!("CARGO_PKG_VERSION")); repl::repl(); } } diff --git a/src/repl.rs b/src/repl.rs index e5d4a15..55395c6 100644 --- a/src/repl.rs +++ b/src/repl.rs @@ -16,7 +16,7 @@ pub fn repl() { } let mut parser = Parser::new(&line); let value = parser.init().and_then(|ast| { - println!("{:?}", &ast); + // println!("{:?}", &ast); env.eval_stmts(&ast) });