emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/oclosure e65e2bd0aa 12/25: * lisp/emacs-lisp/cl-generic.el (cl-g


From: Stefan Monnier
Subject: scratch/oclosure e65e2bd0aa 12/25: * lisp/emacs-lisp/cl-generic.el (cl-generic--oclosure-generalizer): Fix precedence
Date: Fri, 31 Dec 2021 15:40:58 -0500 (EST)

branch: scratch/oclosure
commit e65e2bd0aacec14b8bc91d79c20eb802e013077a
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    * lisp/emacs-lisp/cl-generic.el (cl-generic--oclosure-generalizer): Fix 
precedence
---
 lisp/emacs-lisp/cl-generic.el | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 072902f6af..44018da30e 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -1279,6 +1279,9 @@ Used internally for the (major-mode MODE) context 
specializers."
 
 ;;; Dispatch on OClosure type
 
+;; It would make sense to put this into `oclosure.el' except that when
+;; `oclosure.el' is loaded `cl-defmethod' is not available yet.
+
 (defun cl--generic-oclosure-tag (name &rest _)
   `(oclosure-type ,name))
 
@@ -1289,7 +1292,11 @@ Used internally for the (major-mode MODE) context 
specializers."
            (cl--class-allparents class)))))
 
 (cl-generic-define-generalizer cl-generic--oclosure-generalizer
-  50 #'cl--generic-oclosure-tag
+  ;; Give slightly higher priority than the struct specializer, so that
+  ;; for a generic function with methods dispatching structs and on OClosures,
+  ;; we first try `oclosure-type' before `type-of' since `type-of' will return
+  ;; non-nil for an OClosure as well.
+  51 #'cl--generic-oclosure-tag
   #'cl-generic--oclosure-specializers)
 
 (cl-defmethod cl-generic-generalizers :extra "oclosure-struct" (type)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]