Fix dynamic binding wrapper in iter-lambda (bug#25965)
* lisp/emacs-lisp/generator.el (cps--make-dynamic-binding-wrapper): Remove extra evaluation of form. * test/lisp/emacs-lisp/generator-tests.el (cps-iter-lambda-with-dynamic-binding): New test.
This commit is contained in:
parent
2a32ee1fbc
commit
9a10c8713b
2 changed files with 11 additions and 2 deletions
|
@ -142,8 +142,7 @@ the CPS state machinery.
|
|||
`(let ((,dynamic-var ,static-var))
|
||||
(unwind-protect ; Update the static shadow after evaluation is done
|
||||
,form
|
||||
(setf ,static-var ,dynamic-var))
|
||||
,form)))
|
||||
(setf ,static-var ,dynamic-var)))))
|
||||
|
||||
(defmacro cps--with-dynamic-binding (dynamic-var static-var &rest body)
|
||||
"Evaluate BODY such that generated atomic evaluations run with
|
||||
|
|
|
@ -282,3 +282,13 @@ identical output.
|
|||
(ert-deftest cps-test-declarations-preserved ()
|
||||
(should (equal (documentation 'generator-with-docstring) "Documentation!"))
|
||||
(should (equal (get 'generator-with-docstring 'lisp-indent-function) 5)))
|
||||
|
||||
(ert-deftest cps-iter-lambda-with-dynamic-binding ()
|
||||
"`iter-lambda' with dynamic binding produces correct result (bug#25965)."
|
||||
(should (= 1
|
||||
(iter-next
|
||||
(funcall (iter-lambda ()
|
||||
(let* ((fill-column 10) ;;any special variable will do
|
||||
(i 0)
|
||||
(j (setq i (1+ i))))
|
||||
(iter-yield i))))))))
|
||||
|
|
Loading…
Add table
Reference in a new issue