summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2021-03-05 20:21:01 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2021-03-05 21:41:58 +0100
commit1362a9fec4dff341a84c881ac17dbf1ee2cf82fd (patch)
treeab8582f6b0551316bef6e29c5b18afe6aba8c9a4
parent1ff46018f6bdb9641d1044043e6038dfffc897ae (diff)
downloademacs-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.el2
-rw-r--r--test/lisp/emacs-lisp/cconv-tests.el9
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