From: Stefan Monnier Date: Sun, 19 Dec 2021 04:05:26 +0000 (-0500) Subject: * lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-generalizer): Fix precedence X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3e055d5f58b0ade3f727cbf23d3cc626f737a783;p=emacs.git * lisp/emacs-lisp/cl-generic.el (cl-generic--fcr-generalizer): Fix precedence --- diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 0dad76aa59b..643c006e431 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)