diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2021-03-05 20:21:01 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2021-03-05 21:41:58 +0100 |
commit | 1362a9fec4dff341a84c881ac17dbf1ee2cf82fd (patch) | |
tree | ab8582f6b0551316bef6e29c5b18afe6aba8c9a4 | |
parent | 1ff46018f6bdb9641d1044043e6038dfffc897ae (diff) | |
download | emacs-1362a9fec4dff341a84c881ac17dbf1ee2cf82fd.tar.gz |
Make lambda-lifting work again
* lisp/emacs-lisp/cconv.el (cconv--analyze-use): Fix typo.
* test/lisp/emacs-lisp/cconv-tests.el (cconv-convert-lambda-lifted):
Add test case.
-rw-r--r-- | lisp/emacs-lisp/cconv.el | 2 | ||||
-rw-r--r-- | test/lisp/emacs-lisp/cconv-tests.el | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el index 50a8bebf4c0..bd0a3e87e64 100644 --- a/lisp/emacs-lisp/cconv.el +++ b/lisp/emacs-lisp/cconv.el @@ -612,7 +612,7 @@ FORM is the parent form that binds this var." (push (cons (cons binder form) :captured+mutated) cconv-var-classification)) (`(,(and binder `(,_ (function (lambda . ,_)))) nil nil nil t) - (push (cons (cons binder form) :lambda-candidates) + (push (cons (cons binder form) :lambda-candidate) cconv-var-classification)))) (defun cconv--analyze-function (args body env parentform) diff --git a/test/lisp/emacs-lisp/cconv-tests.el b/test/lisp/emacs-lisp/cconv-tests.el index 517373386e3..5aeed0cc155 100644 --- a/test/lisp/emacs-lisp/cconv-tests.el +++ b/test/lisp/emacs-lisp/cconv-tests.el @@ -182,7 +182,14 @@ (should (eq (cconv-tests-cl-defsubst) 'cl-defsubst-result))) (ert-deftest cconv-convert-lambda-lifted () - "Bug#30872." + ;; Verify that lambda-lifting is actually performed at all. + (should (equal (cconv-closure-convert + '#'(lambda (x) (let ((f #'(lambda () (+ x 1)))) + (funcall f)))) + '#'(lambda (x) (let ((f #'(lambda (x) (+ x 1)))) + (funcall f x))))) + + ;; Bug#30872. (should (equal (funcall (byte-compile |