X-Git-Url: https://git.xandkar.net/?p=tiger.ml.git;a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_error.ml;fp=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_error.ml;h=f2b3ae1774514e80b68373370cba37192755086f;hp=11b4b9524124cb058f8b086b522fa6d8e1cde0e5;hb=35dccbd3999a8c3bb1dc9e96e21b69a39f44fc6f;hpb=e6e82c0866db4eb08f956b2582e5c2ed5399e986 diff --git a/compiler/src/lib/tiger/tiger_error.ml b/compiler/src/lib/tiger/tiger_error.ml index 11b4b95..f2b3ae1 100644 --- a/compiler/src/lib/tiger/tiger_error.ml +++ b/compiler/src/lib/tiger/tiger_error.ml @@ -10,6 +10,7 @@ type t = ; to_id : Sym.t ; to_pos : Pos.t } + | Break_outside_loop of Pos.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} @@ -80,6 +81,8 @@ let to_string = function | Invalid_syntax pos -> s "Invalid syntax in %s" (Pos.to_string pos) + | Break_outside_loop pos -> + s "Break statement is not within a loop. In %s" (Pos.to_string pos) | Cycle_in_type_decs {from_id; from_pos; to_id; to_pos} -> s ( "Circular type declaration between %S and %S." ^^"Locations: %S (in %s), %S (in %s).") @@ -167,6 +170,7 @@ let is_unknown_id t = match t with | Unknown_id _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Invalid_syntax _ | Unknown_type _ @@ -190,6 +194,7 @@ let is_unknown_type t = match t with | Unknown_type _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Unknown_id _ | Invalid_syntax _ @@ -213,6 +218,7 @@ let is_wrong_type t = match t with | Wrong_type _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Unknown_type _ | Unknown_id _ @@ -236,6 +242,7 @@ let is_wrong_number_of_args t = match t with | Wrong_number_of_args _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Wrong_type _ | Unknown_type _ @@ -259,6 +266,7 @@ let is_invalid_syntax t = match t with | Invalid_syntax _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Wrong_type _ | Unknown_type _ @@ -282,6 +290,7 @@ let is_not_a_record t = match t with | Exp_not_a_record _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Invalid_syntax _ | Wrong_type _ @@ -305,6 +314,7 @@ let is_not_an_array t = match t with | Exp_not_an_array _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Exp_not_a_record _ | Invalid_syntax _ @@ -328,6 +338,7 @@ let is_no_such_field_in_record t = match t with | No_such_field_in_record _ -> true + | Break_outside_loop _ | Cycle_in_type_decs _ | Exp_not_an_array _ | Exp_not_a_record _ @@ -351,6 +362,31 @@ let is_cycle_in_type_dec t = match t with | Cycle_in_type_decs _ -> true + | Break_outside_loop _ + | No_such_field_in_record _ + | 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 _ + | Wrong_number_of_args _ + | Invalid_operand_type _ + | Different_operand_types _ -> + false + +let is_break_outside_loop t = + match t with + | Break_outside_loop _ -> + true + | Cycle_in_type_decs _ | No_such_field_in_record _ | Exp_not_an_array _ | Exp_not_a_record _