Add cl-iter-defun
* lisp/emacs-lisp/cl-macs.el (cl-iter-defun): Add cl-iter-defun.
This commit is contained in:
parent
8f0f8c166c
commit
8af3e1848c
3 changed files with 30 additions and 0 deletions
|
@ -296,6 +296,13 @@ list. Also, the function body is enclosed in an implicit block
|
||||||
called @var{name}; @pxref{Blocks and Exits}.
|
called @var{name}; @pxref{Blocks and Exits}.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
|
@defmac cl-iter-defun name arglist body@dots{}
|
||||||
|
This form is identical to the regular @code{iter-defun} form, except
|
||||||
|
that @var{arglist} is allowed to be a full Common Lisp argument
|
||||||
|
list. Also, the function body is enclosed in an implicit block
|
||||||
|
called @var{name}; @pxref{Blocks and Exits}.
|
||||||
|
@end defmac
|
||||||
|
|
||||||
@defmac cl-defsubst name arglist body@dots{}
|
@defmac cl-defsubst name arglist body@dots{}
|
||||||
This is just like @code{cl-defun}, except that the function that
|
This is just like @code{cl-defun}, except that the function that
|
||||||
is defined is automatically proclaimed @code{inline}, i.e.,
|
is defined is automatically proclaimed @code{inline}, i.e.,
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
2015-03-03 Daniel Colascione <dancol@dancol.org>
|
2015-03-03 Daniel Colascione <dancol@dancol.org>
|
||||||
|
|
||||||
|
* emacs-lisp/cl-macs.el (cl-iter-defun): Add cl-iter-defun.
|
||||||
|
|
||||||
* emacs-lisp/generator.el (iter-defun): Correctly propagate
|
* emacs-lisp/generator.el (iter-defun): Correctly propagate
|
||||||
docstrings and declarations to underlying function.
|
docstrings and declarations to underlying function.
|
||||||
|
|
||||||
|
|
|
@ -301,6 +301,27 @@ and BODY is implicitly surrounded by (cl-block NAME ...).
|
||||||
(form `(defun ,name ,@(cdr res))))
|
(form `(defun ,name ,@(cdr res))))
|
||||||
(if (car res) `(progn ,(car res) ,form) form)))
|
(if (car res) `(progn ,(car res) ,form) form)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defmacro cl-iter-defun (name args &rest body)
|
||||||
|
"Define NAME as a generator function.
|
||||||
|
Like normal `iter-defun', except ARGLIST allows full Common Lisp conventions,
|
||||||
|
and BODY is implicitly surrounded by (cl-block NAME ...).
|
||||||
|
|
||||||
|
\(fn NAME ARGLIST [DOCSTRING] BODY...)"
|
||||||
|
(declare (debug
|
||||||
|
;; Same as iter-defun but use cl-lambda-list.
|
||||||
|
(&define [&or name ("setf" :name setf name)]
|
||||||
|
cl-lambda-list
|
||||||
|
cl-declarations-or-string
|
||||||
|
[&optional ("interactive" interactive)]
|
||||||
|
def-body))
|
||||||
|
(doc-string 3)
|
||||||
|
(indent 2))
|
||||||
|
(require 'generator)
|
||||||
|
(let* ((res (cl--transform-lambda (cons args body) name))
|
||||||
|
(form `(iter-defun ,name ,@(cdr res))))
|
||||||
|
(if (car res) `(progn ,(car res) ,form) form)))
|
||||||
|
|
||||||
;; The lambda list for macros is different from that of normal lambdas.
|
;; The lambda list for macros is different from that of normal lambdas.
|
||||||
;; Note that &environment is only allowed as first or last items in the
|
;; Note that &environment is only allowed as first or last items in the
|
||||||
;; top level list.
|
;; top level list.
|
||||||
|
|
Loading…
Add table
Reference in a new issue