aboutsummaryrefslogtreecommitdiffhomepage
path: root/ide/coq.ml
diff options
context:
space:
mode:
authorGravatar gareuselesinge <gareuselesinge@85f007b7-540e-0410-9357-904b9bb8a0f7>2013-10-01 15:35:29 +0000
committerGravatar gareuselesinge <gareuselesinge@85f007b7-540e-0410-9357-904b9bb8a0f7>2013-10-01 15:35:29 +0000
commitde474dd4c4a3854bd94f7b12acbfad619af37d52 (patch)
tree64fbf52d0582df335ba6b5a547574ce3324001cc /ide/coq.ml
parent62501d5c78c21ad9097d4de4b3c4b79819546ffe (diff)
CoqIDE: do not fail hard if a message is asynchronous
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16826 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'ide/coq.ml')
-rw-r--r--ide/coq.ml14
1 files changed, 10 insertions, 4 deletions
diff --git a/ide/coq.ml b/ide/coq.ml
index 96a19f317..5d8efebd1 100644
--- a/ide/coq.ml
+++ b/ide/coq.ml
@@ -344,7 +344,7 @@ let open_process_pid prog args =
(fun () -> Unix.close top2ide_r; Unix.close ide2top_w)
exception TubeError
-exception AnswerWithoutRequest
+exception AnswerWithoutRequest of string
let rec check_errors = function
| [] -> ()
@@ -356,8 +356,14 @@ let handle_intermediate_message handle xml =
let level = message.Interface.message_level in
let content = message.Interface.message_content in
let logger = match handle.waiting_for with
- | None -> raise AnswerWithoutRequest
- | Some (_, l) -> l in
+ | Some (_, l) -> l
+ | None -> function
+ | Interface.Error -> Minilib.log ~level:`ERROR
+ | Interface.Info -> Minilib.log ~level:`INFO
+ | Interface.Notice -> Minilib.log ~level:`NOTICE
+ | Interface.Warning -> Minilib.log ~level:`WARNING
+ | Interface.Debug _ -> Minilib.log ~level:`DEBUG
+ in
logger level content
let handle_feedback feedback_processor xml =
@@ -367,7 +373,7 @@ let handle_feedback feedback_processor xml =
let handle_final_answer handle xml =
let () = Minilib.log "Handling coqtop answer" in
let ccb = match handle.waiting_for with
- | None -> raise AnswerWithoutRequest
+ | None -> raise (AnswerWithoutRequest (Xml_printer.to_string_fmt xml))
| Some (c, _) -> c in
let () = handle.waiting_for <- None in
with_ccb ccb { bind_ccb = fun (c, f) -> f (Serialize.to_answer c xml) }