(* implement module's API *)
let only_one_pass = ref false;;
+let use_library = ref false;;
let passes () = (* <fresh_instances?, aliases, coercions?> *)
if !only_one_pass then
[ (true, `Mono, false) ]
+ else if !use_library then
+ [ (true, `Library, false);
+ (* for demo to reduce the number of interpretations *)
+ (true, `Library, true);
+ ]
else
[ (true, `Mono, false);
(true, `Multi, false);
(true, `Mono, true);
(true, `Multi, true);
- (true, `Library, false);
- (* for demo to reduce the number of interpretations *)
- (true, `Library, true);
]
;;
tree_store#get ~row:iter ~column:interp_no_col
end
+exception UseLibrary;;
let rec interactive_error_interp ~all_passes
(source_buffer:GSourceView.source_buffer) notify_exn offset errorll filename
return ()
);
connect_button dialog#disambiguationErrorsMoreErrors
- (fun _ -> return () ;
- interactive_error_interp ~all_passes:true source_buffer
- notify_exn offset errorll filename);
+ (fun _ -> return () ; raise UseLibrary);
connect_button dialog#disambiguationErrorsCancelButton fail;
dialog#disambiguationErrors#show ();
GtkThread.main ()
let thread_main =
fun () ->
lock_world ();
+ let saved_use_library= !MultiPassDisambiguator.use_library in
try
+ MultiPassDisambiguator.use_library := !all_disambiguation_passes;
f ();
+ MultiPassDisambiguator.use_library := saved_use_library;
unlock_world ()
with
| MultiPassDisambiguator.DisambiguationError (offset,errorll) ->
~all_passes:!all_disambiguation_passes source_buffer
notify_exn offset errorll (s())#filename
with
- exc -> notify_exn exc);
+ | UseLibrary ->
+ MultiPassDisambiguator.use_library := true;
+ (try f ()
+ with
+ | MultiPassDisambiguator.DisambiguationError (offset,errorll) ->
+ interactive_error_interp ~all_passes:true source_buffer
+ notify_exn offset errorll (s())#filename
+ | exc ->
+ notify_exn exc);
+ | exc -> notify_exn exc);
+ MultiPassDisambiguator.use_library := saved_use_library;
unlock_world ()
| exc ->
notify_exn exc;