Fix - check number of arguments in function calls
[tiger.ml.git] / compiler / src / lib / tiger / tiger_error.ml
index 782f138..88096a2 100644 (file)
@@ -11,6 +11,7 @@ type 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}
+  | Exp_not_an_array  of {ty    : Typ.t; pos : Pos.t}
   | Wrong_type of
       { expected : Typ.t
       ; given    : Typ.t
@@ -27,6 +28,11 @@ type t =
       ; ty       : Typ.t
       ; pos      : Pos.t
       }
+  | Wrong_type_used_as_array of
+      { ty_id    : Sym.t
+      ; ty       : Typ.t
+      ; pos      : Pos.t
+      }
   | Wrong_type_of_field_value of
       { field_id : Sym.t
       ; expected : Typ.t
@@ -82,7 +88,11 @@ let to_string =
       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"
+      s ( "The expression of type %S is not a record, it cannot be"
+        ^^"accessed in %s")
+        (Typ.to_string ty) (Pos.to_string pos)
+  | Exp_not_an_array {ty; pos} ->
+      s ( "The expression of type %S is not an array, it cannot be"
         ^^"accessed in %s")
         (Typ.to_string ty) (Pos.to_string pos)
   | Wrong_type {expected; given; pos} ->
@@ -97,6 +107,10 @@ let to_string =
         (Typ.to_string expected)
         (Typ.to_string given)
         (Pos.to_string pos)
+  | Wrong_type_used_as_array {ty_id; ty; pos} ->
+      s ( "Identifier %S is bound to type %S, not an array. "
+        ^^"It cannot be used in %s")
+        (Sym.to_string ty_id) (Typ.to_string ty) (Pos.to_string pos)
   | Wrong_type_used_as_record {ty_id; ty; pos} ->
       s ( "Identifier %S is bound to type %S, not a record. "
         ^^"It cannot be used in %s")
@@ -144,8 +158,164 @@ let is_unknown_id t =
   | Id_not_a_function _
   | No_such_field_in_record _
   | Exp_not_a_record _
+  | Exp_not_an_array _
+  | Wrong_type _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_unknown_type t =
+  match t with
+  | Unknown_type _ ->
+      true
+  | Unknown_id _
+  | Invalid_syntax _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_a_record _
+  | Exp_not_an_array _
+  | Wrong_type _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_wrong_type t =
+  match t with
+  | Wrong_type _ ->
+      true
+  | Unknown_type _
+  | Unknown_id _
+  | Invalid_syntax _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_a_record _
+  | Exp_not_an_array _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_wrong_number_of_args t =
+  match t with
+  | Wrong_number_of_args _ ->
+      true
+  | Wrong_type _
+  | Unknown_type _
+  | Unknown_id _
+  | Invalid_syntax _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_a_record _
+  | Exp_not_an_array _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_invalid_syntax t =
+  match t with
+  | Invalid_syntax _ ->
+      true
+  | Wrong_type _
+  | Unknown_type _
+  | Unknown_id _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_a_record _
+  | Exp_not_an_array _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_not_a_record t =
+  match t with
+  | Exp_not_a_record _ ->
+      true
+  | Invalid_syntax _
+  | Wrong_type _
+  | Unknown_type _
+  | Unknown_id _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Exp_not_an_array _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_not_an_array t =
+  match t with
+  | Exp_not_an_array _ ->
+      true
+  | Exp_not_a_record _
+  | Invalid_syntax _
+  | Wrong_type _
+  | Unknown_type _
+  | Unknown_id _
+  | Id_is_a_function _
+  | Id_not_a_function _
+  | No_such_field_in_record _
+  | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
+  | Wrong_type_used_as_record _
+  | Wrong_type_of_field_value _
+  | Wrong_type_of_arg _
+  | Wrong_number_of_args _
+  | Invalid_operand_type _
+  | Different_operand_types _ ->
+      false
+
+let is_no_such_field_in_record t =
+  match t with
+  | No_such_field_in_record _ ->
+      true
+  | Exp_not_an_array _
+  | Exp_not_a_record _
+  | Invalid_syntax _
   | Wrong_type _
+  | Unknown_type _
+  | Unknown_id _
+  | Id_is_a_function _
+  | Id_not_a_function _
   | Wrong_type_of_expression_in_var_dec _
+  | Wrong_type_used_as_array _
   | Wrong_type_used_as_record _
   | Wrong_type_of_field_value _
   | Wrong_type_of_arg _
This page took 0.031876 seconds and 4 git commands to generate.