diff --git a/src/args.rs b/src/args.rs index 17d042d..05a47b9 100644 --- a/src/args.rs +++ b/src/args.rs @@ -1,4 +1,5 @@ use std::env; +use std::path::PathBuf; use std::process::exit; const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -8,7 +9,7 @@ const CRATE: &str = env!("CARGO_CRATE_NAME"); #[derive(Default)] pub struct Args { version: bool, - file: Option, + file: Option, } impl Args { @@ -34,7 +35,7 @@ impl Args { if self.file.is_some() { panic!("please specify only a single source file!"); } - self.file = Some(file.to_owned()); + self.file = Some(PathBuf::from(file)); } } } @@ -55,7 +56,7 @@ impl Args { /// Fetches the file from the arguments. /// Panics if there is no file in the arguments #[inline] - pub fn get_file(self) -> String { + pub fn get_file(self) -> PathBuf { self.file.expect("no file supplied!") } } diff --git a/src/main.rs b/src/main.rs index 10683d5..0317806 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,8 +27,14 @@ fn main() { args.handle(); let file = args.get_file(); - let content = fs::read_to_string(file).expect("Couldn't read the file"); + let content = fs::read_to_string(&file).expect("Couldn't read the file"); let mut parser = Parser::new(&content); - - println!("{:?}", parser.parse()); + let Some(parent) = parser.parse() else { + eprintln!( + "Failed to parse {} - See the errors above", + file.to_string_lossy() + ); + std::process::exit(1); + }; + println!("Parsed AST:\n{:#?}", parent); } diff --git a/src/parser/expr.rs b/src/parser/statement.rs similarity index 100% rename from src/parser/expr.rs rename to src/parser/statement.rs