summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlain Frisch <alain@frisch.fr>2010-05-04 17:39:17 +0000
committerAlain Frisch <alain@frisch.fr>2010-05-04 17:39:17 +0000
commit46334f76c24fc078dbafcb5b3d06b8cede9366cd (patch)
treeefa5f50b41a7a821cfd52998347df8fc17dfef45
parentf14587620c809ce8315f7b8c61e387d6f2a48146 (diff)
downloadocaml-46334f76c24fc078dbafcb5b3d06b8cede9366cd.tar.gz
Allow range of warnings and synchronize default for warnings given in usage info with the real code.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@10366 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--driver/main_args.ml19
-rw-r--r--utils/warnings.ml36
2 files changed, 31 insertions, 24 deletions
diff --git a/driver/main_args.ml b/driver/main_args.ml
index aeadb2d72a..9b3d990d2d 100644
--- a/driver/main_args.ml
+++ b/driver/main_args.ml
@@ -258,21 +258,24 @@ let mk_vmthread f =
let mk_w f =
"-w", Arg.String f,
+ Printf.sprintf
"<list> Enable or disable warnings according to <list>:\n\
- \ +<num> enable warning <num>\n\
- \ +<letter> enable set <letter>\n\
- \ -<num> disable warning <num>\n\
- \ -<letter> disable set <letter>\n\
- \ @<num> enable warning <num> and treat it as an error\n\
- \ @<letter> enable set <letter> and treat them as errors\n\
- \ default setting is \"+a-4-6-7-9-27-28-29\""
+ \ +<spec> enable warnings in <spec>\n\
+ \ -<spec> disable warnings in <spec>\n\
+ \ @<spec> enable warnings in <spec> and treat them as errors\n\
+ \ <spec> can be:\n\
+ \ <num> a single warning number\n\
+ \ <num1>..<num2> a range of consecutive warning numbers\n\
+ \ <letter> a predefined set\n\
+ \ default setting is %S" Warnings.defaults_w
;;
let mk_warn_error f =
"-warn-error", Arg.String f,
+ Printf.sprintf
"<list> Enable or disable error status for warnings according\n\
\ to <list>. See option -w for the syntax of <list>.\n\
- \ Default setting is \"-a\""
+ \ Default setting is %S" Warnings.defaults_warn_error
;;
let mk_where f =
diff --git a/utils/warnings.ml b/utils/warnings.ml
index 623b42a689..a1577a2b58 100644
--- a/utils/warnings.ml
+++ b/utils/warnings.ml
@@ -137,6 +137,21 @@ let parse_opt flags s =
let clear i = flags.(i) <- false in
let set_all i = active.(i) <- true; error.(i) <- true in
let error () = raise (Arg.Bad "Ill-formed list of warnings") in
+ let rec get_num n i =
+ if i >= String.length s then i, n
+ else match s.[i] with
+ | '0'..'9' -> get_num (10 * n + Char.code s.[i] - Char.code '0') (i + 1)
+ | _ -> i, n
+ in
+ let get_range i =
+ let i, n1 = get_num 0 i in
+ if i + 2 < String.length s && s.[i] = '.' && s.[i + 1] = '.' then
+ let i, n2 = get_num 0 (i + 2) in
+ if n2 < n1 then error ();
+ i, n1, n2
+ else
+ i, n1, n1
+ in
let rec loop i =
if i >= String.length s then () else
match s.[i] with
@@ -153,7 +168,10 @@ let parse_opt flags s =
and loop_letter_num myset i =
if i >= String.length s then error () else
match s.[i] with
- | '0' .. '9' -> loop_num myset i 0
+ | '0' .. '9' ->
+ let i, n1, n2 = get_range i in
+ for n = n1 to min n2 last_warning_number do myset n done;
+ loop i
| 'A' .. 'Z' ->
List.iter myset (letter (Char.lowercase s.[i]));
loop (i+1)
@@ -161,20 +179,6 @@ let parse_opt flags s =
List.iter myset (letter s.[i]);
loop (i+1)
| _ -> error ()
- and loop_num myset i n =
- if n > last_warning_number then ignore_num i
- else if i >= String.length s then myset n
- else
- match s.[i] with
- | '0' .. '9' ->
- loop_num myset (i+1) (10 * n + Char.code s.[i] - Char.code '0')
- | _ -> myset n; loop i
- and ignore_num i =
- if i < String.length s then begin
- match s.[i] with
- | '0' .. '9' -> ignore_num (i+1)
- | _ -> loop i
- end
in
loop 0
;;
@@ -183,7 +187,7 @@ let parse_options errflag s = parse_opt (if errflag then error else active) s;;
(* If you change these, don't forget to change them in driver/main_args.ml
and in man/ocamlc.m *)
-let defaults_w = "+a-4-6-7-9-27-28-29";;
+let defaults_w = "+a-4-6-7-9-27..29";;
let defaults_warn_error = "-a";;
let () = parse_options false defaults_w;;