let pp_fun_set_by_file fmt set =
let add_binding map filename fvinfo =
let set =
try
let x = Datatype.String.Map.find filename map in
Varinfo.Set.add fvinfo x
with Not_found -> Varinfo.Set.add fvinfo Varinfo.Set.empty
in Datatype.String.Map.add filename set map
in
let map =
Varinfo.Set.fold
(fun fvinfo acc ->
if Metrics_base.consider_function fvinfo then
let fname = Metrics_base.file_of_vinfodef fvinfo in
add_binding acc fname fvinfo
else acc
) set Datatype.String.Map.empty
in
Format.fprintf fmt "@[<v 0>";
Datatype.String.Map.iter
(fun fname fvinfoset ->
Format.fprintf fmt "@[<hov 2><%s>:@ %a@]@ " fname
(fun fmt vinfoset ->
Varinfo.Set.iter
(fun vinfo ->
Format.fprintf fmt "%a;@ " !Ast_printer.d_var vinfo)
vinfoset)
fvinfoset
) map;
Format.fprintf fmt "@]"