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