summaryrefslogtreecommitdiff
path: root/src/reporting_basic.mli
diff options
context:
space:
mode:
authorKathy Gray2013-07-31 16:33:27 +0100
committerKathy Gray2013-07-31 16:33:27 +0100
commitfc75e20616719bcf0f1fa86ece038809ba81a439 (patch)
tree7165dd32d6109378da4e8005429e29c3403b630f /src/reporting_basic.mli
parent7724520fc51f127bd9f4451129b1ad38b872a53d (diff)
Adding the real reporting basic
Diffstat (limited to 'src/reporting_basic.mli')
-rw-r--r--src/reporting_basic.mli103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/reporting_basic.mli b/src/reporting_basic.mli
new file mode 100644
index 00000000..3cfdf864
--- /dev/null
+++ b/src/reporting_basic.mli
@@ -0,0 +1,103 @@
+(**************************************************************************)
+(* Lem *)
+(* *)
+(* Dominic Mulligan, University of Cambridge *)
+(* Francesco Zappa Nardelli, INRIA Paris-Rocquencourt *)
+(* Gabriel Kerneis, University of Cambridge *)
+(* Kathy Gray, University of Cambridge *)
+(* Peter Boehm, University of Cambridge (while working on Lem) *)
+(* Peter Sewell, University of Cambridge *)
+(* Scott Owens, University of Kent *)
+(* Thomas Tuerk, University of Cambridge *)
+(* *)
+(* The Lem sources are copyright 2010-2013 *)
+(* by the UK authors above and Institut National de Recherche en *)
+(* Informatique et en Automatique (INRIA). *)
+(* *)
+(* All files except ocaml-lib/pmap.{ml,mli} and ocaml-libpset.{ml,mli} *)
+(* are distributed under the license below. The former are distributed *)
+(* under the LGPLv2, as in the LICENSE file. *)
+(* *)
+(* *)
+(* Redistribution and use in source and binary forms, with or without *)
+(* modification, are permitted provided that the following conditions *)
+(* are met: *)
+(* 1. Redistributions of source code must retain the above copyright *)
+(* notice, this list of conditions and the following disclaimer. *)
+(* 2. Redistributions in binary form must reproduce the above copyright *)
+(* notice, this list of conditions and the following disclaimer in the *)
+(* documentation and/or other materials provided with the distribution. *)
+(* 3. The names of the authors may not be used to endorse or promote *)
+(* products derived from this software without specific prior written *)
+(* permission. *)
+(* *)
+(* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS *)
+(* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *)
+(* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *)
+(* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY *)
+(* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *)
+(* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE *)
+(* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *)
+(* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER *)
+(* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR *)
+(* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN *)
+(* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *)
+(**************************************************************************)
+
+(** Basic error reporting
+
+ [Reporting_basic] contains functions to report errors and warnings.
+ It contains functions to print locations ([Parse_ast.l] and [Ast.l]) and lexing positions.
+
+ The main functionality is reporting errors. This is done by raising a
+ [Fatal_error] exception. This is caught internally and reported via [report_error].
+ There are several predefined types of errors which all cause different error
+ messages. If none of these fit, [Err_general] can be used.
+
+*)
+
+(** {2 Auxiliary Functions } *)
+
+val loc_to_string : Parse_ast.l -> string
+
+(** [print_err fatal print_loc_source l head mes] prints an error / warning message to
+ std-err. It starts with printing location information stored in [l]
+ It then prints "head: mes". If [fatal] is set, the program exists with error-code 1 afterwards.
+*)
+val print_err : bool -> bool -> Parse_ast.l -> string -> string -> unit
+
+(** {2 Errors } *)
+
+(** Errors stop execution and print a message; they typically have a location and message.
+*)
+type error =
+ (** General errors, used for multi purpose. If you are unsure, use this one. *)
+ | Err_general of Parse_ast.l * string
+
+ (** Unreachable errors should never be thrown. It means that some
+ code was excuted that the programmer thought of as unreachable *)
+ | Err_unreachable of Parse_ast.l * string
+
+ (** [Err_todo] indicates that some feature is unimplemented; it should be built using [err_todo]. *)
+ | Err_todo of Parse_ast.l * string
+
+ | Err_syntax of Lexing.position * string
+ | Err_syntax_locn of Parse_ast.l * string
+ | Err_lex of Lexing.position * char
+ | Err_type of Parse_ast.l * string
+
+exception Fatal_error of error
+
+(** [err_todo l m] is an abreviatiation for [Fatal_error (Err_todo (l, m))] *)
+val err_todo : Parse_ast.l -> string -> exn
+
+(** [err_general l m] is an abreviatiation for [Fatal_error (Err_general (b, l, m))] *)
+val err_general : Parse_ast.l -> string -> exn
+
+(** [err_unreachable l m] is an abreviatiation for [Fatal_error (Err_unreachable (b, l, m))] *)
+val err_unreachable : Parse_ast.l -> string -> exn
+
+(** Report error should only be used by main to print the error in the end. Everywhere else,
+ raising a [Fatal_error] exception is recommended. *)
+val report_error : error -> 'a
+