let rec basename = function
  | C_int _ -> "int"
  | C_float _ -> "float"
  | C_pointer _ -> "pointer"
  | C_comp c -> c.cname
  | C_array a ->
      let te = basename (object_of a.arr_element) in
      match a.arr_flat with
        | None -> te ^ "_array"
        | Some f -> te ^ "_" ^ Int64.to_string f.arr_size