diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-01-05 14:28:08 -0500 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-04-06 14:26:40 -0400 |
commit | 4161a368499a3326d13113aa5c6ab332047df767 (patch) | |
tree | 746dfeea7865cf48418c5444a2acadd29fbab16e /lisp | |
parent | 8c71ac606ec484d5e9cf967b41aadbddb5c8b694 (diff) | |
download | emacs-4161a368499a3326d13113aa5c6ab332047df767.tar.gz emacs-4161a368499a3326d13113aa5c6ab332047df767.tar.bz2 emacs-4161a368499a3326d13113aa5c6ab332047df767.zip |
cl-generic.el: Fix bug#46722
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).
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/emacs-lisp/cl-generic.el | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index a7e24236a32..add8e7fda0c 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -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)) |