Source file typedecl_unboxed.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
open Types
let rec get_unboxed_type_representation env ty fuel =
if fuel < 0 then None else
let ty = Ctype.expand_head_opt env ty in
match get_desc ty with
| Tconstr (p, args, _) ->
begin match Env.find_type p env with
| exception Not_found -> Some ty
| {type_params; type_kind =
Type_record ([{ld_type = ty2; _}], Record_unboxed _)
| Type_variant ([{cd_args = Cstr_tuple [ty2]; _}], Variant_unboxed)
| Type_variant ([{cd_args = Cstr_record [{ld_type = ty2; _}]; _}],
Variant_unboxed)}
->
let ty2 = match get_desc ty2 with Tpoly (t, _) -> t | _ -> ty2 in
get_unboxed_type_representation env
(Ctype.apply env type_params ty2 args) (fuel - 1)
| _ -> Some ty
end
| _ -> Some ty
let get_unboxed_type_representation env ty =
get_unboxed_type_representation env ty 100