let analyze_ocaml_compilation on_problem text =
let lines = Ed_misc.split_string text ['\n'] in
let rec iter = function
[] | [_] -> ()
| line1 :: line2 :: q ->
let f file line start stop =
let kind =
try
let f c =
let line_len = String.length line2 in
let warn_len = String.length "Warning X: " in
let msg = String.sub line2 warn_len (line_len - warn_len) in
`Warning (c, msg)
in
Scanf.sscanf line2 "Warning %c: " f
with _ -> `Error line2
in
let pb =
{ pb_file = file ;
pb_line = line ;
pb_start = start ;
pb_stop = stop ;
pb_kind = kind ;
}
in
if on_problem pb then iter q else ()
in
try Scanf.sscanf line1 "File %S, line %d, characters %d-%d:" f
with Scanf.Scan_failure _ -> iter (line2 :: q)
in
iter lines