@@ -370,11 +370,7 @@ let register_library m =
370370 let l = m.library_data in
371371 Declaremods.Interp. register_library
372372 m.library_name
373- l.md_compiled
374- l.md_objects
375- m.library_digests
376- m.library_vm
377- ;
373+ l.md_objects;
378374 register_native_library m.library_name
379375
380376let register_library_syntax (root , m ) =
@@ -389,7 +385,7 @@ let register_library_syntax (root, m) =
389385 the module or module type
390386 - not called from a library (i.e. a module identified with a file) *)
391387let load_require _ needed =
392- List. iter register_library needed
388+ register_library needed
393389
394390 (* [needed] is the ordered list of libraries not already loaded *)
395391let cache_require o =
@@ -399,7 +395,7 @@ let discharge_require o = Some o
399395
400396(* open_function is never called from here because an Anticipate object *)
401397
402- type require_obj = library_t list
398+ type require_obj = library_t
403399
404400let in_require : require_obj -> obj =
405401 declare_object
@@ -411,7 +407,7 @@ let in_require : require_obj -> obj =
411407 classify_function = (fun o -> Anticipate ) }
412408
413409let load_require_syntax _ needed =
414- List. iter register_library_syntax needed
410+ register_library_syntax needed
415411
416412let cache_require_syntax o =
417413 load_require_syntax 1 o
@@ -420,8 +416,7 @@ let discharge_require_syntax o = Some o
420416
421417(* open_function is never called from here because an Anticipate object *)
422418
423- type require_obj_syntax = (bool * library_t ) list
424-
419+ type require_obj_syntax = bool * library_t
425420let in_require_syntax : require_obj_syntax -> obj =
426421 declare_object
427422 {(default_object " REQUIRE-SYNTAX" ) with
@@ -440,14 +435,29 @@ let warn_require_in_module =
440435 (fun () -> strbrk " Use of “Require” inside a module is fragile." ++ spc() ++
441436 strbrk " It is not recommended to use this functionality in finished proof scripts." )
442437
438+ let kernel_load_require m =
439+ let l = m.library_data in
440+ let mp' = Global. import l.md_compiled m.library_vm m.library_digests in
441+ if not (ModPath. equal (MPfile m.library_name) mp') then
442+ anomaly (Pp. str " Unexpected disk module name." )
443+
443444let require_library_from_dirpath needed =
444445 if Lib. is_module_or_modtype () then warn_require_in_module () ;
445- Lib. add_leaf (in_require needed)
446+ (* Note that putting the list in the libobject would need to split the iter
447+ (ie do [List.iter kernel_load_require needed; List.iter add_leaf needed])
448+ which changes behaviour because libobjects can change kernel flags
449+ (eg Global Unset Universe Checking).
450+ TBH I'm not sure how much we care about preserving such behaviours
451+ if it ever becomes inconvenient though. *)
452+ List. iter (fun m ->
453+ kernel_load_require m;
454+ Lib. add_leaf (in_require m))
455+ needed
446456
447457let require_library_syntax_from_dirpath ~intern modrefl =
448458 let needed, contents = List. fold_left (rec_intern_library ~intern ) ([] , DirPath.Map. empty) modrefl in
449459 let needed = List. rev_map (fun (root , dir ) -> root, DirPath.Map. find dir contents) needed in
450- Lib. add_leaf (in_require_syntax needed) ;
460+ List. iter ( fun m -> Lib. add_leaf (in_require_syntax m)) needed ;
451461 List. map snd needed
452462
453463(* ***********************************************************************)
0 commit comments