X-Git-Url: https://git.xandkar.net/?p=tiger.ml.git;a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_error.ml;h=782f138591aa0f726afb250bdf603045959bb47f;hp=ce506d9e606744c5b40dc24bf0a1a743d27e427c;hb=523e2b063b9ba20329af61e18dc9a5ccbaca06a0;hpb=1e835a256b232c01f8af88f78782829764353f70 diff --git a/compiler/src/lib/tiger/tiger_error.ml b/compiler/src/lib/tiger/tiger_error.ml index ce506d9..782f138 100644 --- a/compiler/src/lib/tiger/tiger_error.ml +++ b/compiler/src/lib/tiger/tiger_error.ml @@ -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 _