[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 9b995d5: (cl-generic-define-method): Side effects a
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master 9b995d5: (cl-generic-define-method): Side effects are evil (bug#20644) |
Date: |
Mon, 25 May 2015 14:53:57 +0000 |
branch: master
commit 9b995d55c566737ef7aa3432826e1b7b656ff1c7
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
(cl-generic-define-method): Side effects are evil (bug#20644)
* lisp/emacs-lisp/cl-generic.el (cl-generic-define-method): Don't reuse
cons-cells that might be used as keys in an `equal' hash-table.
---
lisp/emacs-lisp/cl-generic.el | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index b3c127f..24a04d4 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -432,8 +432,10 @@ which case this method will be invoked when the argument
is `eql' to VAL.
(> (cl--generic-generalizer-priority x)
(cl--generic-generalizer-priority y)))))))
(setq i (1+ i))))
- (if me (setcar me method)
- (setf (cl--generic-method-table generic) (cons method mt)))
+ ;; We used to (setcar me method), but that can cause false positives in
+ ;; the hash-consing table of the method-builder (bug#20644).
+ ;; See the related FIXME in cl--generic-build-combined-method.
+ (setf (cl--generic-method-table generic) (cons method (delq (car me) mt)))
(cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers))
current-load-list :test #'equal)
;; FIXME: Try to avoid re-constructing a new function if the old one
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 9b995d5: (cl-generic-define-method): Side effects are evil (bug#20644),
Stefan Monnier <=