diff options
Diffstat (limited to 'lisp/emacs-lisp/generator.el')
-rw-r--r-- | lisp/emacs-lisp/generator.el | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el index 77b1fab9b09..284de410580 100644 --- a/lisp/emacs-lisp/generator.el +++ b/lisp/emacs-lisp/generator.el @@ -687,14 +687,12 @@ 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) - (let (preamble) - (when (stringp (car body)) - (push (pop body) preamble)) - (when (eq (car-safe (car body)) 'declare) - (push (pop body) preamble)) + (let* ((parsed-body (macroexp-parse-body body)) + (declarations (car parsed-body)) + (exps (cdr parsed-body))) `(defun ,name ,arglist - ,@(nreverse preamble) - ,(cps-generate-evaluator body)))) + ,@declarations + ,(cps-generate-evaluator exps)))) (defmacro iter-lambda (arglist &rest body) "Return a lambda generator. |