diff options
author | 2013-09-04 18:32:28 +0000 | |
---|---|---|
committer | 2013-09-04 18:32:28 +0000 | |
commit | 5ba4818ee70fb19f22d76feeac3594f92b9bf374 (patch) | |
tree | e99e7502d7dea10c6750da10295fa5b945d632d7 | |
parent | 36e670c658274ce37d8d352032879db53897165c (diff) |
More robust argument setter in CoqIDE. It does not crash anymore on bad
arguments.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16761 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r-- | ide/coq.ml | 3 | ||||
-rw-r--r-- | ide/coqide.ml | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/ide/coq.ml b/ide/coq.ml index fa2f2dcf3..be35ebe1a 100644 --- a/ide/coq.ml +++ b/ide/coq.ml @@ -107,8 +107,7 @@ let rec filter_coq_opts args = filtered_args := read_all_lines oc; errlines := read_all_lines ec; match Unix.close_process_full (oc,ic,ec) with - | Unix.WEXITED 0 -> - List.iter check_remaining_opt !filtered_args; !filtered_args + | Unix.WEXITED 0 -> !filtered_args | Unix.WEXITED 127 -> asks_for_coqtop args | _ -> display_coqtop_answer cmd (!filtered_args @ !errlines) with Sys_error _ -> asks_for_coqtop args diff --git a/ide/coqide.ml b/ide/coqide.ml index 0b6f9aa80..888f07128 100644 --- a/ide/coqide.ml +++ b/ide/coqide.ml @@ -746,8 +746,18 @@ let coqtop_arguments sn = let ok = GButton.button ~stock:`OK ~packing:box#add () in let ok_cb () = let nargs = CString.split ' ' entry#text in - let () = if nargs <> args then Coq.set_arguments coqtop nargs in - dialog#destroy () + if nargs <> args then + let failed = Coq.filter_coq_opts nargs in + match failed with + | [] -> + let () = Coq.set_arguments coqtop nargs in + dialog#destroy () + | args -> + let args = String.concat " " args in + let msg = Printf.sprintf "Invalid arguments: %s" args in + let () = sn.messages#clear in + sn.messages#push Interface.Error msg + else dialog#destroy () in let _ = entry#connect#activate ok_cb in let _ = ok#connect#clicked ok_cb in |