let main () =
let mem_functions = Value_parameters.MemFunctions.get () in
if Value_parameters.MemExecAll.get ()
|| not (Datatype.String.Set.is_empty mem_functions)
then begin
Value_parameters.feedback "====== MEMOIZING FUNCTIONS ======";
Ast.compute ();
Globals.Functions.iter
(fun kf ->
let name = Kernel_function.get_name kf in
if Kernel_function.is_definition kf &&
(Value_parameters.MemExecAll.get ()
|| Datatype.String.Set.mem name mem_functions)
then begin
Value_parameters.feedback "== function %a"
Kernel_function.pretty_name kf;
try
!Db.Value.memoize kf
with Db.Value.Aborted ->
Value_parameters.fatal "Cannot memoize %a: Analysis degenerated@."
Kernel_function.pretty_name kf
end)
end;
if Value_parameters.ForceValues.get () then begin
!Db.Value.compute ();
Value_parameters.result "====== VALUES COMPUTED ======";
end;
let display_val =
Value_parameters.verbose_atleast 1 && Value_parameters.ForceValues.get ()
in
if display_val then
begin
!Db.Semantic_Callgraph.topologically_iter_on_functions
(fun kf ->
if Kernel_function.is_definition kf then
begin
Value_parameters.result "%a" Db.Value.display kf ;
end)
end