0
@@ -270,6 +270,7 @@ let tokenize raw =
0
+ | Required (Unit uh) -> uh ()
0
| Required _ -> raise (Bad "no data left for required arguments")
0
| Optional (_,unitfun) -> unitfun () in
0
@@ -280,13 +281,11 @@ let parse ~keywords ~others ~usage:args ~descr ~notes =
0
let handler_queue = Queue.create ()
0
and extra_arg_handler = ref others in
0
let enqueue_require = function
0
- | Unit noarg -> noarg ()
0
| Set ref -> ref := true
0
| Clear ref -> ref := false
0
| Rest sh -> extra_arg_handler := sh
0
| h -> Queue.add (Required h) handler_queue
0
and enqueue_option = function
0
- | (Unit u,_) -> raise (Bad "Unit arguments can't be optional")
0
| (Set _,_) -> raise (Bad "Set arguments can't be optional")
0
| (Clear _,_) -> raise (Bad "Clear options can't be optional")
0
| (Rest sh,_) -> extra_arg_handler := sh
0
@@ -309,23 +308,24 @@ let parse ~keywords ~others ~usage:args ~descr ~notes =
0
Not_found -> raise (Bad ("argument not found:" ^ name))
0
match Queue.take handler_queue with
0
- | Optional (h,_) -> h in
0
+ | Optional (h,_) -> h in
0
- | Int ih -> ih (int_of_string arg)
0
- | Float fh -> fh (float_of_string arg)
0
- | String_var svh -> svh := arg
0
- | Int_var ivh -> ivh := (int_of_string arg)
0
- | Float_var fvh -> fvh := (float_of_string arg)
0
- | _ -> raise (Bad "Ran into bad argument handler")
0
+ | Int ih -> ih (int_of_string arg)
0
+ | Float fh -> fh (float_of_string arg)
0
+ | String_var svh -> svh := arg
0
+ | Int_var ivh -> ivh := (int_of_string arg)
0
+ | Float_var fvh -> fvh := (float_of_string arg)
0
+ | Unit uh -> uh (); handle arg
0
+ | _ -> raise (Bad "Ran into bad argument handler")
0
- Queue.Empty -> !extra_arg_handler arg
0
- | Failure x -> raise (Bad ("Failed converting: "^x))
0
+ Queue.Empty -> !extra_arg_handler arg
0
+ | Failure x -> raise (Bad ("Failed converting: "^x))
0
match tokenize arg with
Comments
No one has commented yet.