Fix docstrings, declarations in iter-defun

* lisp/emacs-lisp/generator.el (iter-defun): Correctly propagate
docstrings and declarations to underlying function.
This commit is contained in:
Daniel Colascione 2015-03-02 16:11:51 -08:00
parent f6b5db6c45
commit 8f0f8c166c
2 changed files with 15 additions and 4 deletions

View 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.