diff options
| author | Alain Frisch <alain@frisch.fr> | 2010-05-04 17:39:17 +0000 |
|---|---|---|
| committer | Alain Frisch <alain@frisch.fr> | 2010-05-04 17:39:17 +0000 |
| commit | 46334f76c24fc078dbafcb5b3d06b8cede9366cd (patch) | |
| tree | efa5f50b41a7a821cfd52998347df8fc17dfef45 | |
| parent | f14587620c809ce8315f7b8c61e387d6f2a48146 (diff) | |
| download | ocaml-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.ml | 19 | ||||
| -rw-r--r-- | utils/warnings.ml | 36 |
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;; |
