let set_po_result g r =
try
let pi = ( g.po_model , WpAnnot.property_of_id g.po_pid ) in
let proof =
try Hproof.find system.proofs pi
with Not_found ->
let proof = WpAnnot.create_proof g.po_pid in
Hproof.add system.proofs pi proof ; proof
in
let hids = List.map (fun d -> d.dep_pid) g.po_dep in
if r = Valid then WpAnnot.add_proof proof g.po_pid hids ;
let valid = if WpAnnot.is_proved proof then True else Maybe in
let updater =
try Hashtbl.find updaters g.po_updater
with Not_found ->
Wp_parameters.fatal
"No status-updater found for model '%s'" g.po_model
in
let status = Checked{emitter=g.po_updater;valid=valid} in
let target = WpAnnot.target proof in
let depends = WpAnnot.dependencies proof in
ignore (updater target depends status) ;
if valid=True then WpAnnot.consolidate_loop proof ;
with
| Log.AbortFatal plugin ->
Wp_parameters.failure
"Update-status failed (problem in %s)" plugin
| err ->
Wp_parameters.failure
"Update-status failed (%s)" (Printexc.to_string err);
raise err