@@ -8,7 +8,7 @@ module Transform = struct
8
8
let mk_string_option (o : string option ) : oak =
9
9
match o with
10
10
| None -> Ident " None"
11
- | Some s -> Application {name = " Some" ; argument = String s}
11
+ | Some s -> Application ( " Some" , String s)
12
12
13
13
let mk_string_list (items : string list ) : oak =
14
14
List (items |> List. map (fun s -> String s))
@@ -36,50 +36,105 @@ module Transform = struct
36
36
| Reither _ -> Ident " row_field.Reither"
37
37
| Rabsent -> Ident " row_field.Rabsent"
38
38
39
+ let mk_field_kind = function
40
+ | Types. Fvar _ -> Ident " field_kind.Fvar"
41
+ | Types. Fpresent -> Ident " field_kind.Fpresent"
42
+ | Types. Fabsent -> Ident " field_kind.Fabsent"
43
+
39
44
let rec mk_type_desc (desc : Types.type_desc ) : oak =
40
45
match desc with
41
- | Tlink {desc} ->
42
- Application {name = " type_desc.Tlink" ; argument = mk_type_desc desc}
46
+ | Tlink {desc} -> Application (" type_desc.Tlink" , mk_type_desc desc)
43
47
| Tvar var -> (
44
48
match var with
45
- | None -> Application {name = " type_desc.Tvar" ; argument = Ident " None" }
46
- | Some s -> Application {name = " type_desc.Tvar" ; argument = Ident s} )
49
+ | None -> Application ( " type_desc.Tvar" , Ident " None" )
50
+ | Some s -> Application ( " type_desc.Tvar" , Ident s) )
47
51
| Tconstr (path , ts , _ ) ->
48
52
let ts =
49
53
ts |> List. map (fun (t : Types.type_expr ) -> mk_type_desc t.desc)
50
54
in
51
55
Application
52
- {
53
- name = " type_desc.Tconstr" ;
54
- argument =
55
- Tuple
56
- [
57
- {name = " path" ; value = Ident (path_to_string path)};
58
- {name = " ts" ; value = List ts};
59
- ];
60
- }
56
+ ( " type_desc.Tconstr" ,
57
+ Tuple
58
+ [
59
+ {name = " path" ; value = Ident (path_to_string path)};
60
+ {name = " ts" ; value = List ts};
61
+ ] )
61
62
| Tarrow (_ , t1 , t2 , _ ) ->
62
63
Application
63
- {
64
- name = " type_desc.Tarrow" ;
65
- argument =
64
+ ( " type_desc.Tarrow" ,
65
+ Tuple
66
+ [
67
+ {name = " t1" ; value = mk_type_desc t1.desc};
68
+ {name = " t2" ; value = mk_type_desc t2.desc};
69
+ ] )
70
+ | Ttuple ts ->
71
+ let ts =
72
+ ts |> List. map (fun (t : Types.type_expr ) -> mk_type_desc t.desc)
73
+ in
74
+ Application (" type_desc.Ttuple" , List ts)
75
+ | Tobject (t , r ) -> (
76
+ match ! r with
77
+ | None -> Application (" type_desc.Tobject" , mk_type_desc t.desc)
78
+ | Some (path , ts ) ->
79
+ Application
80
+ ( " type_desc.Tobject" ,
66
81
Tuple
67
82
[
68
- {name = " t1" ; value = mk_type_desc t1.desc};
69
- {name = " t2" ; value = mk_type_desc t2.desc};
70
- ];
71
- }
72
- | Ttuple _ -> Ident " type_desc.Ttuple"
73
- | Tobject _ -> Ident " type_desc.Tobject"
74
- | Tfield _ -> Ident " type_desc.Tfield"
83
+ {name = " type_expr" ; value = mk_type_desc t.desc};
84
+ {name = " path" ; value = Ident (path_to_string path)};
85
+ {
86
+ name = " ts" ;
87
+ value =
88
+ List
89
+ (ts
90
+ |> List. map (fun (t : Types.type_expr ) ->
91
+ mk_type_desc t.desc));
92
+ };
93
+ ] ))
94
+ | Tfield (field , fk , t1 , t2 ) ->
95
+ Application
96
+ ( " type_desc.Tfield" ,
97
+ Tuple
98
+ [
99
+ {name = " name" ; value = String field};
100
+ {name = " field_kind" ; value = mk_field_kind fk};
101
+ {name = " t1" ; value = mk_type_desc t1.desc};
102
+ {name = " t2" ; value = mk_type_desc t2.desc};
103
+ ] )
75
104
| Tnil -> Ident " type_desc.Tnil"
76
- | Tsubst _ -> Ident " type_desc.Tsubst"
105
+ | Tsubst t -> Application ( " type_desc.Tsubst" , mk_type_desc t.desc)
77
106
| Tvariant row_descr ->
107
+ Application (" type_desc.Tvariant" , mk_row_desc row_descr)
108
+ | Tunivar so -> Application (" type_desc.Tunivar" , mk_string_option so)
109
+ | Tpoly (t , ts ) ->
110
+ let ts =
111
+ ts |> List. map (fun (t : Types.type_expr ) -> mk_type_desc t.desc)
112
+ in
113
+ Application
114
+ ( " type_desc.Tpoly" ,
115
+ Tuple
116
+ [
117
+ {name = " t" ; value = mk_type_desc t.desc};
118
+ {name = " ts" ; value = List ts};
119
+ ] )
120
+ | Tpackage (path , lids , ts ) ->
121
+ let lids =
122
+ lids
123
+ |> List. map (fun (lid : Longident.t ) ->
124
+ List
125
+ (Longident. flatten lid |> List. map (fun ident -> String ident)))
126
+ in
127
+ let ts =
128
+ ts |> List. map (fun (t : Types.type_expr ) -> mk_type_desc t.desc)
129
+ in
78
130
Application
79
- {name = " type_desc.Tvariant" ; argument = mk_row_desc row_descr}
80
- | Tunivar _ -> Ident " type_desc.Tunivar"
81
- | Tpoly _ -> Ident " type_desc.Tpoly"
82
- | Tpackage _ -> Ident " type_desc.Tpackage"
131
+ ( " type_desc.Tpackage" ,
132
+ Tuple
133
+ [
134
+ {name = " path" ; value = Ident (path_to_string path)};
135
+ {name = " lids" ; value = List lids};
136
+ {name = " ts" ; value = List ts};
137
+ ] )
83
138
84
139
and mk_row_desc (row_desc : Types.row_desc ) : oak =
85
140
let fields =
@@ -211,8 +266,7 @@ module Transform = struct
211
266
let kind =
212
267
match item.kind with
213
268
| SharedTypes.Module. Value v ->
214
- Application
215
- {name = " SharedTypes.Module.Value" ; argument = mk_type_desc v.desc}
269
+ Application (" SharedTypes.Module.Value" , mk_type_desc v.desc)
216
270
| SharedTypes.Module. Type _ -> Ident " Type"
217
271
| SharedTypes.Module. Module _ -> Ident " Module"
218
272
in
0 commit comments