]> matita.cs.unibo.it Git - helm.git/commitdiff
matitatop now cleans all before exiting in every situation.
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Tue, 5 Jul 2005 15:09:44 +0000 (15:09 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Tue, 5 Jul 2005 15:09:44 +0000 (15:09 +0000)
Indeed, quite often it cleans all twice :-)

helm/matita/.ocamlinit
helm/matita/matitacLib.ml
helm/matita/matitacLib.mli

index d1eac4cbd8f1e4567ec8b9aae8686e20685acd4c..1585f71b2043f53d72b94eb070a77e5b447dfef9 100644 (file)
@@ -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
index ba2085bca7cccbaaea8c78e07df04fecbf08e5e5..de89752151952761eac0edb23be21fb1b7b61d42 100644 (file)
@@ -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 
+        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 ()
index a053a3f1a1318dd0ab667877cbaf8df50b9a0e14..dc24825e583a60e58ed89e642f094e3b57bd5591 100644 (file)
@@ -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