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"