Improved the repl to return to evaluation upon error. Also added an exit command

This commit is contained in:
Emin Arslan
2025-10-14 21:06:11 +03:00
committed by Emin Arslan
parent b0ded579af
commit be6e1cd684

View File

@@ -8,12 +8,22 @@ let rec repl env c =
let () = printf ">>> "; Out_channel.flush Out_channel.stdout; in let () = printf ">>> "; Out_channel.flush Out_channel.stdout; in
match In_channel.input_line c with match In_channel.input_line c with
| None -> () | None -> ()
| Some l -> | Some "exit" -> ()
let vals = (parse_str l) in | Some l ->
(* dbg_print_all vals; *) try
dbg_print_all (eval_all env vals); let vals = (parse_str l) in
Out_channel.flush Out_channel.stdout; (* dbg_print_all vals; *)
repl env c;; 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)