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 -> ()