From: Daniel Colascione Date: Tue, 3 Mar 2015 00:11:51 +0000 (-0800) Subject: Fix docstrings, declarations in iter-defun X-Git-Tag: emacs-25.0.90~2564^2~259 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8f0f8c166c2c76789acfa0cf3d42eafbbfa95973;p=emacs.git Fix docstrings, declarations in iter-defun * lisp/emacs-lisp/generator.el (iter-defun): Correctly propagate docstrings and declarations to underlying function. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4ab4406dba1..5018ca4b9de 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-03-03 Daniel Colascione + + * emacs-lisp/generator.el (iter-defun): Correctly propagate + docstrings and declarations to underlying function. + 2015-03-02 Daniel Colascione * emacs-lisp/generator.el: New file. diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el index 4e21e792406..bb9fcff1408 100644 --- a/lisp/emacs-lisp/generator.el +++ b/lisp/emacs-lisp/generator.el @@ -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.