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
..
2020-12-29 08:38:25 +01:00
2020-08-09 15:13:05 -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
2020-05-01 13:05:26 +02:00
2021-01-08 19:59:31 -05:00
2021-01-01 01:13:56 -08:00
2020-10-24 02:36:55 +02: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
2020-10-23 16:29:46 +02:00
2021-01-07 15:12:23 +01:00
2020-11-12 03:20:39 +01: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
2020-10-23 21:07:26 +02:00
2021-01-08 09:58:31 +01: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
2020-09-02 12:53:02 +02:00
2021-01-01 01:13:56 -08:00
2021-01-06 23:07:22 +02:00
2020-08-08 01:40:38 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-07 13:08:52 +01:00
2020-10-22 18:51:00 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2020-10-23 21:07:26 +02: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-07 16:43:27 +01: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-06 17:19:17 -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-08 18:44:13 -05: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-04 10:02:20 -03: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