let rec convert_type t =
let new_ty =
match t.ct_ty with
Tarray(t1,sz1) -> begin
match convert_type t1 with
{ ct_ty = Tarray(t2,sz2) } ->
let new_size =
match sz1, sz2 with
Some x, Some y -> Some (mult_big_int x y)
| _ -> None
in
Tarray(t2,new_size)
| t2 ->
Tarray(t2,sz1)
end
| Tbuiltin _ | Tvoid | Tstruct _ -> t.ct_ty
| Tfunction(at,f,rt) ->
Tfunction(List.map convert_type at, f, convert_type rt)
| Tpointer(t) ->
let t = convert_type t in
Tpointer(
match t.ct_ty with
Tarray(t1,sz1) -> t1
| _ -> t)
in
{ t with ct_ty = new_ty }