let do_compute
    (goals : Wpo.t Bag.t ref)
    (computer : CfgProof.computer)
    fun_iter assigns behaviors property
    =
  let do_kf kf =
    let cfg, _ = build_cfg kf in
    let annots =
      match behaviors, property with
        | NoneNone ->
            WpAnnot.get_function_strategies ~assigns cfg
        | Some bhvs, None ->
            WpAnnot.get_behavior_strategies ~assigns cfg bhvs
        | _, Some (IdProp p) ->
            WpAnnot.get_id_prop_strategies ~assigns cfg p
        | _, Some (NamedProp p) ->
            WpAnnot.get_prop_strategies ~assigns cfg (behaviors, p)
    in
      if Wp_parameters.Dot.get () then dot_lannots cfg annots;
      computer#add cfg annots
  in
  begin
    fun_iter do_kf ;
    goals := Bag.concat !goals (Bag.list computer#compute) ;
  end