From be6e1cd684ca24d8fae31c81131a548a1e18c89c Mon Sep 17 00:00:00 2001 From: Emin Arslan <53535669+haxala1r@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:06:11 +0300 Subject: [PATCH] Improved the repl to return to evaluation upon error. Also added an exit command --- bin/main.ml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/bin/main.ml b/bin/main.ml index 854916f..240c6e4 100644 --- a/bin/main.ml +++ b/bin/main.ml @@ -8,12 +8,22 @@ let rec repl env c = let () = printf ">>> "; Out_channel.flush Out_channel.stdout; in match In_channel.input_line c with | None -> () - | Some l -> - let vals = (parse_str l) in - (* dbg_print_all vals; *) - dbg_print_all (eval_all env vals); - Out_channel.flush Out_channel.stdout; - repl env c;; + | Some "exit" -> () + | Some l -> + try + let vals = (parse_str l) in + (* dbg_print_all vals; *) + dbg_print_all (eval_all env vals); + Out_channel.flush Out_channel.stdout; + repl env c + with + | Invalid_argument s -> + printf "%s\nResuming repl\n" s; + repl env c + | Parser.Error -> + printf "Expression '%s' couldn't be parsed, try again\n" l; + repl env c +;; -let _ = repl (make_env ()) (In_channel.stdin) +let () = repl (make_env ()) (In_channel.stdin)