method compute vi =
(* Initialisation *)
Stack.clear todo;
Stack.push vi todo;
Varinfo.Hashtbl.clear visited;
callable <- Varinfo.Set.singleton vi;
(* Reach fixpoint *)
while not (Stack.is_empty todo) do
let vi = Stack.pop todo in
if not (self#already_seen vi) then
begin
Metrics_parameters.Metrics.debug "Coverage: visiting %s" vi.vname;
Varinfo.Hashtbl.add visited vi ();
if Cil.isFunctionType vi.vtype
then self#visit_function vi
else ignore (self#visit_non_function_var vi)
end;
done;
callable