about summary refs log tree commit diff
path: root/src/error/Error.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/error/Error.ml')
-rw-r--r--src/error/Error.ml40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/error/Error.ml b/src/error/Error.ml
new file mode 100644
index 0000000..ee04c23
--- /dev/null
+++ b/src/error/Error.ml
@@ -0,0 +1,40 @@
+module Message =
+struct
+  type t =
+    | IllegalCharacter
+    | SyntaxError
+    | UnboundVariable
+    | IllTyped
+    | CannotInferType
+    | Bug
+
+  let default_severity : t -> Asai.Diagnostic.severity =
+    function
+    | IllegalCharacter -> Error
+    | SyntaxError -> Error
+    | UnboundVariable -> Error
+    | IllTyped -> Error
+    | CannotInferType -> Error
+    | Bug -> Bug
+
+  let short_code : t -> string =
+    function
+    (* parser errors *)
+    | IllegalCharacter -> "E101"
+    | SyntaxError -> "E102"
+    (* elaboration errors *)
+    | UnboundVariable -> "E201"
+    | IllTyped -> "E202"
+    | CannotInferType -> "E202"
+    (* misc *)
+    | Bug -> "E900"
+end
+
+include Asai.Reporter.Make(Message)
+
+let illegal_character ~loc char = fatalf ~loc IllegalCharacter "illegal character '%s'" (Char.escaped char)
+let syntax_error ~loc = fatalf ~loc SyntaxError "syntax error"
+let unbound_variable id = fatalf UnboundVariable "unbound variable '%a'" Ident.pp id
+let expected_universe fmt x = fatalf IllTyped "expected a universe but got %a" fmt x
+
+let bug msg = fatalf Bug msg