summaryrefslogtreecommitdiff
path: root/test/lisp/emacs-lisp
diff options
context:
space:
mode:
authorVibhav Pant <vibhavp@gmail.com>2023-03-01 15:04:34 +0530
committerVibhav Pant <vibhavp@gmail.com>2023-03-01 15:04:34 +0530
commit0040737e4f1b58caf865857019337a80c1d3371c (patch)
treec74a49a95139dc647b4724dd4cb7b3a6b124b729 /test/lisp/emacs-lisp
parent522b82118de77e33bd701853b6aa7dfda19b11fc (diff)
downloademacs-fix/bug-60974.tar.gz
Don't modify interactive closures destructively (Bug#60974).fix/bug-60974
* lisp/emacs-lisp/cconv.el (cconv-convert): When form is an interactive lambda form, don't destructively modify it, as it might be a constant literal. Instead, create a new list with the relevant place(s) changed. * test/lisp/emacs-lisp/cconv-tests.el (cconv-tests-interactive-form-modify-bug60974): New test.
Diffstat (limited to 'test/lisp/emacs-lisp')
-rw-r--r--test/lisp/emacs-lisp/cconv-tests.el12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/lisp/emacs-lisp/cconv-tests.el b/test/lisp/emacs-lisp/cconv-tests.el
index 349ffeb7e47..6facd3452ea 100644
--- a/test/lisp/emacs-lisp/cconv-tests.el
+++ b/test/lisp/emacs-lisp/cconv-tests.el
@@ -376,6 +376,18 @@
(eval '(lambda (x) :closure-dont-trim-context (+ x 1))
`((y . ,magic-string)))))))
+(ert-deftest cconv-tests-interactive-form-modify-bug60974 ()
+ (let* ((f '(function (lambda (&optional arg)
+ (interactive
+ (list (if current-prefix-arg
+ (prefix-numeric-value current-prefix-arg)
+ 'toggle)))
+ (ignore arg))))
+ (if (cadr (nth 2 (cadr f))))
+ (if2))
+ (cconv-closure-convert f)
+ (setq if2 (cadr (nth 2 (cadr f))))
+ (should (eq if if2))))
(provide 'cconv-tests)
;;; cconv-tests.el ends here