Skip to content

Commit b7bc2ac

Browse files
committed
add warning 109 to signal top-level expressions have type unit
1 parent 13c08d0 commit b7bc2ac

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

typing/typecore.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4873,6 +4873,11 @@ let type_expression env sexp =
48734873
Typetexp.reset_type_variables();
48744874
begin_def();
48754875
let exp = type_exp env sexp in
4876+
if Warnings.is_active Bs_toplevel_expression_unit then
4877+
(try unify env exp.exp_type
4878+
(instance_def Predef.type_unit) with
4879+
| Unify _
4880+
| Tags _ -> Location.prerr_warning sexp.pexp_loc Bs_toplevel_expression_unit);
48764881
end_def();
48774882
if not (is_nonexpansive exp) then generalize_expansive env exp.exp_type;
48784883
generalize exp.exp_type;

utils/warnings.ml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ type t =
105105
| Bs_unimplemented_primitive of string (* 106 *)
106106
| Bs_integer_literal_overflow (* 107 *)
107107
| Bs_uninterpreted_delimiters of string (* 108 *)
108+
| Bs_toplevel_expression_unit (* 109 *)
108109
#end
109110
;;
110111

@@ -193,10 +194,11 @@ let number = function
193194
| Bs_unimplemented_primitive _ -> 106
194195
| Bs_integer_literal_overflow -> 107
195196
| Bs_uninterpreted_delimiters _ -> 108
197+
| Bs_toplevel_expression_unit -> 109
196198
#end
197199
;;
198200

199-
let last_warning_number = 108
201+
let last_warning_number = 109
200202
let letter_all =
201203
let rec loop i = if i = 0 then [] else i :: loop (i - 1) in
202204
loop last_warning_number
@@ -331,7 +333,7 @@ let parse_options errflag s =
331333
current := {error; active}
332334

333335
(* If you change these, don't forget to change them in man/ocamlc.m *)
334-
let defaults_w = "+a-4-6-7-9-27-29-32..42-44-45-48-50-60-102";;
336+
let defaults_w = "+a-4-6-7-9-27-29-32..42-44-45-48-50-60-102-109";;
335337
let defaults_warn_error = "-a+31";;
336338

337339
let () =
@@ -609,6 +611,8 @@ let message = function
609611
"Integer literal exceeds the range of representable integers of type int"
610612
| Bs_uninterpreted_delimiters s ->
611613
"Uninterpreted delimiters " ^ s
614+
| Bs_toplevel_expression_unit ->
615+
"Toplevel expression is expected to have unit type."
612616
#end
613617
;;
614618

@@ -744,7 +748,8 @@ let descriptions =
744748
105, "External name is inferred from val name is unsafe from refactoring when changing value name";
745749
106, "Unimplemented primitive used:";
746750
107, "Integer literal exceeds the range of representable integers of type int";
747-
108, "Uninterpreted delimiters (for unicode)"
751+
108, "Uninterpreted delimiters (for unicode)" ;
752+
109, "Toplevel expression has unit type"
748753
#end
749754
]
750755
;;

utils/warnings.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type t =
9797
| Bs_unimplemented_primitive of string (* 106 *)
9898
| Bs_integer_literal_overflow (* 107 *)
9999
| Bs_uninterpreted_delimiters of string (* 108 *)
100+
| Bs_toplevel_expression_unit (* 109 *)
100101
#end
101102
;;
102103

0 commit comments

Comments
 (0)