]> matita.cs.unibo.it Git - helm.git/commitdiff
changed .moo format on disk: no longer plain strings, but ocaml marshalling of Grafit...
authorStefano Zacchiroli <zack@upsilon.cc>
Fri, 23 Sep 2005 17:27:36 +0000 (17:27 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Fri, 23 Sep 2005 17:27:36 +0000 (17:27 +0000)
helm/matita/matitaEngine.ml
helm/matita/matitacLib.ml

index 9a194b5ba19e00e3a382b02b0b77fc815eeb2e7d..0bd5acb9576ee33bf61e95764b5228690f5d448f 100644 (file)
@@ -634,7 +634,7 @@ let generate_projections uri fields status =
   ) status projections
 
 (* to avoid a long list of recursive functions *)
-let eval_from_stream_ref = ref (fun _ _ _ -> assert false);;
+let eval_from_dump_ref = ref (fun _ _ _ -> assert false);;
  
 let disambiguate_obj status obj =
   let uri =
@@ -696,8 +696,6 @@ let make_absolute paths path =
    with Unix.Unix_error _ as exc -> raise (UnableToInclude path)
 ;;
        
-let profiler_include = HExtlib.profile "include"
-
 let eval_command opts status cmd =
   let status,cmd = disambiguate_command status cmd in
   let cmd,notation_ids' = CicNotation.process_notation cmd in
@@ -711,15 +709,11 @@ let eval_command opts status cmd =
   | GrafiteAst.Include (loc, path) ->
      let absolute_path = make_absolute opts.include_paths path in
      let moopath = MatitaMisc.obj_file_of_script absolute_path in
-     let ic =
-      try open_in moopath with Sys_error _ -> 
-        raise (IncludedFileNotCompiled moopath) in
-     let stream = Ulexing.from_utf8_channel ic in
      let status = ref status in
-      profiler_include.HExtlib.profile
-       (!eval_from_stream_ref status stream) (fun _ _ -> ());
-      close_in ic;
-      !status
+     if not (Sys.file_exists moopath) then
+       raise (IncludedFileNotCompiled moopath);
+     !eval_from_dump_ref status moopath (fun _ _ -> ());
+     !status
   | GrafiteAst.Set (loc, name, value) -> 
       let value = 
         if name = "baseuri" then
@@ -759,8 +753,7 @@ let eval_command opts status cmd =
       let name = UriManager.name_of_uri uri in
       let obj = Cic.Constant (name,Some bo,ty,[],[]) in
       MatitaSync.add_obj uri obj status
-  | GrafiteAst.Coercion (loc, coercion) -> 
-      eval_coercion status coercion
+  | GrafiteAst.Coercion (loc, coercion) -> eval_coercion status coercion
   | GrafiteAst.Alias (loc, spec) -> 
      let diff =
       (*CSC: Warning: this code should be factorized with the corresponding
@@ -891,6 +884,24 @@ let eval_ast
   | GrafiteAst.Executable (_,ex) -> eval_executable opts status ex
   | GrafiteAst.Comment (_,c) -> eval_comment status c
 
+let eval_from_dump ?do_heavy_checks ?include_paths ?clean_baseuri status fname
+  cb
+=
+  let ic = open_in fname in
+  let moo = Marshal.from_channel ic in
+  close_in ic;
+  List.iter 
+    (fun ast -> 
+      let ast =
+        GrafiteAst.Executable (DisambiguateTypes.dummy_floc,
+          GrafiteAst.Command (DisambiguateTypes.dummy_floc,
+            (GrafiteAst.reash_uris ast)))
+      in
+      cb !status ast;
+      status :=
+        eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast)
+    moo
+
 let eval_from_stream 
   ?do_heavy_checks ?include_paths ?clean_baseuri status str cb 
 =
@@ -898,12 +909,13 @@ let eval_from_stream
     while true do
       let ast = GrafiteParser.parse_statement str in
       cb !status ast;
-      status := eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast
+      status :=
+        eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast
     done
   with End_of_file -> ()
 
 (* to avoid a long list of recursive functions *)
-let _ = eval_from_stream_ref := eval_from_stream
+let _ = eval_from_dump_ref := eval_from_dump
   
 let eval_from_stream_greedy 
   ?do_heavy_checks ?include_paths ?clean_baseuri status str cb 
index b30a55234b94f12d80c6330eefac65bba5de2636..48a2f2f9ec5d23d109c01be91defd94a32b6f12a 100644 (file)
@@ -159,11 +159,7 @@ let go () =
 
 let dump_moo_to_file file moo =
  let os = open_out (MatitaMisc.obj_file_of_script file) in
- let output s = output_string os s in
- output "(* GENERATED FILE: DO NOT EDIT! *)\n\n";
- List.iter
-  (fun cmd -> output (GrafiteAstPp.pp_command cmd ^ "\n"))
-  (List.rev moo);
+ Marshal.to_channel os (List.rev moo) [];
  close_out os
   
 let main ~mode =