let rec has_ctype typ term = has_object (object_of typ) term
and has_object obj term =
  match obj with
    | C_float _ | C_pointer _ -> p_true
    | C_int i -> p_call (is_int i) [term]
    | C_comp c -> p_call (IsComp.obtain c) [term]
    | C_array info -> 
        let ta = darray_of_arrayinfo info 1 in
        match object_of (fst ta) with
          | C_float _ | C_pointer _ -> p_true
          | C_array _ -> Wp_parameters.fatal "non canonical array-dimension"
          | C_int _ | C_comp _ -> 
              p_call (IsArray.obtain ta) [term]