handle directive errors
Ignore-this: f9d34b11616ac661ed173d247b41cfe1 darcs-hash:20120217105127-c41ad-c23ea68992ece18a620ae19947307497935c7fef
This commit is contained in:
parent
02e8648628
commit
dcdab7ac0f
|
@ -328,8 +328,20 @@ let rec loop term =
|
||||||
let cols = (LTerm.size term).cols in
|
let cols = (LTerm.size term).cols in
|
||||||
update_margin Format.std_formatter cols;
|
update_margin Format.std_formatter cols;
|
||||||
update_margin Format.err_formatter cols;
|
update_margin Format.err_formatter cols;
|
||||||
(* No exception can be raised at this stage. *)
|
(try
|
||||||
ignore (Toploop.execute_phrase true Format.std_formatter phrase);
|
ignore (Toploop.execute_phrase true Format.std_formatter phrase)
|
||||||
|
with exn ->
|
||||||
|
(* The only possible errors are directive errors. *)
|
||||||
|
let msg = UTop.get_message Errors.report_error exn in
|
||||||
|
(* Skip the dumb location. *)
|
||||||
|
let msg =
|
||||||
|
try
|
||||||
|
let idx = String.index msg '\n' + 1 in
|
||||||
|
String.sub msg idx (String.length msg - idx)
|
||||||
|
with Not_found ->
|
||||||
|
msg
|
||||||
|
in
|
||||||
|
Lwt_main.run (print_error msg));
|
||||||
loop term
|
loop term
|
||||||
| None ->
|
| None ->
|
||||||
loop term
|
loop term
|
||||||
|
@ -505,13 +517,26 @@ module Emacs(M : sig end) = struct
|
||||||
let process_input add_to_history eos_is_error =
|
let process_input add_to_history eos_is_error =
|
||||||
let input = read_data () in
|
let input = read_data () in
|
||||||
match parse_and_check input eos_is_error with
|
match parse_and_check input eos_is_error with
|
||||||
| UTop.Value phrase ->
|
| UTop.Value phrase -> begin
|
||||||
send "accept" "";
|
send "accept" "";
|
||||||
if add_to_history then LTerm_history.add UTop.history input;
|
if add_to_history then LTerm_history.add UTop.history input;
|
||||||
(* Add Lwt_main.run to toplevel evals. *)
|
(* Add Lwt_main.run to toplevel evals. *)
|
||||||
let phrase = if UTop.get_auto_run_lwt () then insert_lwt_main_run phrase else phrase in
|
let phrase = if UTop.get_auto_run_lwt () then insert_lwt_main_run phrase else phrase in
|
||||||
(* No exception can be raised at this stage. *)
|
try
|
||||||
ignore (Toploop.execute_phrase true Format.std_formatter phrase)
|
ignore (Toploop.execute_phrase true Format.std_formatter phrase)
|
||||||
|
with exn ->
|
||||||
|
(* The only possible errors are directive errors. *)
|
||||||
|
let msg = UTop.get_message Errors.report_error exn in
|
||||||
|
(* Skip the dumb location. *)
|
||||||
|
let msg =
|
||||||
|
try
|
||||||
|
let idx = String.index msg '\n' + 1 in
|
||||||
|
String.sub msg idx (String.length msg - idx)
|
||||||
|
with Not_found ->
|
||||||
|
msg
|
||||||
|
in
|
||||||
|
List.iter (send "stderr") (split_at ~trim:true '\n' msg)
|
||||||
|
end
|
||||||
| UTop.Error (locs, msg) ->
|
| UTop.Error (locs, msg) ->
|
||||||
send "accept" (String.concat "," (List.map (fun (a, b) -> Printf.sprintf "%d,%d" a b) locs));
|
send "accept" (String.concat "," (List.map (fun (a, b) -> Printf.sprintf "%d,%d" a b) locs));
|
||||||
if add_to_history then LTerm_history.add UTop.history input;
|
if add_to_history then LTerm_history.add UTop.history input;
|
||||||
|
|
Loading…
Reference in New Issue