let rec lval_substitution (lv:exp_node) (removel:string list) (addl:Cil_types.exp_node list) =
match lv with
| Lval(lh,off) ->
begin
match lh with
| Mem _ as t-> Lval(t,off)
| Var vi ->
match removel, addl with
| [], [] -> lv
| r::rl,a::al ->
if(String.compare vi.vname r)=0
then a
else lval_substitution lv rl al
| _,_ -> Aorai_option.fatal "removel and addl parameters must have the same size."
end
| _ -> Aorai_option.fatal "lval_substitution have to be called with a Lval parameter"