Files
emacs/test/lisp
Stefan Monnier 29c7f8c915 * lisp/emacs-lisp/cl-macs.el: Optimize self-calls in tail position
Implement a limited form of tail-call optimization for the special
case of recursive functions defined with `cl-labels`.  Only self-recursion
is optimized, no attempt is made to handle more complex cases such a mutual
recursion.

The main benefit is to reduce the use of the stack, tho in my limited
tests, this can also improve performance (about half of the way to
a hand-written `while` loop).

(cl--self-tco): New function.
(cl-labels): Use it.

* lisp/subr.el (letrec): Optimize single-binding corner case.

* test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels): Add tests
to check that TCO is working.
2021-01-08 19:59:31 -05:00
..
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:28:16 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00