let get_ext_preconditions kf spec =
Wp_parameters.debug ~level:3 "[get_ext_preconditions] for %a@."
Kernel_function.pretty_name kf;
let labels = NormAtLabels.labels_fct_pre in
let add acc id p =
try
let p = NormAtLabels.preproc_annot labels p in
Wp_parameters.debug ~level:3 "take called precond : %a@."
!Ast_printer.d_predicate_named p;
(id,p) :: acc
with e ->
let txt = Pretty_utils.sfprintf "precondition %s" (prop_txt id) in
NormAtLabels.catch_label_error e txt "annotation"; acc
in
let add_behav acc b =
let assumes = Logic_const.pold (build_bhv_assumes b) in
let add_pre acc pre =
let id = mk_pre_id kf Kglobal b pre in
let p = Logic_const.pred_of_id_pred pre in
let p = Logic_const.pimplies (assumes, p) in
add acc id p
in
List.fold_left add_pre acc b.b_requires
in
let acc = List.fold_left add_behav [] spec.spec_behavior in
if acc = [] then
Wp_parameters.debug ~level:3 "no called precond for %a@."
Kernel_function.pretty_name kf;
acc