aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/cErrors.ml11
-rw-r--r--lib/cErrors.mli4
-rw-r--r--lib/system.ml9
-rw-r--r--lib/system.mli2
4 files changed, 21 insertions, 5 deletions
diff --git a/lib/cErrors.ml b/lib/cErrors.ml
index 62d465c703..cb64e36755 100644
--- a/lib/cErrors.ml
+++ b/lib/cErrors.ml
@@ -25,12 +25,17 @@ let _ =
in
Printexc.register_printer pr
-let anomaly ?loc ?label pp =
- Loc.raise ?loc (Anomaly (label, pp))
+let anomaly ?loc ?info ?label pp =
+ let info = Option.default Exninfo.null info in
+ let info = Option.cata (Loc.add_loc info) info loc in
+ Exninfo.iraise (Anomaly (label, pp), info)
exception UserError of string option * Pp.t (* User errors *)
-let user_err ?loc ?hdr strm = Loc.raise ?loc (UserError (hdr, strm))
+let user_err ?loc ?info ?hdr strm =
+ let info = Option.default Exninfo.null info in
+ let info = Option.cata (Loc.add_loc info) info loc in
+ Exninfo.iraise (UserError (hdr, strm), info)
exception Timeout
diff --git a/lib/cErrors.mli b/lib/cErrors.mli
index 21d41c996d..cf1857cf04 100644
--- a/lib/cErrors.mli
+++ b/lib/cErrors.mli
@@ -21,7 +21,7 @@ val push : exn -> Exninfo.iexn
[Anomaly] is used for system errors and [UserError] for the
user's ones. *)
-val anomaly : ?loc:Loc.t -> ?label:string -> Pp.t -> 'a
+val anomaly : ?loc:Loc.t -> ?info:Exninfo.info -> ?label:string -> Pp.t -> 'a
(** Raise an anomaly, with an optional location and an optional
label identifying the anomaly. *)
@@ -34,7 +34,7 @@ exception UserError of string option * Pp.t
(** Main error signaling exception. It carries a header plus a pretty printing
doc *)
-val user_err : ?loc:Loc.t -> ?hdr:string -> Pp.t -> 'a
+val user_err : ?loc:Loc.t -> ?info:Exninfo.info -> ?hdr:string -> Pp.t -> 'a
(** Main error raising primitive. [user_err ?loc ?hdr pp] signals an
error [pp] with optional header and location [hdr] [loc] *)
diff --git a/lib/system.ml b/lib/system.ml
index 4e98651d6e..e25f758865 100644
--- a/lib/system.ml
+++ b/lib/system.ml
@@ -168,6 +168,15 @@ let try_remove filename =
let error_corrupted file s =
CErrors.user_err ~hdr:"System" (str file ++ str ": " ++ str s ++ str ". Try to rebuild it.")
+let check_caml_version ~caml:s ~file:f =
+ if not (String.equal Coq_config.caml_version s) then
+ CErrors.user_err (str ("The file " ^ f ^ " was compiled with OCaml") ++
+ spc () ++ str s ++ spc () ++ str "while this instance of Coq was compiled \
+ with OCaml" ++ spc() ++ str Coq_config.caml_version ++ str "." ++ spc () ++
+ str "Coq object files need to be compiled with the same OCaml toolchain to \
+ be compatible.")
+ else ()
+
let input_binary_int f ch =
try input_binary_int ch
with
diff --git a/lib/system.mli b/lib/system.mli
index 4a8c35b6ea..1e2f519327 100644
--- a/lib/system.mli
+++ b/lib/system.mli
@@ -88,6 +88,8 @@ val with_magic_number_check : ('a -> 'b) -> 'a -> 'b
val marshal_out : out_channel -> 'a -> unit
val marshal_in : string -> in_channel -> 'a
+val check_caml_version : caml:string -> file:string -> unit
+
(** {6 Time stamps.} *)
type time