]> matita.cs.unibo.it Git - helm.git/blobdiff - components/lexicon/lexiconEngine.ml
bugfix to developments:
[helm.git] / components / lexicon / lexiconEngine.ml
index 6e3c1b53d2c5aff600c98ea970689c493dc737e1..1e1fe61c05147eef1dd8df67231df4f18ee3b7b1 100644 (file)
@@ -25,7 +25,8 @@
 
 (* $Id$ *)
 
-exception IncludedFileNotCompiled of string (* file name *)
+(* lexicon file name * ma file name *)
+exception IncludedFileNotCompiled of string * string 
 exception MetadataNotFound of string        (* file name *)
 
 type status = {
@@ -72,59 +73,69 @@ let add_metadata new_metadata status =
   else
     status
 
-let set_proof_aliases status new_aliases =
- let commands_of_aliases =
-   List.map
-    (fun alias -> LexiconAst.Alias (HExtlib.dummy_floc, alias))
- in
- let deps_of_aliases =
-   HExtlib.filter_map
-    (function
-    | LexiconAst.Ident_alias (_, suri) ->
-        let buri = UriManager.buri_of_uri (UriManager.uri_of_string suri) in
-        Some (LibraryNoDb.Dependency buri)
-    | _ -> None)
- in
- let aliases =
-  List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.add d c acc)
-   status.aliases new_aliases in
- let multi_aliases =
-  List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.cons d c acc)
-   status.multi_aliases new_aliases in
- let new_status =
-   { status with multi_aliases = multi_aliases ; aliases = aliases}
- in
- if new_aliases = [] then
-   new_status
+let set_proof_aliases mode status new_aliases =
+ if mode = LexiconAst.WithoutPreferences then
+   status 
  else
-   let aliases = 
-     DisambiguatePp.aliases_of_domain_and_codomain_items_list new_aliases
+   let commands_of_aliases =
+     List.map
+      (fun alias -> LexiconAst.Alias (HExtlib.dummy_floc, alias))
    in
-   let status = add_lexicon_content (commands_of_aliases aliases) new_status in
-   let status = add_metadata (deps_of_aliases aliases) status in
-   status
+   let deps_of_aliases =
+     HExtlib.filter_map
+      (function
+      | LexiconAst.Ident_alias (_, suri) ->
+          let buri = UriManager.buri_of_uri (UriManager.uri_of_string suri) in
+          Some (LibraryNoDb.Dependency buri)
+      | _ -> None)
+   in
+   let aliases =
+    List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.add d c acc)
+     status.aliases new_aliases in
+   let multi_aliases =
+    List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.cons d c acc)
+     status.multi_aliases new_aliases in
+   let new_status =
+     { status with multi_aliases = multi_aliases ; aliases = aliases}
+   in
+   if new_aliases = [] then
+     new_status
+   else
+     let aliases = 
+       DisambiguatePp.aliases_of_domain_and_codomain_items_list new_aliases
+     in
+     let status = 
+       add_lexicon_content (commands_of_aliases aliases) new_status 
+     in
+     let status = add_metadata (deps_of_aliases aliases) status in
+     status
+
 
-let rec eval_command status cmd =
+let rec eval_command ?(mode=LexiconAst.WithPreferences) status cmd =
  let notation_ids' = CicNotation.process_notation cmd in
  let status =
    { status with notation_ids = notation_ids' @ status.notation_ids } in
   match cmd with
-  | LexiconAst.Include (loc, baseuri) ->
+  | LexiconAst.Include (loc, baseuri, mode, fullpath) ->
      let lexiconpath_rw, lexiconpath_r = 
-       LibraryMisc.lexicon_file_of_baseuri ~writable:true ~baseuri,
-       LibraryMisc.lexicon_file_of_baseuri ~writable:false ~baseuri
+       LibraryMisc.lexicon_file_of_baseuri 
+         ~must_exist:false ~writable:true ~baseuri,
+       LibraryMisc.lexicon_file_of_baseuri 
+         ~must_exist:false ~writable:false ~baseuri
      in
      let lexiconpath = 
        if Sys.file_exists lexiconpath_rw then lexiconpath_rw else
          if Sys.file_exists lexiconpath_r then lexiconpath_r else
-          raise (IncludedFileNotCompiled lexiconpath_rw)
+          raise (IncludedFileNotCompiled (lexiconpath_rw,fullpath))
      in
      let lexicon = LexiconMarshal.load_lexicon lexiconpath in
-     let status = List.fold_left eval_command status lexicon in
+     let status = List.fold_left (eval_command ~mode) status lexicon in
       if Helm_registry.get_bool "db.nodb" then
        let metadatapath_rw, metadatapath_r = 
-         LibraryMisc.metadata_file_of_baseuri ~baseuri ~writable:true,
-         LibraryMisc.metadata_file_of_baseuri ~baseuri ~writable:false
+         LibraryMisc.metadata_file_of_baseuri 
+           ~must_exist:false ~baseuri ~writable:true,
+         LibraryMisc.metadata_file_of_baseuri 
+           ~must_exist:false ~baseuri ~writable:false
        in
        let metadatapath =
         if Sys.file_exists metadatapath_rw then metadatapath_rw else
@@ -149,7 +160,7 @@ let rec eval_command status cmd =
          [DisambiguateTypes.Num instance,
           DisambiguateChoices.lookup_num_by_dsc desc]
      in
-      set_proof_aliases status diff
+      set_proof_aliases mode status diff
   | LexiconAst.Interpretation (_, dsc, (symbol, _), cic_appl_pattern) as stm ->
       let status = add_lexicon_content [stm] status in
       let uris =
@@ -161,8 +172,12 @@ let rec eval_command status cmd =
        [DisambiguateTypes.Symbol (symbol, 0),
          DisambiguateChoices.lookup_symbol_by_dsc symbol dsc]
       in
-      let status = set_proof_aliases status diff in
+      let status = set_proof_aliases mode status diff in
       let status = add_metadata uris status in
       status
   | LexiconAst.Notation _ as stm -> add_lexicon_content [stm] status
 
+let eval_command = eval_command ?mode:None
+
+let set_proof_aliases  = set_proof_aliases LexiconAst.WithPreferences
+