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