let compute_entry_point kf ~library =
Kf_state.mark_as_called kf;
Value_parameters.feedback "Analyzing a%scomplete application starting at %a"
(if library then "n in" else " ")
Kernel_function.pretty_name kf;
let initial_state_globals =
if Db.Value.globals_use_supplied_state () then (
let r = Db.Value.globals_state () in
Value_parameters.feedback "Initial state supplied by the user";
Value_parameters.debug "@[<hov 0>Values of globals@\n%a@]"
Db.Value.pretty_state_without_null r;
r)
else (
Value_parameters.feedback "Computing initial state";
let r = Db.Value.globals_state () in
Value_parameters.feedback "Initial state computed";
Value_parameters.result
"@[<hov 0>Values of globals at initialization@\n%a@]"
Db.Value.pretty_state_without_null r;
r
) in
Db.Value.update_table Kglobal initial_state_globals;
Mark_noresults.run();
let with_formals = match Db.Value.fun_get_args () with
| None -> initial_state_formals kf initial_state_globals
| Some formals -> actualize_formals kf initial_state_globals
(List.map (fun f -> (), f) formals)
in
Db.Value.Call_Value_Callbacks.apply (with_formals, [ kf, Kglobal ]);
let result =
compute_with_initial_state kf ~call_kinstr:Kglobal with_formals
in
Value_parameters.feedback "done for function %a"
Kernel_function.pretty_name kf;
result