]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix docstrings, declarations in iter-defun
authorDaniel Colascione <dancol@dancol.org>
Tue, 3 Mar 2015 00:11:51 +0000 (16:11 -0800)
committerDaniel Colascione <dancol@dancol.org>
Tue, 3 Mar 2015 00:11:51 +0000 (16:11 -0800)
* lisp/emacs-lisp/generator.el (iter-defun): Correctly propagate
docstrings and declarations to underlying function.

lisp/ChangeLog
lisp/emacs-lisp/generator.el

index 4ab4406dba18209a905dadc4aa418914ca300444..5018ca4b9deecc16eff77314b18fbb5fb5a3ebb0 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-03  Daniel Colascione  <dancol@dancol.org>
+
+       * emacs-lisp/generator.el (iter-defun): Correctly propagate
+       docstrings and declarations to underlying function.
+
 2015-03-02  Daniel Colascione  <dancol@dancol.org>
 
        * emacs-lisp/generator.el: New file.
index 4e21e792406ea9e913db35d8b9d59eda97684f8e..bb9fcff14086ed5d4fe0f7e70d6bfacf3a5b3ead 100644 (file)
@@ -674,10 +674,16 @@ encapsulates the state of a computation that produces a sequence
 of values.  Callers can retrieve each value using `iter-next'."
   (declare (indent defun))
   (cl-assert lexical-binding)
-  `(defun ,name ,arglist
-     ,(cps-generate-evaluator
-       `(cl-macrolet ((iter-yield (value) `(cps-internal-yield ,value)))
-          ,@body))))
+  (let (preamble)
+    (when (stringp (car body))
+      (push (pop body) preamble))
+    (when (eq (car-safe (car body)) 'declare)
+      (push (pop body) preamble))
+    `(defun ,name ,arglist
+       ,@(nreverse preamble)
+       ,(cps-generate-evaluator
+         `(cl-macrolet ((iter-yield (value) `(cps-internal-yield ,value)))
+            ,@body)))))
 
 (defmacro iter-lambda (arglist &rest body)
   "Return a lambda generator.