let get_precond_strategies p =
debug "[get_precond_strategies] %s@."
(WpPropId.id_prop_txt p);
match p with
| Property.IPPredicate (Property.PKRequires b, kf, Kglobal, _) ->
let strategies =
if WpStrategy.is_main_init kf then
get_strategies NoAssigns kf [b.b_name] None (IdProp p)
else []
in
let call_sites = Kernel_function.find_syntactic_callsites kf in
let add_call_pre_stategy acc (kf_caller, stmt) =
let asked = CallPre (stmt, Some p) in
let strategies = get_strategies NoAssigns kf_caller [] None asked in
strategies @ acc
in
if call_sites = [] then
(Wp_parameters.warning
"no direct call sites for '%a': cannot check pre-conditions"
Kernel_function.pretty kf;
strategies)
else List.fold_left add_call_pre_stategy strategies call_sites
| _ ->
invalid_arg "[get_precond_strategies] not a function precondition"