let collect_formal_array_call s x n b p =
try
let (arr,calls) = ByAReference.find x in
oracle "%s %a ByARef" s pp_var_type x;
if n <= arr then
( oracle "%s %a + call(%a,%d,%s)" s pp_var_type x
pp_var_type p n (string_addr b);
ByAReference.replace x (arr,((n,(b, p))::calls)))
else
( oracle "%s %a remove %d used %d" s pp_var_type x arr n;
remove_array_reference_param x)
with Not_found ->
oracle "%s %a not yet ByARef" s pp_var_type x;
let arr = brackets_and_stars_var_type_typ x in
add_array_reference_param x arr;
try let (_,calls) = ByAReference.find x in
ByAReference.replace x (arr,(n,(b,p))::calls)
with Not_found -> ()