optparse: Process docstring and declarations correctly in defopthandler.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 24 May 2006 08:12:17 +0000 (09:12 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 24 May 2006 08:12:17 +0000 (09:12 +0100)
Previously, the docstring got left inside the with-locatives form, which
is a shame.

optparse.lisp

index 5f28365..ff301ee 100644 (file)
@@ -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)))
+    (multiple-value-bind (docs decls body) (parse-body 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