aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Commandline.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2022-09-04 19:12:29 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2022-09-23 13:55:44 +0200
commit43de01e92a629d6728b48be1a7d38ee9a37c2626 (patch)
treeafc9d71e3e9f2fe935df9d237a226b2bcee3d09a /lib/Commandline.ml
parentefcb5cacba9bcdbd31c583ff1308a06daf56d35d (diff)
downloadcompcert-43de01e92a629d6728b48be1a7d38ee9a37c2626.tar.gz
compcert-43de01e92a629d6728b48be1a7d38ee9a37c2626.zip
Add `Commandline.longopt` function for options of the form `-<key>=<arg>`
Also: use `int_of_string_opt` instead of `int_of_string` for slightly cleaner code.
Diffstat (limited to 'lib/Commandline.ml')
-rw-r--r--lib/Commandline.ml33
1 files changed, 13 insertions, 20 deletions
diff --git a/lib/Commandline.ml b/lib/Commandline.ml
index 2f0d7cc1..3030eab5 100644
--- a/lib/Commandline.ml
+++ b/lib/Commandline.ml
@@ -91,14 +91,11 @@ let parse_array spec argv first last =
end
| Some(Integer fn) ->
if i + 1 <= last then begin
- let n =
- try
- int_of_string argv.(i+1)
- with Failure _ ->
+ match int_of_string_opt argv.(i+1) with
+ | Some n -> fn n; parse (i+2)
+ | None ->
let msg = sprintf "argument to option `%s' must be an integer" s in
raise (CmdError msg)
- in
- fn n; parse (i+2)
end else begin
let msg = sprintf "option `%s' expects an argument" s in
raise (CmdError msg)
@@ -124,19 +121,15 @@ let argv =
let parse_cmdline spec =
parse_array spec argv 1 (Array.length argv - 1)
-let long_int_action key s =
- let ls = String.length s
- and lkey = String.length key in
- assert (ls > lkey);
- let s = String.sub s (lkey + 1) (ls - lkey - 1) in
- try
- int_of_string s
- with Failure _ ->
- let msg = sprintf "argument to option `%s' must be an integer" key in
- raise (CmdError msg)
+let longopt key f =
+ let lkey = String.length key + 1 in
+ let act s = f (String.sub s lkey (String.length s - lkey)) in
+ (Prefix (key ^ "="), Self act)
let longopt_int key f =
- let act s =
- let n = long_int_action key s in
- f n in
- Prefix (key ^ "="),Self act
+ longopt key (fun s ->
+ match int_of_string_opt s with
+ | Some n -> f n
+ | None ->
+ let msg = sprintf "argument to option `%s' must be an integer" key in
+ raise (CmdError msg))