let add_assigns config kind ki bhv_opt src_asgns acc t_asgns =
let id =
match t_asgns.a_fun with
| Assigns_Stmt -> mk_stmt_assigns_id (config.kf, ki, bhv_opt, src_asgns)
| Assigns_Loop -> mk_loop_assigns_id (config.kf, ki, bhv_opt, src_asgns)
| Assigns_FctOut -> mk_fout_assigns_id (config.kf, ki, bhv_opt, src_asgns)
| Assigns_FctExit -> mk_exit_assigns_id (config.kf, ki, bhv_opt, src_asgns)
in
let take_assigns () =
Wp_parameters.debug ~level:3 "take %a %a" pp_id id Wp_error.pp_assigns src_asgns;
Some (id, t_asgns)
in
match kind with
| Ahyp -> {acc with a_hyp = take_assigns ()}
| Agoal ->
if (goal_to_select config id) then
( has_asgn_goal:= true; {acc with a_goal = take_assigns ()} )
else acc
| _ -> Wp_parameters.fatal "Assigns prop can only be Hyp or Goal"