]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matitaDisambiguator.ml
snapshot, notably:
[helm.git] / helm / matita / matitaDisambiguator.ml
index 15f21e50909a934ee44747575cf6f6ed52e8c6b6..178c7d8c7f18372fc4c1b768470c4e09d2183921 100644 (file)
@@ -31,10 +31,12 @@ class parserr () =
     method parseTactical = CicTextualParser2.parse_tactical
   end
 
-class disambiguator
-  ~parserr ~dbd ~(chooseUris: MatitaTypes.choose_uris_callback)
-  ~(chooseInterp: MatitaTypes.choose_interp_callback) ()
-  =
+let parserr () = new parserr ()
+let parserr_instance = MatitaMisc.singleton parserr
+
+class disambiguator () =
+  let _chooseUris = ref mono_uris_callback in
+  let _chooseInterp = ref mono_interp_callback in
   let disambiguate_term =
     let module Callbacks =
       struct
@@ -42,15 +44,16 @@ class disambiguator
           ~selection_mode ?ok ?(enable_button_for_non_vars = true) ~title ~msg
           ~id uris
         =
-          chooseUris ~selection_mode ~title ~msg
+          !_chooseUris ~selection_mode ~title ~msg
             ~nonvars_button:enable_button_for_non_vars uris
 
-        let interactive_interpretation_choice = chooseInterp
+        let interactive_interpretation_choice interp = !_chooseInterp interp
+
         let input_or_locate_uri ~(title:string) ?id =
           (* Zack: I try to avoid using this callback. I therefore assume that
           * the presence of an identifier that can't be resolved via "locate"
           * query is a syntax error *)
-          let msg = match id with Some id -> id | _ -> "" in
+          let msg = match id with Some id -> id | _ -> "_" in
           raise (Unbound_identifier msg)
       end
     in
@@ -58,14 +61,21 @@ class disambiguator
     Disambiguator.disambiguate_term 
   in
   object (self)
-    val mutable parserr: parserr = parserr
-    method parserr = parserr
-    method setParserr p = parserr <- p
-
     val mutable _env = DisambiguateTypes.Environment.empty
     method env = _env
     method setEnv e = _env <- e
 
+    method chooseUris = !_chooseUris
+    method setChooseUris f = _chooseUris := f
+
+    method chooseInterp = !_chooseInterp
+    method setChooseInterp f = _chooseInterp := f
+
+    val parserr = parserr_instance ()
+    method parserr = parserr
+
+    val dbd = MatitaMisc.dbd_instance ()
+
     method disambiguateTermAst ?(context = []) ?(metasenv = []) ?env termAst =
       let (save_state, env) =
         match env with
@@ -91,3 +101,6 @@ class disambiguator
         (parserr#parseTerm stream)
   end
 
+let disambiguator () = new disambiguator ()
+let instance = MatitaMisc.singleton disambiguator 
+