- object (self)
- val mutable parserr: parserr = parserr
- method parserr = parserr
- method setParserr p = parserr <- p
-
- method disambiguateTermAst
- ~context ~metasenv ?(env = DisambiguateTypes.Environment.empty) termAst
- =
- disambiguate_term mqiconn context metasenv termAst ~aliases:env
-
- method disambiguateTerm ~context ~metasenv ?env stream =
- self#disambiguateTermAst ~context ~metasenv ?env
- (parserr#parseTerm stream)
- end
+ let try_pass (fresh_instances, aliases, use_coercions) =
+ CoercDb.use_coercions := use_coercions;
+ f ~fresh_instances ~aliases thing
+ in
+ let rec aux =
+ function
+ | [ pass ] -> try_pass pass
+ | hd :: tl ->
+ (try
+ try_pass hd
+ with Disambiguate.NoWellTypedInterpretation ->
+ let (_, user_asked) as res = aux tl in
+ if user_asked then res else set_aliases aliases res)
+ | [] -> assert false
+ in
+ let saved_use_coercions = !CoercDb.use_coercions in
+ try
+ let res = aux passes in
+ CoercDb.use_coercions := saved_use_coercions;
+ res
+ with exn ->
+ CoercDb.use_coercions := saved_use_coercions;
+ raise exn
+
+let set_aliases aliases (choices, user_asked) =
+ (List.map (fun (_, a, b, c) -> aliases, a, b, c) choices),
+ user_asked
+
+let disambiguate_term ~dbd ~context ~metasenv ?initial_ugraph ~aliases term =
+ let f =
+ Disambiguator.disambiguate_term ~dbd ~context ~metasenv ?initial_ugraph
+ in
+ disambiguate_thing ~aliases ~f ~set_aliases term
+
+let disambiguate_obj ~dbd ~aliases ~uri obj =
+ let f = Disambiguator.disambiguate_obj ~dbd ~uri in
+ disambiguate_thing ~aliases ~f ~set_aliases obj