summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/generator.el
diff options
context:
space:
mode:
authorDaniel Colascione <dancol@dancol.org>2015-03-03 13:18:00 -0800
committerDaniel Colascione <dancol@dancol.org>2015-03-03 13:19:25 -0800
commit8b38d30e1b02809c34cfba9c7f15ca46f9d45f80 (patch)
treea5a5a73f2af6ca28da220e31965e20b9f128ab82 /lisp/emacs-lisp/generator.el
parent7133f262bbd818509825a3317c91e91e62bd56fb (diff)
downloademacs-8b38d30e1b02809c34cfba9c7f15ca46f9d45f80.tar.gz
emacs-8b38d30e1b02809c34cfba9c7f15ca46f9d45f80.tar.bz2
emacs-8b38d30e1b02809c34cfba9c7f15ca46f9d45f80.zip
Use `macroexp-parse-body'
* lisp/emacs-lisp/generator.el: (iter-defun): Use `macroexp-parse-body'. * test/automated/generator-tests.el (cps-testcase): Use (cps-test-declarations-preserved): New test.
Diffstat (limited to 'lisp/emacs-lisp/generator.el')
-rw-r--r--lisp/emacs-lisp/generator.el12
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.