From: Stefan Monnier Date: Wed, 16 Jun 2021 16:53:59 +0000 (-0400) Subject: * lisp/emacs-lisp/cl-generic.el: Fix bug#49053 and bug#47454 X-Git-Tag: emacs-28.0.90~2099 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ff053c706cb903534936c45b04a2aa38e3db1261;p=emacs.git * lisp/emacs-lisp/cl-generic.el: Fix bug#49053 and bug#47454 (cl-generic-define-method): Shorten the time window where the symbol is defined to `dummy`. --- diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 31aa0cb4f9c..544704be387 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -568,17 +568,17 @@ The set of acceptable TYPEs (also called \"specializers\") is defined (cons method mt) ;; Keep the ordering; important for methods with :extra qualifiers. (mapcar (lambda (x) (if (eq x (car me)) method x)) mt))) - (let ((sym (cl--generic-name generic))) ; Actual name (for aliases). + (let ((sym (cl--generic-name generic)) ; Actual name (for aliases). + ;; FIXME: Try to avoid re-constructing a new function if the old one + ;; is still valid (e.g. still empty method cache)? + (gfun (cl--generic-make-function generic))) (unless (symbol-function sym) (defalias sym 'dummy)) ;Record definition into load-history. (cl-pushnew `(cl-defmethod . ,(cl--generic-load-hist-format (cl--generic-name generic) qualifiers specializers)) current-load-list :test #'equal) - ;; FIXME: Try to avoid re-constructing a new function if the old one - ;; is still valid (e.g. still empty method cache)? - (let ((gfun (cl--generic-make-function generic)) - ;; Prevent `defalias' from recording this as the definition site of + (let (;; Prevent `defalias' from recording this as the definition site of ;; the generic function. current-load-list ;; BEWARE! Don't purify this function definition, since that leads