let refresh_vars new_var old_var =
  let assoc = List.combine old_var new_var in
  let visit = object
    inherit Visitor.frama_c_inplace
    method vvrbl vi =
      try ChangeTo (snd (List.find (fun (x,_) -> x.vid = vi.vid) assoc))
      with Not_found -> SkipChildren
    method vlogic_var_use vi =
      match vi.lv_origin with
          None -> SkipChildren
        | Some vi ->
            begin
              try
                let vi'=
                  snd (List.find (fun (x,_) -> x.vid = vi.vid) assoc)
                in
                ChangeTo (Extlib.the vi'.vlogic_var_assoc)
              with Not_found -> SkipChildren
                | Invalid_argument _ ->
                    Kernel.abort
                      "Loop unrolling: cannot find new representative for local var %s"
                      vi.vname
            end
  end
  in Visitor.visitFramacStmt visit