diff options
author | Daniel Colascione <dancol@dancol.org> | 2015-03-03 13:18:00 -0800 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2015-03-03 13:19:25 -0800 |
commit | 8b38d30e1b02809c34cfba9c7f15ca46f9d45f80 (patch) | |
tree | a5a5a73f2af6ca28da220e31965e20b9f128ab82 /lisp/emacs-lisp/generator.el | |
parent | 7133f262bbd818509825a3317c91e91e62bd56fb (diff) | |
download | emacs-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.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. |