@@ -83,10 +83,34 @@ type items =
83
83
| `Include of item list
84
84
]
85
85
86
+ let extract_visibility =
87
+ let open Compat in
88
+ function
89
+ | Sig_type (_, _, _, vis)
90
+ | Sig_module (_, _, _, _, vis)
91
+ | Sig_modtype (_, _, vis)
92
+ | Sig_value (_, _, vis)
93
+ | Sig_class (_, _, _, vis)
94
+ | Sig_class_type (_, _, _, vis)
95
+ | Sig_typext (_ , _ , _ , vis ) ->
96
+ vis
97
+
86
98
let rec extract_signature_type_items vis items =
87
99
let open Compat in
88
- match items with
89
- | Sig_type (id , td , _ , vis' ) :: rest when vis= vis' ->
100
+ match items with
101
+ | item :: rest ->
102
+ let vis' = extract_visibility item in
103
+ if vis = vis' then
104
+ let hidden = vis' = Hidden in
105
+ extract_signature_type_items_extract vis ~hidden item rest
106
+ else
107
+ extract_signature_type_items_skip vis item rest
108
+ | [] -> []
109
+
110
+ and extract_signature_type_items_extract vis ~hidden item rest =
111
+ let open Compat in
112
+ match item, rest with
113
+ | Sig_type (id , td , _ , _ ), _ ->
90
114
if Btype. is_row_name (Ident. name id)
91
115
then extract_signature_type_items vis rest
92
116
else
@@ -104,56 +128,64 @@ let rec extract_signature_type_items vis items =
104
128
#endif
105
129
List. map (fun c -> `Constructor (c.Types. cd_id, id, Some c.cd_loc)) cstrs
106
130
| Type_open -> [] in
107
- `Type (id, vis'= Hidden , None ) :: constrs @ extract_signature_type_items vis rest
131
+ `Type (id, hidden, None ) :: constrs @ extract_signature_type_items vis rest
132
+
133
+ | Sig_module (id , _ , _ , _ , _ ), _ ->
134
+ `Module (id, hidden, None ) :: extract_signature_type_items vis rest
108
135
109
- | Sig_module (id , _ , _ , _ , vis' ) :: rest when vis = vis' ->
110
- `Module (id, vis' = Hidden , None ) :: extract_signature_type_items vis rest
136
+ | Sig_modtype (id , _ , _ ) , _ ->
137
+ `ModuleType (id, hidden , None ) :: extract_signature_type_items vis rest
111
138
112
- | Sig_modtype (id , _ , vis' ) :: rest when vis= vis' ->
113
- `ModuleType (id, vis'= Hidden , None ) :: extract_signature_type_items vis rest
114
-
115
- | Sig_value (id , _ , vis' ) :: rest when vis= vis' ->
116
- `Value (id, vis'= Hidden , None ) :: extract_signature_type_items vis rest
139
+ | Sig_value (id , _ , _ ), _ ->
140
+ `Value (id, hidden, None ) :: extract_signature_type_items vis rest
117
141
#if OCAML_VERSION < (5 ,1 ,0 )
118
- | Sig_class (id, _, _, vis') :: Sig_class_type (ty_id, _, _, _)
119
- :: Sig_type (obj_id, _, _, _) :: Sig_type (cl_id, _, _, _) :: rest when vis= vis' ->
120
- `Class (id, ty_id, obj_id, Some cl_id, vis'= Hidden , None ) :: extract_signature_type_items vis rest
142
+ | Sig_class (id, _, _, _),
143
+ Sig_class_type (ty_id, _, _, _)
144
+ :: Sig_type (obj_id, _, _, _)
145
+ :: Sig_type (cl_id, _, _, _) :: _ ->
146
+ `Class (id, ty_id, obj_id, Some cl_id, hidden, None )
147
+ :: extract_signature_type_items vis rest
121
148
122
- | Sig_class_type (id, _, _, vis') :: Sig_type (obj_id, _, _, _)
123
- :: Sig_type (cl_id, _, _, _) :: rest when vis= vis' ->
124
- `ClassType (id, obj_id, Some cl_id, vis'= Hidden , None ) :: extract_signature_type_items vis rest
149
+ | Sig_class_type (id, _, _, _),
150
+ Sig_type (obj_id, _, _, _) :: Sig_type (cl_id, _, _, _) :: _ ->
151
+ `ClassType (id, obj_id, Some cl_id, hidden, None )
152
+ :: extract_signature_type_items vis rest
125
153
#else
126
- | Sig_class (id, _, _, vis') :: Sig_class_type (ty_id, _, _, _)
127
- :: Sig_type (obj_id, _, _, _) :: rest when vis= vis' ->
128
- `Class (id, ty_id, obj_id, None , vis'= Hidden , None ) :: extract_signature_type_items vis rest
154
+ | Sig_class (id, _, _, _),
155
+ Sig_class_type (ty_id, _, _, _) :: Sig_type (obj_id, _, _, _) :: _ ->
156
+ `Class (id, ty_id, obj_id, None , hidden, None )
157
+ :: extract_signature_type_items vis rest
129
158
130
- | Sig_class_type (id , _ , _ , vis' ) :: Sig_type (obj_id , _ , _ , _ ) :: rest when vis= vis' ->
131
- `ClassType (id, obj_id, None , vis'= Hidden , None ) :: extract_signature_type_items vis rest
159
+ | Sig_class_type (id , _ , _ , _ ), Sig_type (obj_id , _ , _ , _ ) :: _ ->
160
+ `ClassType (id, obj_id, None , hidden, None )
161
+ :: extract_signature_type_items vis rest
132
162
#endif
133
163
134
- | Sig_typext (id , constr , Text_exception, vis' ) :: rest when vis = vis' ->
164
+ | Sig_typext (id , constr , Text_exception, _ ), _ ->
135
165
`Exception (id, Some constr.ext_loc)
136
166
:: extract_signature_type_items vis rest
137
167
138
- | Sig_typext (id , constr , _ , vis' ) :: rest when vis = vis' ->
168
+ | Sig_typext (id , constr , _ , _ ), _ ->
139
169
`Extension (id, Some constr.ext_loc)
140
170
:: extract_signature_type_items vis rest
141
171
142
- | Sig_class_type (_, _, _, _) :: Sig_type (_, _, _, _)
143
- :: Sig_type (_, _, _, _) :: rest
144
- | Sig_class (_, _, _, _) :: Sig_class_type (_, _, _, _)
145
- :: Sig_type (_, _, _, _) :: Sig_type (_, _, _, _) :: rest
146
- | Sig_typext (_,_,_,_) :: rest
147
- | Sig_modtype (_, _, _) :: rest
148
- | Sig_module (_, _, _, _, _) :: rest
149
- | Sig_type (_, _, _, _) :: rest
150
- | Sig_value (_ , _ , _ ) :: rest ->
151
- extract_signature_type_items vis rest
172
+ | Sig_class _, _
173
+ | Sig_class_type _ , _ -> assert false
152
174
153
- | Sig_class _ :: _
154
- | Sig_class_type _ :: _ -> assert false
155
-
156
- | [] -> []
175
+ and extract_signature_type_items_skip vis item rest =
176
+ let open Compat in
177
+ match item, rest with
178
+ | Sig_class_type _, Sig_type _ :: Sig_type _ :: rest
179
+ | Sig_class _, Sig_class_type _ :: Sig_type _ :: Sig_type _ :: rest
180
+ | Sig_typext _, rest
181
+ | Sig_modtype _, rest
182
+ | Sig_module _, rest
183
+ | Sig_type _, rest
184
+ | Sig_value _ , rest ->
185
+ extract_signature_type_items vis rest
186
+
187
+ | Sig_class _, _
188
+ | Sig_class_type _ , _ -> assert false
157
189
158
190
#if OCAML_VERSION > = (4 ,8 ,0 )
159
191
0 commit comments