let main () =
if From_parameters.PathDeps.get ()
then Db.From.Record_From_Callbacks.extend check_pathdeps;
let not_quiet = From_parameters.verbose_atleast 1 in
let forcedeps = From_parameters.ForceDeps.get () in
let forcecalldeps = From_parameters.ForceCallDeps.get () in
if forcedeps then begin
!Db.From.compute_all ();
From_parameters.feedback "====== DEPENDENCIES COMPUTED ======";
display_aux (fun fm -> From_parameters.result fm);
From_parameters.feedback "====== END OF DEPENDENCIES ======"
end;
if forcecalldeps then !Db.From.compute_all_calldeps ();
if not_quiet && forcecalldeps then begin
From_parameters.feedback "====== DISPLAYING CALLWISE DEPENDENCIES ======";
!Db.From.Callwise.iter
(fun ki d ->
let id,typ =
match ki with
| Cil_types.Kglobal ->
"entry point",
Kernel_function.get_type (fst (Globals.entry_point ()))
| Cil_types.Kstmt s ->
let f =
try
Kernel_function.Hptset.min_elt
(Db.Value.call_to_kernel_function s)
with Not_found -> assert false
in
let id =
Pretty_utils.sfprintf "%a at %a (statement %d)"
Kernel_function.pretty f
pretty_loc_simply (Kstmt s)
s.Cil_types.sid
in
id,
Kernel_function.get_type f
in
From_parameters.result
"@[call %s:@\n%a@\n@]@ "
id (Function_Froms.pretty_with_type typ) d);
From_parameters.feedback "====== END OF CALLWISE DEPENDENCIES ======";
end