method private mk_new_behavior_name () =
    let error () =
      (* if index becomes 0 (again): serious problem, but unlikely to happen *)
      error "Generated too many behavior names." ;
      assert false
    in
    let kf = self#get_current_kf () (* get englobing kf *)
    in let known_behaviors = Kernel_function.all_function_behaviors kf
    in let rec aux_new_name i =
        let name = rte_prefix ^ "_" ^ (string_of_int i)
        in if List.mem name known_behaviors then (
            let nindex = i + 1
            in if nindex = 0 then error ()
                (* if index becomes 0 (again): serious problem, but unlikely to happen *)
              else aux_new_name nindex
          ) else (name, i)
    in
    let (name, new_index) =
      try
        let i = H.find bhv_index_table kf
        in
        let nindex = i+1
        in if nindex = 0 then error ()
          else aux_new_name nindex
      with Not_found ->
        aux_new_name 0
    in
      H.replace bhv_index_table kf new_index ;
      name