=
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! *)
UriManager.buri_of_uri (UriManager.uri_of_string v) =
baseuri
with
- UriManager.IllFormedUri _ -> false (* v is a description, not a URI *)
+ UriManager.IllFormedUri _ ->
+ try
+ (* this too! *)
+ let NReference.Ref (uri,_) = NReference.reference_of_string v in
+ let ouri = NCic2OCic.ouri_of_nuri uri in
+ UriManager.buri_of_uri ouri = baseuri
+ with
+ NReference.IllFormedReference _ ->
+ false (* v is a description, not a URI *)
in
if b then
lexicon_status,acc
((new_grafite_status,new_lexicon_status),None)::intermediate_states
exception TryingToAdd of string
-exception EnrichedWithLexiconStatus of exn * LexiconEngine.status
+exception EnrichedWithStatus of exn * LexiconEngine.status * GrafiteTypes.status
let out = ref ignore
(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
watch_statuses lexicon_status grafite_status ;
false, lexicon_status, grafite_status, (new_statuses @ statuses))
with exn when not matita_debug ->
- raise (EnrichedWithLexiconStatus (exn, lexicon_status))
+ raise (EnrichedWithStatus (exn, lexicon_status, grafite_status))
in
if stop then s else loop l g s
in