Function: iter-do
iter-do is a macro defined in generator.el.gz.
Signature
(iter-do (VAR ITERATOR) &rest BODY)
Documentation
Loop over values from an iterator.
Evaluate BODY with VAR bound to each value from ITERATOR. Return the value with which ITERATOR finished iteration.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/generator.el.gz
(cl-defmacro iter-do ((var iterator) &rest body)
"Loop over values from an iterator.
Evaluate BODY with VAR bound to each value from ITERATOR.
Return the value with which ITERATOR finished iteration."
(declare (indent 1)
(debug ((symbolp form) &rest sexp)))
(let ((done-symbol (cps--gensym "iter-do-iterator-done"))
(condition-symbol (cps--gensym "iter-do-condition"))
(it-symbol (cps--gensym "iter-do-iterator"))
(result-symbol (cps--gensym "iter-do-result")))
`(let (,result-symbol
(,done-symbol nil)
(,it-symbol ,iterator))
(while
(let ((,var
(condition-case ,condition-symbol
(iter-next ,it-symbol)
(iter-end-of-sequence
(setf ,result-symbol (cdr ,condition-symbol))
(setf ,done-symbol t)))))
(unless ,done-symbol
,@body
;; Loop until done-symbol is set.
t)))
,result-symbol)))