]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/matitaEngine.ml
Bug fixed: variable capture in previous commit prevented all aliases insertion.
[helm.git] / helm / software / matita / matitaEngine.ml
index d0e1c1acb989185c393ace5c27e9a9af8ffef7da..5468c863a97f8ac1af856d9f17b7cde2aa850257 100644 (file)
@@ -63,19 +63,40 @@ let eval_ast ?do_heavy_checks lexicon_status
 =
  let lexicon_status_ref = ref lexicon_status in
  let baseuri = GrafiteTypes.get_baseuri grafite_status in
+ let changed_lexicon = ref false in
+ let wrap f x = changed_lexicon := true; f x in
+ let grafite_status = 
+   match grafite_status.GrafiteTypes.ng_status with
+   | GrafiteTypes.CommandMode _ -> 
+      { grafite_status with GrafiteTypes.ng_status = 
+         GrafiteTypes.CommandMode lexicon_status }
+   | GrafiteTypes.ProofMode s -> 
+      { grafite_status with GrafiteTypes.ng_status = 
+         GrafiteTypes.ProofMode 
+          { s with NTacStatus.istatus = { s.NTacStatus.istatus with NTacStatus.lstatus =  lexicon_status }}}
+ in
  let new_grafite_status,new_objs =
   GrafiteEngine.eval_ast
-   ~disambiguate_tactic:(disambiguate_tactic text prefix_len lexicon_status_ref)
-   ~disambiguate_command:(disambiguate_command lexicon_status_ref)
-   ~disambiguate_macro:(disambiguate_macro lexicon_status_ref)
+   ~disambiguate_tactic:(wrap (disambiguate_tactic text prefix_len lexicon_status_ref))
+   ~disambiguate_command:(wrap (disambiguate_command lexicon_status_ref))
+   ~disambiguate_macro:(wrap (disambiguate_macro lexicon_status_ref))
    ?do_heavy_checks grafite_status (text,prefix_len,ast) in
  let new_lexicon_status =
-  LexiconSync.add_aliases_for_objs !lexicon_status_ref new_objs in
+  if !changed_lexicon then
+   !lexicon_status_ref
+  else
+   match new_grafite_status.GrafiteTypes.ng_status with
+   | GrafiteTypes.CommandMode l -> l
+   | GrafiteTypes.ProofMode s -> s.NTacStatus.istatus.NTacStatus.lstatus
+ in
+ let new_lexicon_status =
+  LexiconSync.add_aliases_for_objs new_lexicon_status new_objs in
  let new_aliases =
   LexiconSync.alias_diff ~from:lexicon_status new_lexicon_status in
  let _,intermediate_states = 
   List.fold_left
-   (fun (lexicon_status,acc) (k,((v,_) as value)) -> 
+   (fun (lexicon_status,acc) (k,value) -> 
+     let v = LexiconAst.description_of_alias value in
      let b =
       try
        (* this hack really sucks! *)
@@ -141,12 +162,8 @@ let eval_from_stream ~first_statement_only ~include_paths
               (fun (_,alias) ->
                 match alias with
                   None -> ()
-                | Some (k,((v,_) as value)) ->
-                   let newtxt =
-                    DisambiguatePp.pp_environment
-                     (DisambiguateTypes.Environment.add k value
-                       DisambiguateTypes.Environment.empty)
-                   in
+                | Some (k,value) ->
+                   let newtxt = LexiconAstPp.pp_alias value in
                     raise (TryingToAdd newtxt)) new_statuses;
             let grafite_status,lexicon_status =
              match new_statuses with