diff options
| -rw-r--r-- | lisp/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/emacs-lisp/generator.el | 14 |
2 files changed, 15 insertions, 4 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4ab4406dba1..5018ca4b9de 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2015-03-03 Daniel Colascione <dancol@dancol.org> | ||
| 2 | |||
| 3 | * emacs-lisp/generator.el (iter-defun): Correctly propagate | ||
| 4 | docstrings and declarations to underlying function. | ||
| 5 | |||
| 1 | 2015-03-02 Daniel Colascione <dancol@dancol.org> | 6 | 2015-03-02 Daniel Colascione <dancol@dancol.org> |
| 2 | 7 | ||
| 3 | * emacs-lisp/generator.el: New file. | 8 | * 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 | |||
| 674 | of values. Callers can retrieve each value using `iter-next'." | 674 | of values. Callers can retrieve each value using `iter-next'." |
| 675 | (declare (indent defun)) | 675 | (declare (indent defun)) |
| 676 | (cl-assert lexical-binding) | 676 | (cl-assert lexical-binding) |
| 677 | `(defun ,name ,arglist | 677 | (let (preamble) |
| 678 | ,(cps-generate-evaluator | 678 | (when (stringp (car body)) |
| 679 | `(cl-macrolet ((iter-yield (value) `(cps-internal-yield ,value))) | 679 | (push (pop body) preamble)) |
| 680 | ,@body)))) | 680 | (when (eq (car-safe (car body)) 'declare) |
| 681 | (push (pop body) preamble)) | ||
| 682 | `(defun ,name ,arglist | ||
| 683 | ,@(nreverse preamble) | ||
| 684 | ,(cps-generate-evaluator | ||
| 685 | `(cl-macrolet ((iter-yield (value) `(cps-internal-yield ,value))) | ||
| 686 | ,@body))))) | ||
| 681 | 687 | ||
| 682 | (defmacro iter-lambda (arglist &rest body) | 688 | (defmacro iter-lambda (arglist &rest body) |
| 683 | "Return a lambda generator. | 689 | "Return a lambda generator. |