let iter (inspector:inspector) =
begin
let properties = ref Property.Set.empty in
Property_status.iter
(fun ip -> if not (never_tried ip) then add_property properties ip) ;
let globals = ref Property.Set.empty in
let functions = ref Kernel_function.Map.empty in
Property.Set.iter
(fun ip ->
match Property.get_kf ip with
| None -> globals := Property.Set.add ip !globals
| Some kf ->
if not (Ast_info.is_frama_c_builtin (Kernel_function.get_name kf))
then try
let fips = Kernel_function.Map.find kf !functions in
fips := Property.Set.add ip !fips
with Not_found ->
let ips = Property.Set.singleton ip in
functions := Kernel_function.Map.add kf (ref ips) !functions)
!properties ;
let report s f ips = if not (Property.Set.is_empty ips) then
( s () ; Property.Set.iter (fun ip -> f ip (Consolidation.get ip)) ips )
in
if Property.Set.is_empty !globals && Kernel_function.Map.is_empty !functions then
inspector#empty
else
begin
inspector#started ;
report (fun () -> inspector#global_section) inspector#property !globals ;
Kernel_function.Map.iter
(fun kf ips ->
report (fun () -> inspector#function_section kf) inspector#property !ips)
!functions ;
inspector#finished ;
end
end