method vlogic_var_decl lv =
if not (LogicVarHashtbl.mem lvar_to_strawlvar lv) &&
app_term_type isArrayType false lv.lv_type then
begin
LogicVarHashtbl.add lvar_to_array_type lv
(force_app_term_type (fun x -> x) lv.lv_type);
let elemty = force_app_term_type element_type lv.lv_type in
lvarset := LogicVarSet.add lv !lvarset;
let newty =
if force_app_term_type array_size lv.lv_type > 0L then
begin
let size =
constant_expr (force_app_term_type array_size lv.lv_type)
in alloclvarset := LogicVarSet.add lv !alloclvarset;
mkTRefArray(elemty,size,[])
end
else TPtr(elemty,[])
in attach_globaction (fun () -> lv.lv_type <- Ctype newty);
let strawlv = match lv.lv_origin with
None -> make_temp_logic_var (Ctype newty)
| Some v -> cvar_to_lvar (VarinfoHashtbl.find var_to_strawvar v)
in
LogicVarHashtbl.add lvar_to_strawlvar lv strawlv;
LogicVarHashtbl.add strawlvar_to_lvar strawlv lv
end;
DoChildren