Skip to content

Commit b11eea1

Browse files
authored
flambda-backend: Introduce Import_info (ocaml-flambda#1036)
1 parent bc5b135 commit b11eea1

36 files changed

+393
-168
lines changed

.depend

+40-2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ utils/identifiable.cmx : \
105105
utils/misc.cmx \
106106
utils/identifiable.cmi
107107
utils/identifiable.cmi :
108+
utils/import_info.cmo : \
109+
utils/misc.cmi \
110+
utils/compilation_unit.cmi \
111+
utils/import_info.cmi
112+
utils/import_info.cmx : \
113+
utils/misc.cmx \
114+
utils/compilation_unit.cmx \
115+
utils/import_info.cmi
116+
utils/import_info.cmi : \
117+
utils/compilation_unit.cmi
108118
utils/int_replace_polymorphic_compare.cmo : \
109119
utils/int_replace_polymorphic_compare.cmi
110120
utils/int_replace_polymorphic_compare.cmx : \
@@ -720,6 +730,7 @@ typing/env.cmi : \
720730
parsing/longident.cmi \
721731
parsing/location.cmi \
722732
utils/load_path.cmi \
733+
utils/import_info.cmi \
723734
typing/ident.cmi \
724735
utils/compilation_unit.cmi \
725736
file_formats/cmi_format.cmi \
@@ -1071,6 +1082,7 @@ typing/persistent_env.cmo : \
10711082
parsing/location.cmi \
10721083
utils/load_path.cmi \
10731084
utils/lazy_backtrack.cmi \
1085+
utils/import_info.cmi \
10741086
utils/consistbl.cmi \
10751087
utils/config.cmi \
10761088
utils/compilation_unit.cmi \
@@ -1083,6 +1095,7 @@ typing/persistent_env.cmx : \
10831095
parsing/location.cmx \
10841096
utils/load_path.cmx \
10851097
utils/lazy_backtrack.cmx \
1098+
utils/import_info.cmx \
10861099
utils/consistbl.cmx \
10871100
utils/config.cmx \
10881101
utils/compilation_unit.cmx \
@@ -1094,6 +1107,7 @@ typing/persistent_env.cmi : \
10941107
utils/misc.cmi \
10951108
parsing/location.cmi \
10961109
utils/lazy_backtrack.cmi \
1110+
utils/import_info.cmi \
10971111
utils/consistbl.cmi \
10981112
utils/compilation_unit.cmi \
10991113
file_formats/cmi_format.cmi
@@ -1786,6 +1800,7 @@ typing/typemod.cmo : \
17861800
utils/load_path.cmi \
17871801
typing/includemod_errorprinter.cmi \
17881802
typing/includemod.cmi \
1803+
utils/import_info.cmi \
17891804
typing/ident.cmi \
17901805
typing/envaux.cmi \
17911806
typing/env.cmi \
@@ -1823,6 +1838,7 @@ typing/typemod.cmx : \
18231838
utils/load_path.cmx \
18241839
typing/includemod_errorprinter.cmx \
18251840
typing/includemod.cmx \
1841+
utils/import_info.cmx \
18261842
typing/ident.cmx \
18271843
typing/envaux.cmx \
18281844
typing/env.cmx \
@@ -2080,6 +2096,7 @@ bytecomp/bytelink.cmo : \
20802096
parsing/location.cmi \
20812097
utils/load_path.cmi \
20822098
bytecomp/instruct.cmi \
2099+
utils/import_info.cmi \
20832100
typing/ident.cmi \
20842101
bytecomp/emitcode.cmi \
20852102
bytecomp/dll.cmi \
@@ -2099,6 +2116,7 @@ bytecomp/bytelink.cmx : \
20992116
parsing/location.cmx \
21002117
utils/load_path.cmx \
21012118
bytecomp/instruct.cmx \
2119+
utils/import_info.cmx \
21022120
typing/ident.cmx \
21032121
bytecomp/emitcode.cmx \
21042122
bytecomp/dll.cmx \
@@ -2113,6 +2131,7 @@ bytecomp/bytelink.cmx : \
21132131
bytecomp/bytelink.cmi : \
21142132
bytecomp/symtable.cmi \
21152133
utils/misc.cmi \
2134+
utils/import_info.cmi \
21162135
utils/compilation_unit.cmi \
21172136
file_formats/cmo_format.cmi
21182137
bytecomp/bytepackager.cmo : \
@@ -2126,6 +2145,7 @@ bytecomp/bytepackager.cmo : \
21262145
parsing/location.cmi \
21272146
utils/load_path.cmi \
21282147
bytecomp/instruct.cmi \
2148+
utils/import_info.cmi \
21292149
typing/ident.cmi \
21302150
typing/env.cmi \
21312151
bytecomp/emitcode.cmi \
@@ -2147,6 +2167,7 @@ bytecomp/bytepackager.cmx : \
21472167
parsing/location.cmx \
21482168
utils/load_path.cmx \
21492169
bytecomp/instruct.cmx \
2170+
utils/import_info.cmx \
21502171
typing/ident.cmx \
21512172
typing/env.cmx \
21522173
bytecomp/emitcode.cmx \
@@ -2286,6 +2307,7 @@ bytecomp/symtable.cmo : \
22862307
bytecomp/meta.cmi \
22872308
parsing/location.cmi \
22882309
lambda/lambda.cmi \
2310+
utils/import_info.cmi \
22892311
typing/ident.cmi \
22902312
bytecomp/dll.cmi \
22912313
utils/config.cmi \
@@ -2301,6 +2323,7 @@ bytecomp/symtable.cmx : \
23012323
bytecomp/meta.cmx \
23022324
parsing/location.cmx \
23032325
lambda/lambda.cmx \
2326+
utils/import_info.cmx \
23042327
typing/ident.cmx \
23052328
bytecomp/dll.cmx \
23062329
utils/config.cmx \
@@ -2312,6 +2335,7 @@ bytecomp/symtable.cmx : \
23122335
bytecomp/symtable.cmi : \
23132336
utils/misc.cmi \
23142337
lambda/lambda.cmi \
2338+
utils/import_info.cmi \
23152339
typing/ident.cmi \
23162340
file_formats/cmo_format.cmi
23172341
asmcomp/CSE.cmo : \
@@ -2487,6 +2511,7 @@ asmcomp/asmlink.cmo : \
24872511
utils/misc.cmi \
24882512
parsing/location.cmi \
24892513
utils/load_path.cmi \
2514+
utils/import_info.cmi \
24902515
asmcomp/emitaux.cmi \
24912516
asmcomp/emit.cmi \
24922517
utils/consistbl.cmi \
@@ -2507,6 +2532,7 @@ asmcomp/asmlink.cmx : \
25072532
utils/misc.cmx \
25082533
parsing/location.cmx \
25092534
utils/load_path.cmx \
2535+
utils/import_info.cmx \
25102536
asmcomp/emitaux.cmx \
25112537
asmcomp/emit.cmx \
25122538
utils/consistbl.cmx \
@@ -2522,6 +2548,7 @@ asmcomp/asmlink.cmx : \
25222548
asmcomp/asmlink.cmi
25232549
asmcomp/asmlink.cmi : \
25242550
utils/misc.cmi \
2551+
utils/import_info.cmi \
25252552
utils/compilation_unit.cmi \
25262553
file_formats/cmx_format.cmi
25272554
asmcomp/asmpackager.cmo : \
@@ -2535,6 +2562,7 @@ asmcomp/asmpackager.cmo : \
25352562
utils/load_path.cmi \
25362563
utils/linkage_name.cmi \
25372564
lambda/lambda.cmi \
2565+
utils/import_info.cmi \
25382566
middle_end/flambda/flambda_middle_end.cmi \
25392567
middle_end/flambda/export_info.cmi \
25402568
typing/env.cmi \
@@ -2559,6 +2587,7 @@ asmcomp/asmpackager.cmx : \
25592587
utils/load_path.cmx \
25602588
utils/linkage_name.cmx \
25612589
lambda/lambda.cmx \
2590+
utils/import_info.cmx \
25622591
middle_end/flambda/flambda_middle_end.cmx \
25632592
middle_end/flambda/export_info.cmx \
25642593
typing/env.cmx \
@@ -3421,6 +3450,7 @@ middle_end/compilenv.cmo : \
34213450
parsing/location.cmi \
34223451
utils/load_path.cmi \
34233452
utils/linkage_name.cmi \
3453+
utils/import_info.cmi \
34243454
typing/ident.cmi \
34253455
middle_end/flambda/export_info.cmi \
34263456
typing/env.cmi \
@@ -3440,6 +3470,7 @@ middle_end/compilenv.cmx : \
34403470
parsing/location.cmx \
34413471
utils/load_path.cmx \
34423472
utils/linkage_name.cmx \
3473+
utils/import_info.cmx \
34433474
typing/ident.cmx \
34443475
middle_end/flambda/export_info.cmx \
34453476
typing/env.cmx \
@@ -4050,22 +4081,26 @@ file_formats/cmi_format.cmo : \
40504081
typing/types.cmi \
40514082
utils/misc.cmi \
40524083
parsing/location.cmi \
4084+
utils/import_info.cmi \
40534085
utils/config.cmi \
40544086
utils/compilation_unit.cmi \
40554087
file_formats/cmi_format.cmi
40564088
file_formats/cmi_format.cmx : \
40574089
typing/types.cmx \
40584090
utils/misc.cmx \
40594091
parsing/location.cmx \
4092+
utils/import_info.cmx \
40604093
utils/config.cmx \
40614094
utils/compilation_unit.cmx \
40624095
file_formats/cmi_format.cmi
40634096
file_formats/cmi_format.cmi : \
40644097
typing/types.cmi \
40654098
utils/misc.cmi \
4099+
utils/import_info.cmi \
40664100
utils/compilation_unit.cmi
40674101
file_formats/cmo_format.cmi : \
40684102
lambda/lambda.cmi \
4103+
utils/import_info.cmi \
40694104
typing/ident.cmi \
40704105
utils/compilation_unit.cmi
40714106
file_formats/cmt_format.cmo : \
@@ -4077,6 +4112,7 @@ file_formats/cmt_format.cmo : \
40774112
parsing/location.cmi \
40784113
utils/load_path.cmi \
40794114
parsing/lexer.cmi \
4115+
utils/import_info.cmi \
40804116
typing/env.cmi \
40814117
utils/config.cmi \
40824118
utils/compilation_unit.cmi \
@@ -4092,6 +4128,7 @@ file_formats/cmt_format.cmx : \
40924128
parsing/location.cmx \
40934129
utils/load_path.cmx \
40944130
parsing/lexer.cmx \
4131+
utils/import_info.cmx \
40954132
typing/env.cmx \
40964133
utils/config.cmx \
40974134
utils/compilation_unit.cmx \
@@ -4108,6 +4145,7 @@ file_formats/cmt_format.cmi : \
41084145
file_formats/cmi_format.cmi
41094146
file_formats/cmx_format.cmi : \
41104147
lambda/lambda.cmi \
4148+
utils/import_info.cmi \
41114149
middle_end/flambda/export_info.cmi \
41124150
utils/compilation_unit.cmi \
41134151
middle_end/clambda.cmi
@@ -6427,17 +6465,17 @@ toplevel/expunge.cmo : \
64276465
bytecomp/symtable.cmi \
64286466
lambda/runtimedef.cmi \
64296467
utils/misc.cmi \
6468+
utils/import_info.cmi \
64306469
typing/ident.cmi \
64316470
utils/compilation_unit.cmi \
6432-
file_formats/cmo_format.cmi \
64336471
bytecomp/bytesections.cmi
64346472
toplevel/expunge.cmx : \
64356473
bytecomp/symtable.cmx \
64366474
lambda/runtimedef.cmx \
64376475
utils/misc.cmx \
6476+
utils/import_info.cmx \
64386477
typing/ident.cmx \
64396478
utils/compilation_unit.cmx \
6440-
file_formats/cmo_format.cmi \
64416479
bytecomp/bytesections.cmx
64426480
toplevel/genprintval.cmo : \
64436481
typing/types.cmi \

asmcomp/asmlink.ml

+21-8
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ let cmx_required = ref ([] : CU.t list)
4949

5050
let check_consistency file_name unit crc =
5151
begin try
52-
List.iter
53-
(fun (name, crco) ->
52+
Array.iter
53+
(fun import ->
54+
let name = Import_info.name import in
55+
let crco = Import_info.crc_with_unit import in
5456
interfaces := name :: !interfaces;
5557
match crco with
5658
None -> ()
@@ -68,8 +70,10 @@ let check_consistency file_name unit crc =
6870
raise(Error(Inconsistent_interface(name, user, auth)))
6971
end;
7072
begin try
71-
List.iter
72-
(fun (name, crco) ->
73+
Array.iter
74+
(fun import ->
75+
let name = Import_info.cu import in
76+
let crco = Import_info.crc import in
7377
implementations := name :: !implementations;
7478
match crco with
7579
None ->
@@ -100,9 +104,15 @@ let check_consistency file_name unit crc =
100104

101105
let extract_crc_interfaces () =
102106
Cmi_consistbl.extract !interfaces crc_interfaces
107+
|> List.map (fun (name, crc_with_unit) ->
108+
Import_info.create name ~crc_with_unit)
109+
103110
let extract_crc_implementations () =
104111
Cmx_consistbl.extract !implementations crc_implementations
105-
|> List.map (fun (name, crco) -> name, Option.map snd crco)
112+
|> List.map (fun (cu, crc) ->
113+
let crc = Option.map (fun ((), crc) -> crc) crc in
114+
Import_info.create_normal cu ~crc)
115+
106116

107117
(* Add C objects and options and "custom" info from a library descriptor.
108118
See bytecomp/bytelink.ml for comments on the order of C objects. *)
@@ -137,7 +147,8 @@ let is_required name =
137147
try ignore (Hashtbl.find missing_globals name); true
138148
with Not_found -> false
139149

140-
let add_required by (name, _crc) =
150+
let add_required by import =
151+
let name = Import_info.cu import in
141152
try
142153
let rq = Hashtbl.find missing_globals name in
143154
rq := by :: !rq
@@ -199,7 +210,7 @@ let scan_file file tolink =
199210
| Unit (file_name,info,crc) ->
200211
(* This is a .cmx file. It must be linked in any case. *)
201212
remove_required info.ui_unit;
202-
List.iter (add_required file_name) info.ui_imports_cmx;
213+
Array.iter (add_required file_name) info.ui_imports_cmx;
203214
(info, file_name, crc) :: tolink
204215
| Library (file_name,infos) ->
205216
(* This is an archive file. Each unit contained in it will be linked
@@ -216,7 +227,7 @@ let scan_file file tolink =
216227
let req_by =
217228
Printf.sprintf "%s(%s)" file_name (ui_name |> CU.Name.to_string)
218229
in
219-
List.iter (add_required req_by) info.ui_imports_cmx;
230+
Array.iter (add_required req_by) info.ui_imports_cmx;
220231
(info, file_name, crc) :: reqd
221232
end else
222233
reqd)
@@ -231,6 +242,8 @@ let force_linking_of_startup ~ppf_dump =
231242
let make_globals_map units_list ~crc_interfaces =
232243
let crc_interfaces =
233244
crc_interfaces
245+
|> List.map (fun import ->
246+
Import_info.name import, Import_info.crc_with_unit import)
234247
|> CU.Name.Tbl.of_list
235248
in
236249
let defined =

asmcomp/asmlink.mli

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ val call_linker_shared: string list -> string -> unit
2626

2727
val reset : unit -> unit
2828
val check_consistency: filepath -> Cmx_format.unit_infos -> Digest.t -> unit
29-
val extract_crc_interfaces: unit -> Cmx_format.import_info_cmi list
30-
val extract_crc_implementations: unit -> Cmx_format.import_info_cmx list
29+
val extract_crc_interfaces: unit -> Import_info.t list
30+
val extract_crc_implementations: unit -> Import_info.t list
3131

3232
type error =
3333
| File_not_found of filepath

asmcomp/asmpackager.ml

+12-8
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,9 @@ let check_units members =
7070
begin match mb.pm_kind with
7171
| PM_intf -> ()
7272
| PM_impl infos ->
73-
List.iter
74-
(fun (unit, _) ->
73+
Array.iter
74+
(fun import ->
75+
let unit = Import_info.cu import in
7576
let name = CU.name unit in
7677
if List.mem name forbidden
7778
then raise(Error(Forward_reference(mb.pm_file, name))))
@@ -174,9 +175,9 @@ let get_approx ui =
174175
let build_package_cmx members cmxfile =
175176
let unit_names =
176177
List.map (fun m -> m.pm_name) members in
177-
let filter ~get_name lst =
178-
List.filter (fun (name, _crc) ->
179-
not (List.mem (get_name name) unit_names)) lst in
178+
let filter lst =
179+
List.filter (fun import ->
180+
not (List.mem (Import_info.name import) unit_names)) lst in
180181
let union lst =
181182
List.fold_left
182183
(List.fold_left
@@ -207,10 +208,13 @@ let build_package_cmx members cmxfile =
207208
List.flatten (List.map (fun info -> info.ui_defines) units) @
208209
[ui.ui_unit];
209210
ui_imports_cmi =
210-
(modname, Some (ui.ui_unit, Env.crc_of_unit modname)) ::
211-
filter(Asmlink.extract_crc_interfaces()) ~get_name:(fun name -> name);
211+
(Import_info.create modname
212+
~crc_with_unit:(Some (ui.ui_unit, Env.crc_of_unit modname))) ::
213+
filter (Asmlink.extract_crc_interfaces ())
214+
|> Array.of_list;
212215
ui_imports_cmx =
213-
filter(Asmlink.extract_crc_implementations()) ~get_name:CU.name;
216+
(filter(Asmlink.extract_crc_implementations()))
217+
|> Array.of_list;
214218
ui_curry_fun =
215219
union(List.map (fun info -> info.ui_curry_fun) units);
216220
ui_apply_fun =

boot/ocamlc

235 Bytes
Binary file not shown.

boot/ocamllex

-749 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)