let make_goal prop_id process dsource =
let collect = Datalib.Collector.push () in
let p =
try process ()
with e ->
ignore (Datalib.Collector.pop collect) ;
(* TODO : catch the exception here to not break the wp calculus *)
raise e
in
let warns, depends = Datalib.Collector.pop collect in
let id = incr dnode_cpt; !dnode_cpt in
let dn = {
dn_id = id ;
dn_warn = warns ;
dn_depends = depends ;
dn_source = dsource ;
} in {
g_id = prop_id ;
g_prop = p ;
g_descr = dn ;
}