method compute =
begin
exported <- None ;
Wp_error.set_model Descr.name ;
D.clear () ;
let env = Wpo.new_env ~context:Descr.context in
let export = { env=env ; goals=[] } in
List.iter
(fun (cfg,strategies) ->
let kf = Cil2cfg.cfg_kf cfg in
let names = WpAnnot.missing_rte kf in
if names <> [] then
Wp_parameters.warning ~current:false ~once:true
"Missing RTE guards" ;
List.iter
(fun strategy ->
!Db.progress ();
let bhv = strategy.WpAnnot.behavior_name in
let goals,annotations = WP.compute cfg strategy in
if Wp_parameters.Dot.get () then
ignore (Cil2cfg.dot_wp_res cfg Descr.shared annotations) ;
List.iter
(List.iter
(add_goal export kf bhv))
goals
) strategies
) wptasks ;
if export.goals <> [] then
begin
Command.pp_to_file (Wpo.file_for_ctxt ~env)
(fun fmt -> D.iter_all (fun d -> F.pp_decl fmt d)) ;
Command.pp_to_file (Wpo.file_for_env ~env Wpo.why)
(fun fmt -> D.iter_all (fun d -> Why.export_decl fmt d)) ;
Command.pp_to_file (Wpo.file_for_env ~env Wpo.Coq)
(fun fmt ->
Format.fprintf fmt
"Require Import Reals.@\nRequire Import wp.@\nRequire Import %s.@\n"
(Wpo.coq_for_model Descr.shared) ;
D.iter_all (fun d -> Coq.export_decl fmt d)) ;
Command.pp_to_file (Wpo.file_for_env ~env Wpo.AltErgo91)
(fun fmt -> D.iter_all (fun d -> Ergo91.export_decl fmt d)) ;
Command.pp_to_file (Wpo.file_for_env ~env Wpo.AltErgo92)
(fun fmt -> D.iter_all (fun d -> Ergo92.export_decl fmt d)) ;
end
else
Wpo.release_env env ;
export.goals
end