X-Git-Url: https://git.distorted.org.uk/~mdw/lisp/blobdiff_plain/a035dd4a8175317f19a35cd04568d1655fb8d417..8f801ae819d1f622601c9786a0fce27102b49378:/optparse.lisp diff --git a/optparse.lisp b/optparse.lisp index 5f28365..4207933 100644 --- a/optparse.lisp +++ b/optparse.lisp @@ -446,13 +446,15 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" on some parameters (the ARGS) and the value of an option-argument named ARG." (let ((func (intern (format nil "OPTHANDLER/~:@(~A~)" name)))) - `(progn - (setf (get ',name 'opthandler) ',func) - (defun ,func (,var ,arg ,@args) - (with-locatives ,var - (declare (ignorable ,arg)) - ,@body)) - ',name))) + (with-parsed-body (body decls docs) body + `(progn + (setf (get ',name 'opthandler) ',func) + (defun ,func (,var ,arg ,@args) + ,@docs ,@decls + (with-locatives ,var + (declare (ignorable ,arg)) + ,@body)) + ',name)))) (defun parse-c-integer (string &key radix (start 0) end) "Parse STRING, or at least the parts of it between START and END, according @@ -462,7 +464,7 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" if RADIX is nil. Returns two values: the integer parsed (or nil if there wasn't enough for a sensible parse), and the index following the characters of the integer." - (unless end (setf end (length string))) + (setf-default end (length string)) (labels ((simple (i r goodp sgn) (multiple-value-bind (a i) @@ -771,8 +773,7 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (flet ((emit () (write-string string stream :start start :end i) (setf start i))) - (unless end - (setf end (length string))) + (setf-default end (length string)) (loop (unless (< i end) (emit)