From 5228acfa3e0e37019dac156ba85434b83e8f469d Mon Sep 17 00:00:00 2001 From: Claudio Sacerdoti Coen Date: Tue, 5 Jul 2005 15:09:44 +0000 Subject: [PATCH] matitatop now cleans all before exiting in every situation. Indeed, quite often it cleans all twice :-) --- helm/matita/.ocamlinit | 1 + helm/matita/matitacLib.ml | 36 ++++++++++++++++++++++++------------ helm/matita/matitacLib.mli | 6 ++++-- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/helm/matita/.ocamlinit b/helm/matita/.ocamlinit index d1eac4cbd..1585f71b2 100644 --- a/helm/matita/.ocamlinit +++ b/helm/matita/.ocamlinit @@ -36,6 +36,7 @@ let go = MatitacLib.interactive_loop;; (* let's go! *) let _ = + at_exit (fun () -> MatitacLib.clean_exit None); if Array.length Sys.argv > 1 then MatitacLib.main `TOPLEVEL else diff --git a/helm/matita/matitacLib.ml b/helm/matita/matitacLib.ml index ba2085bca..de8975215 100644 --- a/helm/matita/matitacLib.ml +++ b/helm/matita/matitacLib.ml @@ -82,12 +82,21 @@ let pp_ocaml_mode () = MatitaLog.message "" let clean_exit n = - match !status with - None -> exit n - | Some status -> - let baseuri = MatitaTypes.get_string_option !status "baseuri" in - MatitacleanLib.clean_baseuris ~verbose:false [baseuri]; - exit n + let opt_exit = + function + None -> () + | Some n -> exit n + in + match !status with + None -> opt_exit n + | Some status -> + try + let baseuri = MatitaTypes.get_string_option !status "baseuri" in + MatitacleanLib.clean_baseuris ~verbose:false [baseuri]; + opt_exit n + with MatitaTypes.Option_error("baseuri", "not found") -> + (* no baseuri ==> nothing to clean yet *) + opt_exit n let rec interactive_loop () = let str = Stream.of_channel stdin in @@ -100,7 +109,10 @@ let rec interactive_loop () = | CicTextualParser2.Parse_error (floc,err) -> (* check for EOI *) if Stream.peek str = None then - clean_exit 0 + begin + print_newline (); + clean_exit (Some 0) + end else let (x, y) = CicAst.loc_of_floc floc in MatitaLog.error (sprintf "Parse error at %d-%d: %s" x y err); @@ -167,7 +179,7 @@ let main ~mode = begin MatitaLog.error "there are still incomplete proofs at the end of the script"; - clean_exit 2 + clean_exit (Some 2) end else begin @@ -180,23 +192,23 @@ let main ~mode = | Sys.Break -> MatitaLog.error "user break!"; if mode = `COMPILER then - clean_exit ~-1 + clean_exit (Some ~-1) else pp_ocaml_mode () | MatitaEngine.Drop -> if mode = `COMPILER then - clean_exit 1 + clean_exit (Some 1) else pp_ocaml_mode () | CicTextualParser2.Parse_error (floc,err) -> let (x, y) = CicAst.loc_of_floc floc in MatitaLog.error (sprintf "Parse error at %d-%d: %s" x y err); if mode = `COMPILER then - clean_exit 1 + clean_exit (Some 1) else pp_ocaml_mode () | _ -> if mode = `COMPILER then - clean_exit 3 + clean_exit (Some 3) else pp_ocaml_mode () diff --git a/helm/matita/matitacLib.mli b/helm/matita/matitacLib.mli index a053a3f1a..dc24825e5 100644 --- a/helm/matita/matitacLib.mli +++ b/helm/matita/matitacLib.mli @@ -31,6 +31,8 @@ val main : mode:[ `COMPILER | `TOPLEVEL ] -> unit val dump_moo_to_file: string -> string list -> unit (** clean_exit n - performs an exit [n] after a complete clean-up of what was partially compiled + if n = Some n it performs an exit [n] after a complete clean-up of what was + partially compiled + otherwise it performs the clean-up without exiting *) -val clean_exit : int -> unit +val clean_exit : int option -> unit -- 2.39.2