From 4e9d846fbd51cec9e8d931c4aa3f399668ac316e Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 21 Nov 2021 19:44:47 +0100 Subject: Basic errors for parsing. --- src/main.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 0df0483..63f2347 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,12 @@ -use std::{env, fs, path::Path}; +use std::{env, fs, path::Path, process::exit}; +mod error; mod interpret; mod lex; mod parse; mod types; +use error::RHError; use lex::lexer::Lexer; use interpret::walker::Walker; @@ -27,7 +29,7 @@ fn file(filename: impl AsRef) { let lexer = Lexer::new(&contents); let mut parser = Parser::new(lexer); - let node = parser.parse().expect("Failed parsing."); + let node = handle_error(parser.parse(), &contents); let mut walker = Walker::root(); walker.walk(&node); @@ -52,9 +54,19 @@ fn repl() { let lexer = Lexer::new(input_buffer.trim()); let mut parser = Parser::new(lexer); - let node = parser.expression().expect("Failed parsing."); + let node = handle_error(parser.expression(), &input_buffer); let result = walker.walk_expression(&node).expect("Failed interpreting."); println!("🥕: {:?}\n", result); } } + +fn handle_error(result: Result, source: &str) -> T { + match result { + Ok(x) => x, + Err(error) => { + print!("{}", error.hydrate_source(&source)); + exit(1); + } + } +} -- cgit 1.4.1