method vfunc fdec =
if consider_function fdec.svar then
begin
(* Here, we get to a fundec definition.this function has a body,
let's put it to the "function with source" table. *)
local_metrics :=
{!local_metrics with
cfile_name = file_of_fundef fdec;
cfunc_name = fdec.svar.vname;
cfuncs = 1; (* Only one function is indeed being defined here *)};
self#incr_funcs global_metrics;
let fvinfo = fdec.svar in
(if not (VInfoMap.mem fvinfo !fundef_calls) then
(* Never seen before, including never been called *)
self#add_map fundef_calls fvinfo 0);
(* On return record the analysis of the function. *)
Cil.ChangeDoChildrenPost
(fdec,
fun _ ->
begin
if !local_metrics <> empty_metrics
then self#record_and_clear_function_metrics !local_metrics;
fdec;
end
);
end
else Cil.SkipChildren