]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/lambda-delta/toplevel/top.ml
- new semantic log system
[helm.git] / helm / software / lambda-delta / toplevel / top.ml
index 92840d54a2df1d1b4ac8739376788b99f7f90975..7504e2c0b3a1715dafc7f1f45d9688ce7ffeedd5 100644 (file)
@@ -10,6 +10,7 @@
       V_______________________________________________________________ *)
 
 module P    = Printf
+module U    = NUri
 module L    = Log
 module AO   = AutOutput
 module MA   = MetaAut
@@ -19,31 +20,32 @@ module BrgO = BrgOutput
 module BrgU = BrgUntrusted
 
 type status = {
-   summary: int;
    mst : MA.status;
    ac  : AO.counters;
    mc  : MO.counters;
    brgc: BrgO.counters
 }
 
-let initial_status summary = {
-   summary = summary;
+let initial_status = {
    ac = AO.initial_counters;
    mc = MO.initial_counters;
    brgc= BrgO.initial_counters;
    mst = MA.initial_status
 }
 
-let count st count_fun c item =
-   if st.summary > 2 then count_fun Cps.start c item else c
+let count count_fun c item =
+   if !L.level > 2 then count_fun Cps.start c item else c
+
+let brg_error s msg =
+   L.error BrgO.specs (L.Warn s :: msg) 
 
 let main =
+try 
    let version_string = "Helena Checker 0.8.0 M - December 2008" in
-   let summary = ref 0 in
    let stage = ref 3 in
    let meta_file = ref None in
    let hierarchy = ref (fun h -> h + 2) in
-   let set_summary i = summary := i in
+   let set_summary i = L.level := i in
    let print_version () = L.warn version_string; exit 0 in
    let set_stage i = stage := i in
    let close = function
@@ -58,33 +60,33 @@ let main =
       meta_file := Some (och, frm)
    in
    let read_file name =
-      if !summary > 0 then Time.gmtime version_string;      
-      if !summary > 1 then
+      if !L.level > 0 then Time.gmtime version_string;      
+      if !L.level > 1 then
          L.warn (P.sprintf "Processing file: %s" name);
-      if !summary > 0 then Time.utime_stamp "started";
+      if !L.level > 0 then Time.utime_stamp "started";
       let ich = open_in name in
       let lexbuf = Lexing.from_channel ich in
       let book = AutParser.book AutLexer.token lexbuf in
       close_in ich;
-      if !summary > 0 then Time.utime_stamp "parsed";
+      if !L.level > 0 then Time.utime_stamp "parsed";
       let rec aux st = function
          | []         -> st
         | item :: tl ->
 (* stage 3 *)
            let f st = function
-              | None                   -> st
-              | Some (_, (i, _, _, _)) ->
-                 Log.warn (string_of_int i); st
+              | None                -> st
+              | Some (_, (i, u, _)) -> 
+                 Log.warn (P.sprintf "[%u] %s" i (U.string_of_uri u)); st
            in
 (* stage 2 *)      
            let f st item =
-              let st = {st with brgc = count st BrgO.count_item st.brgc item} in
+              let st = {st with brgc = count BrgO.count_item st.brgc item} in
               if !stage > 2 then BrgU.type_check (f st) !hierarchy item else st
            in
 (* stage 1 *)      
            let f mst item = 
               let st = {st with
-                 mst = mst; mc = count st MO.count_item st.mc item
+                 mst = mst; mc = count MO.count_item st.mc item
               } in
               begin match !meta_file with
                  | None          -> ()
@@ -93,17 +95,17 @@ let main =
               if !stage > 1 then MBrg.brg_of_meta (f st) item else st 
            in  
 (* stage 0 *)      
-            let st = {st with ac = count st AO.count_item st.ac item} in
+            let st = {st with ac = count AO.count_item st.ac item} in
            let st =
               if !stage > 0 then MA.meta_of_aut f st.mst item else st
            in
            aux st tl
       in 
-      let st = aux (initial_status !summary) book in
-      if !summary > 0 then Time.utime_stamp "processed";
-      if !summary > 2 then AO.print_counters Cps.start st.ac;
-      if !summary > 2 && !stage > 0 then MO.print_counters Cps.start st.mc;
-      if !summary > 2 && !stage > 1 then BrgO.print_counters Cps.start st.brgc;
+      let st = aux initial_status book in
+      if !L.level > 0 then Time.utime_stamp "processed";
+      if !L.level > 2 then AO.print_counters Cps.start st.ac;
+      if !L.level > 2 && !stage > 0 then MO.print_counters Cps.start st.mc;
+      if !L.level > 2 && !stage > 1 then BrgO.print_counters Cps.start st.brgc;
    in
    let help = "Usage: helena [ -V | -Ss <number> | -m <file> ] <file> ..." in
    let help_S = "<number>  Set summary level" in
@@ -116,4 +118,5 @@ let main =
       ("-m", Arg.String set_meta_file, help_m); 
       ("-s", Arg.Int set_stage, help_s);
    ] read_file help;
-   if !summary > 0 then Time.utime_stamp "at exit"
+   if !L.level > 0 then Time.utime_stamp "at exit"
+with BrgType.TypeError msg -> brg_error "Type Error" msg