44 lines
1.2 KiB
OCaml
44 lines
1.2 KiB
OCaml
let print_exn = function
|
|
Out_of_memory ->
|
|
prerr_string "Out of memory\n"
|
|
| Match_failure(file, first_char, last_char) ->
|
|
prerr_string "Pattern matching failed, file ";
|
|
prerr_string file;
|
|
prerr_string ", chars "; prerr_int first_char;
|
|
prerr_char '-'; prerr_int last_char; prerr_char '\n'
|
|
| x ->
|
|
prerr_string "Uncaught exception: ";
|
|
prerr_string (Obj.magic(Obj.field (Obj.field (Obj.repr x) 0) 0));
|
|
if Obj.size (Obj.repr x) > 1 then begin
|
|
prerr_char '(';
|
|
for i = 1 to Obj.size (Obj.repr x) - 1 do
|
|
if i > 1 then prerr_string ", ";
|
|
let arg = Obj.field (Obj.repr x) i in
|
|
if not (Obj.is_block arg) then
|
|
prerr_int (Obj.magic arg : int)
|
|
else if Obj.tag arg = 253 then begin
|
|
prerr_char '"';
|
|
prerr_string (Obj.magic arg : string);
|
|
prerr_char '"'
|
|
end else
|
|
prerr_char '_'
|
|
done;
|
|
prerr_char ')'
|
|
end;
|
|
prerr_char '\n'
|
|
|
|
let print fct arg =
|
|
try
|
|
fct arg
|
|
with x ->
|
|
print_exn x;
|
|
raise x
|
|
|
|
let catch fct arg =
|
|
try
|
|
fct arg
|
|
with x ->
|
|
flush stdout;
|
|
print_exn x;
|
|
exit 2
|