WIP type-checking
[tiger.ml.git] / compiler / src / lib / tiger / tiger_error.ml
index ce506d9..782f138 100644 (file)
@@ -7,7 +7,15 @@ type t =
   | Invalid_syntax    of Pos.t
   | Unknown_id        of {id    : Sym.t; pos : Pos.t}
   | Unknown_type      of {ty_id : Sym.t; pos : Pos.t}
+  | Id_is_a_function  of {id    : Sym.t; pos : Pos.t}
   | Id_not_a_function of {id    : Sym.t; pos : Pos.t}
+  | No_such_field_in_record of {field : Sym.t; record : Typ.t; pos : Pos.t}
+  | Exp_not_a_record  of {ty    : Typ.t; pos : Pos.t}
+  | Wrong_type of
+      { expected : Typ.t
+      ; given    : Typ.t
+      ; pos      : Pos.t
+      }
   | Wrong_type_of_expression_in_var_dec of
       { var_id   : Sym.t
       ; expected : Typ.t
@@ -64,9 +72,24 @@ let to_string =
       s "Unknown identifier %S in %s" (Sym.to_string id) (Pos.to_string pos)
   | Unknown_type {ty_id; pos} ->
       s "Unknown type %S in %s" (Sym.to_string ty_id) (Pos.to_string pos)
+  | Id_is_a_function {id; pos} ->
+      s "Identifier %S is a function, it cannot be used as a variable in %s"
+        (Sym.to_string id) (Pos.to_string pos)
   | Id_not_a_function {id; pos} ->
       s "Identifier %S is not a function, it cannot be called in %s"
         (Sym.to_string id) (Pos.to_string pos)
+  | No_such_field_in_record {field; record; pos} ->
+      s "No field %S in record %S in %s"
+        (Sym.to_string field) (Typ.to_string record) (Pos.to_string pos)
+  | Exp_not_a_record {ty; pos} ->
+      s ( "This expression has type %S, it is not a record, it cannot be"
+        ^^"accessed in %s")
+        (Typ.to_string ty) (Pos.to_string pos)
+  | Wrong_type {expected; given; pos} ->
+      s "Type error: expected: %S, but given: %S, in %s"
+        (Typ.to_string expected)
+        (Typ.to_string given)
+        (Pos.to_string pos)
   | Wrong_type_of_expression_in_var_dec {var_id; expected; given; pos} ->
       s ( "Wrong type of expression in declaration of %S. "
         ^^"Expected: %S, given: %S. In %s")
@@ -117,7 +140,11 @@ let is_unknown_id t =
       true
   | Invalid_syntax _
   | Unknown_type _
+  | Id_is_a_function _
   | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_a_record _
+  | Wrong_type _
   | Wrong_type_of_expression_in_var_dec _
   | Wrong_type_used_as_record _
   | Wrong_type_of_field_value _
This page took 0.021109 seconds and 4 git commands to generate.