]> git.eshelyaron.com Git - emacs.git/commitdiff
cl-generic.el: Fix bug#46722
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 5 Jan 2022 19:28:08 +0000 (14:28 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 6 Apr 2022 18:26:40 +0000 (14:26 -0400)
Fix longstanding bug due to unexpected interference via side-effect.

* lisp/emacs-lisp/cl-generic.el (cl--generic-get-dispatcher):
Copy the `dispatch` arg before storing it into the hash-table.

Backport from `master` (cherrypick from commit 61f8f7f68f).

lisp/emacs-lisp/cl-generic.el

index a7e24236a32f2be1e2d6d77c2196cd6db3a6dcea..add8e7fda0c0049f58f19900b57b8a98327b9de9 100644 (file)
@@ -602,7 +602,9 @@ The set of acceptable TYPEs (also called \"specializers\") is defined
 
 (defun cl--generic-get-dispatcher (dispatch)
   (cl--generic-with-memoization
-      (gethash dispatch cl--generic-dispatchers)
+      ;; We need `copy-sequence` here because this `dispatch' object might be
+      ;; modified by side-effect in `cl-generic-define-method' (bug#46722).
+      (gethash (copy-sequence dispatch) cl--generic-dispatchers)
     ;; (message "cl--generic-get-dispatcher (%S)" dispatch)
     (let* ((dispatch-arg (car dispatch))
            (generalizers (cdr dispatch))