let get_logic_funvar mem arity lv ap =
let s = "[get_logic_funvar]" in
try
let x = (Lmap.find lv mem.formals).bref_var in
debug "%s %a already recorded" s !Ast_printer.d_logic_var lv; x
with Not_found ->
debug "%s %a not yet recorded" s !Ast_printer.d_logic_var lv;
let t = match lv.lv_type with
| Ctype t -> t
| t -> WpLog.fatal "%s c type of pure logic type %a"
s !Ast_printer.d_logic_type t
in
let typ_logicvar = if ap then array_of t else pointed_of_arity arity t in
let obj_logicvar = Ctypes.object_of typ_logicvar in
let tau_logicvar = tau_of_object obj_logicvar in
let var = L.fresh lv.lv_name (Acsl(tau_logicvar,Ctype typ_logicvar)) in
debug "%s records %a" s F.pp_var var ;
let brefparam = {
bref_var = var ;
bref_formal =
if ap then Faref arity else Fpref arity ;
} in
mem.formals <- Lmap.add lv brefparam mem.formals; var