[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/fcr 3e055d5: * lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-ge
From: |
Stefan Monnier |
Subject: |
scratch/fcr 3e055d5: * lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-generalizer): Fix precedence |
Date: |
Sat, 18 Dec 2021 23:05:33 -0500 (EST) |
branch: scratch/fcr
commit 3e055d5f58b0ade3f727cbf23d3cc626f737a783
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-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 0dad76a..643c006 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 FCR type
+;; It would make sense to put this into `fcr.el' except that when
+;; `fcr.el' is loaded `cl-defmethod' is not available yet.
+
(defun cl--generic-fcr-tag (name &rest _)
`(fcr-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--fcr-generalizer
- 50 #'cl--generic-fcr-tag
+ ;; Give slightly higher priority than the struct specializer, so that
+ ;; for a generic function with methods dispatching structs and on FCRs,
+ ;; we first try `fcr-type' before `type-of' since `type-of' will return
+ ;; non-nil for an FCR as well.
+ 51 #'cl--generic-fcr-tag
#'cl-generic--fcr-specializers)
(cl-defmethod cl-generic-generalizers :extra "fcr-struct" (type)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- scratch/fcr 3e055d5: * lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-generalizer): Fix precedence,
Stefan Monnier <=