Improved the repl to return to evaluation upon error. Also added an exit command
This commit is contained in:
		
							
								
								
									
										22
									
								
								bin/main.ml
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								bin/main.ml
									
									
									
									
									
								
							@@ -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 "exit" -> ()
 | 
				
			||||||
  | Some l ->
 | 
					  | Some l ->
 | 
				
			||||||
    let vals = (parse_str l) in
 | 
					    try
 | 
				
			||||||
    (* dbg_print_all vals; *)
 | 
					      let vals = (parse_str l) in
 | 
				
			||||||
    dbg_print_all (eval_all env vals);
 | 
					      (* dbg_print_all vals; *)
 | 
				
			||||||
    Out_channel.flush Out_channel.stdout;
 | 
					      dbg_print_all (eval_all env vals);
 | 
				
			||||||
    repl env c;;
 | 
					      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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user