summaryrefslogtreecommitdiff
path: root/cparser/Cerrors.ml
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-03-28 13:32:21 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-03-28 13:32:21 +0000
commitbefbc76f89f3d8abc8da17caf91ea4a87ec96eeb (patch)
treed84d76258ca9b2505713552bb62be8c40714787b /cparser/Cerrors.ml
parent26c166e279ec05837b6b3b5db80a7ef3c520db32 (diff)
checklink: first import of Valentin Robert's validator for asm and link
cparser: renamed Errors to Cerrors; removed packing into Cparser. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1856 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'cparser/Cerrors.ml')
-rw-r--r--cparser/Cerrors.ml55
1 files changed, 55 insertions, 0 deletions
diff --git a/cparser/Cerrors.ml b/cparser/Cerrors.ml
new file mode 100644
index 0000000..188531e
--- /dev/null
+++ b/cparser/Cerrors.ml
@@ -0,0 +1,55 @@
+(* *********************************************************************)
+(* *)
+(* The Compcert verified compiler *)
+(* *)
+(* Xavier Leroy, INRIA Paris-Rocquencourt *)
+(* *)
+(* Copyright Institut National de Recherche en Informatique et en *)
+(* Automatique. All rights reserved. This file is distributed *)
+(* under the terms of the GNU General Public License as published by *)
+(* the Free Software Foundation, either version 2 of the License, or *)
+(* (at your option) any later version. This file is also distributed *)
+(* under the terms of the INRIA Non-Commercial License Agreement. *)
+(* *)
+(* *********************************************************************)
+
+(* Management of errors and warnings *)
+
+open Format
+
+let warn_error = ref false
+
+let num_errors = ref 0
+let num_warnings = ref 0
+
+let reset () = num_errors := 0; num_warnings := 0
+
+exception Abort
+
+let fatal_error fmt =
+ incr num_errors;
+ kfprintf
+ (fun _ -> raise Abort)
+ err_formatter
+ ("@[<hov 2>" ^^ fmt ^^ ".@]@.@[<hov 0>Fatal error.@]@.")
+
+let error fmt =
+ incr num_errors;
+ eprintf ("@[<hov 2>" ^^ fmt ^^ ".@]@.")
+
+let warning fmt =
+ incr num_warnings;
+ eprintf ("@[<hov 2>" ^^ fmt ^^ ".@]@.")
+
+let check_errors () =
+ if !num_errors > 0 then
+ eprintf "@[<hov 0>%d error%s detected.@]@."
+ !num_errors
+ (if !num_errors = 1 then "" else "s");
+ if !warn_error && !num_warnings > 0 then
+ eprintf "@[<hov 0>%d error-enabled warning%s detected.@]@."
+ !num_warnings
+ (if !num_warnings = 1 then "" else "s");
+ !num_errors > 0 || (!warn_error && !num_warnings > 0)
+
+