let get_strategy localizable : strategy =
match localizable with
| Pretty_source.PStmt( kf , stmt )
| Pretty_source.PLval( Some kf , Kstmt stmt , _ )
| Pretty_source.PTermLval( Some kf , Kstmt stmt , _ )
->
begin
match stmt with
| { skind=Instr(Call(_,e,_,_)) } ->
begin
match WpStrategy.get_called_kf e with
| None -> Snone
| Some called ->
Scall {
sc_caller = kf ;
sc_called = called ;
sc_callat = stmt ;
}
end
| _ -> Snone
end
| Pretty_source.PVDecl (Some kf,{vglob=true}) ->
Scode {
sp_target = "function contract" ;
sp_kf = Some kf ;
sp_bhv = [] ;
sp_ip = None ;
}
| Pretty_source.PIP ip ->
Scode {
sp_target = kind_of_property ip ;
sp_kf = Property.get_kf ip ;
sp_bhv =
Extlib.may_map
~dft:[]
(fun x -> [ x.b_name ])
(Property.get_behavior ip) ;
sp_ip = Some ip ;
}
| Pretty_source.PVDecl _
| Pretty_source.PLval _
| Pretty_source.PTermLval _
| Pretty_source.PGlobal _ ->
Snone