let get_id_prop_strategies ?(assigns=WithAssigns) p =
debug "[get_id_prop_strategies] %s@."
(WpPropId.id_prop_txt p);
match p with
| Property.IPCodeAnnot (kf,_,ca) ->
let bhvs = match ca.annot_content with
| AAssert (l, _) | AInvariant (l, _, _) | AAssigns (l, _) -> l
| _ -> []
in get_strategies assigns kf bhvs None (IdProp p)
| Property.IPAssigns (kf, _, Property.Id_code_annot _, _)
| Property.IPDecrease (kf,_,_,_) ->
let bhvs = [ Cil.default_behavior_name ] in
get_strategies assigns kf bhvs None (IdProp p)
| Property.IPPredicate (Property.PKRequires _, _kf, Kglobal, _p) ->
get_precond_strategies p
| Property.IPFrom id_from ->
[ WpFroms.get_strategy_for_from id_from ]
| _ ->
let strategies = match Property.get_kf p with
| None -> Wp_parameters.warning
"WP of property outside functions: ignore %s"
(WpPropId.id_prop_txt p); []
| Some kf ->
let ki = Some (Property.get_kinstr p) in
let bhv = match Property.get_behavior p with
| None -> Cil.default_behavior_name
| Some fb -> fb.b_name
in get_strategies assigns kf [bhv] ki (IdProp p)
in strategies