diff options
Diffstat (limited to 'library')
-rw-r--r-- | library/declaremods.ml | 1 | ||||
-rw-r--r-- | library/library.ml | 22 |
2 files changed, 16 insertions, 7 deletions
diff --git a/library/declaremods.ml b/library/declaremods.ml index 53f270701..cc7c4d7f1 100644 --- a/library/declaremods.ml +++ b/library/declaremods.ml @@ -850,7 +850,6 @@ let library_values = Summary.ref (Dirmap.empty : library_values Dirmap.t) ~name:"LIBVALUES" let register_library dir cenv (objs:library_objects) digest univ = - assert (not (Lib.is_module_or_modtype ())); let mp = MPfile dir in let () = try diff --git a/library/library.ml b/library/library.ml index b443c2a4c..481d8707a 100644 --- a/library/library.ml +++ b/library/library.ml @@ -537,12 +537,18 @@ let in_require : require_obj -> obj = if [export = Some true] *) let require_library_from_dirpath modrefl export = - if Lib.is_module_or_modtype () then - error "Require is not allowed inside a module or a module type"; let needed, contents = List.fold_left rec_intern_library ([], DPMap.empty) modrefl in let needed = List.rev_map (fun dir -> DPMap.find dir contents) needed in let modrefl = List.map fst modrefl in - add_anonymous_leaf (in_require (needed,modrefl,export)); + if Lib.is_module_or_modtype () then + begin + add_anonymous_leaf (in_require (needed,modrefl,None)); + Option.iter (fun exp -> + List.iter (fun dir -> add_anonymous_leaf (in_import(dir,exp))) modrefl) + export + end + else + add_anonymous_leaf (in_require (needed,modrefl,export)); add_frozen_state () let require_library qidl export = @@ -550,11 +556,15 @@ let require_library qidl export = require_library_from_dirpath modrefl export let require_library_from_file idopt file export = - if Lib.is_module_or_modtype () then - error "Require is not allowed inside a module or a module type"; let modref,needed = rec_intern_library_from_file idopt file in let needed = List.rev_map snd needed in - add_anonymous_leaf (in_require (needed,[modref],export)); + if Lib.is_module_or_modtype () then begin + add_anonymous_leaf (in_require (needed,[modref],None)); + Option.iter (fun exp -> add_anonymous_leaf (in_import (modref,exp))) + export + end + else + add_anonymous_leaf (in_require (needed,[modref],export)); add_frozen_state () (* the function called by Vernacentries.vernac_import *) |