method vfunc f =
let formals,locals,pairs =
List.fold_right (fun v (fl,ll,pl) ->
if retypable_var v then
let newv = copyVarinfo v ("v_" ^ v.vname) in
newv.vaddrof <- false;
v.vformal <- false;
(newv::fl,v::ll,(v,newv)::pl)
else (v::fl,ll,pl)
) f.sformals ([],[],[])
in
varpairs := pairs;
setFormals f formals;
f.slocals <- locals @ f.slocals;
List.iter retype_var f.slocals;
List.iter (fun v ->
if VarinfoSet.mem v !varset then
begin
let ast = mkalloc_statement v (pointed_type v.vtype) v.vdecl in
add_pending_statement ~beginning:true ast;
if not (VarinfoHashtbl.mem return_vars v) then
let fst = mkfree_statement v v.vdecl in
add_pending_statement ~beginning:false fst
end;
begin try
let fv = List.assoc v !varpairs in
let lhs = mkMem (new_exp (Lval(Var v,NoOffset))) NoOffset in
let rhs = new_exp (Lval(Var fv,NoOffset)) in
let assign = mkassign_statement lhs rhs v.vdecl in
add_pending_statement ~beginning:true assign
with Not_found -> () end
) f.slocals;
DoChildren