From 812712c0683d03760c10ef7397fb4ff0041c4860 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Pédrot Date: Sun, 28 Aug 2016 19:52:02 +0200 Subject: Fix bug #4750: Change format of inconsistent assumptions message. We now print the file responsible for the incompatibility in require error messages. --- library/library.ml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'library') diff --git a/library/library.ml b/library/library.ml index 12090183a7..04b82f2f34 100644 --- a/library/library.ml +++ b/library/library.ml @@ -468,16 +468,18 @@ let rec intern_library (needed, contents) (dir, f) from = pr_dirpath m.library_name ++ spc () ++ str "and not library" ++ spc() ++ pr_dirpath dir); Feedback.feedback (Feedback.FileLoaded(DirPath.to_string dir, f)); - m.library_digests, intern_library_deps (needed, contents) dir m (Some f) + m.library_digests, intern_library_deps (needed, contents) dir m f and intern_library_deps libs dir m from = let needed, contents = Array.fold_left (intern_mandatory_library dir from) libs m.library_deps in (dir :: needed, DPMap.add dir m contents ) and intern_mandatory_library caller from libs (dir,d) = - let digest, libs = intern_library libs (dir, None) from in + let digest, libs = intern_library libs (dir, None) (Some from) in if not (Safe_typing.digest_match ~actual:digest ~required:d) then - errorlabstrm "" (str "Compiled library " ++ pr_dirpath caller ++ str ".vo makes inconsistent assumptions over library " ++ pr_dirpath dir); + errorlabstrm "" (str "Compiled library " ++ pr_dirpath caller ++ + str " (in file " ++ str from ++ str ") makes inconsistent assumptions \ + over library " ++ pr_dirpath dir); libs let rec_intern_library libs (dir, f) = -- cgit v1.2.3 From f2fb98eabdb2f550c177609ad70ab8ba57821bca Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Mon, 29 Aug 2016 10:52:34 +0200 Subject: Send Dependency feedback only if file not already loaded. --- library/library.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'library') diff --git a/library/library.ml b/library/library.ml index 04b82f2f34..4bd71888e0 100644 --- a/library/library.ml +++ b/library/library.ml @@ -452,13 +452,13 @@ let intern_from_file f = module DPMap = Map.Make(DirPath) let rec intern_library (needed, contents) (dir, f) from = - Feedback.feedback(Feedback.FileDependency (from, DirPath.to_string dir)); (* Look if in the current logical environment *) try (find_library dir).libsum_digests, (needed, contents) with Not_found -> (* Look if already listed and consequently its dependencies too *) try (DPMap.find dir contents).library_digests, (needed, contents) with Not_found -> + Feedback.feedback(Feedback.FileDependency (from, DirPath.to_string dir)); (* [dir] is an absolute name which matches [f] which must be in loadpath *) let f = match f with Some f -> f | None -> try_locate_absolute_library dir in let m = intern_from_file f in -- cgit v1.2.3 From dea5e8a7ecb2120cccd2d2631ddbf892e99bffda Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Tue, 30 Aug 2016 17:29:44 +0200 Subject: Emit a warning on Require inside a module. --- library/library.ml | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'library') diff --git a/library/library.ml b/library/library.ml index 4bd71888e0..d44f796a7a 100644 --- a/library/library.ml +++ b/library/library.ml @@ -553,12 +553,20 @@ let in_require : require_obj -> obj = let (f_xml_require, xml_require) = Hook.make ~default:ignore () +let warn_require_in_module = + CWarnings.create ~name:"require-in-module" ~category:"deprecated" + (fun () -> strbrk "Require inside a module is" ++ + strbrk " deprecated and strongly discouraged. " ++ + strbrk "You can Require a module at toplevel " ++ + strbrk "and optionally Import it inside another one.") + let require_library_from_dirpath modrefl export = 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 if Lib.is_module_or_modtype () then begin + warn_require_in_module (); add_anonymous_leaf (in_require (needed,modrefl,None)); Option.iter (fun exp -> add_anonymous_leaf (in_import_library (modrefl,exp))) -- cgit v1.2.3