let collect_arg_ptr_call s x n b p =
  if AnyVar.mem x then 
    (oracle "%s %a AnyVar" s pp_var_type x ;())
  else
    try 
      let (arr,calls) = ArgPReference.find x in
      oracle "%s %a ArfPRef" 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);
         ArgPReference.replace x (arr,((n,(b,p))::calls)))
      else 
        (oracle "%s %a remove %d used %d" s pp_var_type x arr n;
         remove_ptr_reference_arg x)
    with Not_found ->
      oracle "%s %a not yet in ArgPref" s pp_var_type x;
      let arr = stars_var_type_typ x in add_ptr_reference_arg x arr;
      if ArgPReference.mem x then 
        (if n <= arr then
           (oracle"%s %a + call(%a,%d,%s)" 
              s pp_var_type x pp_var_type p n (string_addr b); 
            ArgPReference.replace x (arr,[n,(b,p)]))
         else ())