From 992141878227439cd517d05b68f15e57d77452a5 Mon Sep 17 00:00:00 2001 From: Akshay Date: Mon, 29 Mar 2021 10:24:49 +0530 Subject: fix: handle unterminated strings gracefully --- src/app.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/app.rs') diff --git a/src/app.rs b/src/app.rs index 016349b..eef896d 100644 --- a/src/app.rs +++ b/src/app.rs @@ -4,7 +4,7 @@ use crate::{ command::CommandBox, consts::{colors::*, FONT_PATH}, dither, - lisp::{eval, lex::Lexer, parse::Parser, prelude, EnvList}, + lisp::{error::LispError, eval, lex::Lexer, parse::Parser, prelude, EnvList}, message::Message, rect, symmetry::Symmetry, @@ -284,7 +284,7 @@ impl<'ctx, 'file> AppState<'ctx, 'file> { Ok(val) => self.message.set_info(format!("{}", val)), Err(eval_err) => self.message.set_error(format!("{}", eval_err)), }, - Err(parse_err) => self.message.set_error(format!("{}", parse_err)), + Err(err) => self.message = AppState::handle_error(err, &lisp_expr), } self.command_box.hist_append(); @@ -292,6 +292,15 @@ impl<'ctx, 'file> AppState<'ctx, 'file> { self.mode = Mode::Draw; } + fn handle_error(err: LispError, src: &str) -> Message { + let mut message = Message::new(); + match err { + LispError::Parse(p) => message.set_error(p.display(&src)), + eval_err => message.set_error(eval_err.to_string()), + } + message + } + fn draw_grid(&mut self) { let cs = self.zoom as u32; let (width, height) = (self.width(), self.height()); -- cgit v1.2.3