4 let mqi_debug_fun = ignore
6 let mqi_handle = MQIConn.init mqi_flags mqi_debug_fun
10 exception Failure of string
11 exception Multiple_interpretations
12 let fail msg = raise (Failure msg)
14 module DisambiguateCallbacks =
16 let output_html ?(append_NL = true) msg =
18 (if append_NL then print_string else print_endline)
19 (Ui_logger.string_of_html_msg msg)
21 let interactive_user_uri_choice
22 ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id =
24 (fun uri -> not (String.sub uri (String.length uri - 4) 4 = ".var"))
26 let interactive_interpretation_choice _ = raise Multiple_interpretations
27 let input_or_locate_uri ~title = fail "Unknown identifier"
30 module Disambiguate' = Disambiguate.Make (DisambiguateCallbacks)
32 let debug_print s = prerr_endline ("^^^^^^ " ^ s)
35 let obj = CicCache.get_obj uri in
36 let (annobj, _, _, ids_to_inner_sorts, _, _, _) =
37 Cic2acic.acic_object_of_cic_object obj
39 let ids_to_uris = Hashtbl.create 1023 in
40 let round_trip annterm =
41 debug_print "(1) acic -> ast";
43 Acic2Ast.ast_of_acic ids_to_inner_sorts ids_to_uris annterm
45 debug_print ("ast: " ^ CicAstPp.pp_term ast);
47 Disambiguate'.disambiguate_term mqi_handle [] [] ast
48 DisambiguateTypes.Environment.empty
50 debug_print ("term: " ^ CicPp.ppterm term)
53 | Cic.AConstant (_, _, _, None, ty, _) ->
54 debug_print "Cic.AConstant (ty)";
56 | Cic.AConstant (_, _, _, Some bo, ty, _) ->
58 debug_print "Cic.AConstant (bo)";
61 debug_print "Cic.AConstant (ty)";
63 | Cic.AVariable (_, _, None, ty, _) ->
64 debug_print "Cic.AVariable (ty)";
66 | Cic.AVariable (_, _, Some bo, ty, _) ->
67 debug_print "Cic.AVariable (bo)";
69 debug_print "Cic.AVariable (ty)";
71 | Cic.ACurrentProof (_, _, _, _, proof, ty, _) ->
72 debug_print "Cic.ACurrentProof (proof)";
74 debug_print "Cic.ACurrentProof (ty)";
76 | Cic.AInductiveDefinition _ ->
77 debug_print "AInductiveDefinition: boh ..."
84 | Multiple_interpretations -> `Maybe
86 prerr_endline (sprintf "Top Level Uncaught Exception: %s"
87 (Printexc.to_string exn));
96 let mode = if Sys.argv.(1) = "-" then `Stdin else `Cmdline in
101 | `Stdin -> input_line stdin
102 | `Cmdline -> Sys.argv.(!idx)
104 printf "Testing URI: %-55s " (uri_str ^ " ..."); flush stdout;
105 let uri = UriManager.uri_of_string uri_str in
106 match test_uri uri with
108 print_endline "
\e[01;32m[ OK ]
\e[00m";
111 print_endline "
\e[01;31m[ FAILED ]
\e[00m";
112 nok := uri_str :: !nok
114 print_endline "
\e[01;33m[ MANY ]
\e[00m";
115 maybe := uri_str :: !maybe
117 with Invalid_argument _ | End_of_file ->
119 print_endline "TestLibrary report";
120 print_endline "Succeeded URIs:";
121 List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !ok);
122 print_endline "Failed URIs:";
123 List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !nok);
124 print_endline "Multiple answers URIs:";
125 List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !maybe);