]> git.eshelyaron.com Git - emacs.git/commitdiff
EIEIO: Fix regession (bug#69631)
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 8 Mar 2024 16:24:18 +0000 (11:24 -0500)
committerEshel Yaron <me@eshelyaron.com>
Mon, 11 Mar 2024 09:21:26 +0000 (10:21 +0100)
Not sure why earlier tests did not catch it, but there are more
places where we bump into problems because `eieio--class-precedence-list`
now returns also non-EIEIO classes.

* lisp/obsolete/eieio-compat.el
(eieio--generic-static-object-generalizer):
* lisp/emacs-lisp/eieio-core.el (eieio--generic-generalizer)
(eieio--generic-subclass-specializers): Handle non-EIEIO parents.

* test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
(eieio-test-method-order-list-7): Adjust test.

(cherry picked from commit 5beb56fb53b2d6ee9d5ad621b7fc2c9d1d0ec9c5)

lisp/emacs-lisp/eieio-core.el
lisp/obsolete/eieio-compat.el
test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el

index 7af6e9ff1bbb6a9d61b05e184afcf617d33b8749..9a73e7c74418024f0106f58723c104a5e1e54bf7 100644 (file)
@@ -1056,8 +1056,7 @@ method invocation orders of the involved classes."
   (lambda (tag &rest _)
     (let ((class (cl--find-class tag)))
       (and (eieio--class-p class)
-           (mapcar #'eieio--class-name
-                   (eieio--class-precedence-list class))))))
+           (cl--class-allparents class)))))
 
 (cl-defmethod cl-generic-generalizers :extra "class" (specializer)
   "Support for dispatch on types defined by EIEIO's `defclass'."
@@ -1079,10 +1078,9 @@ method invocation orders of the involved classes."
 ;; Instead, we add a new "subclass" specializer.
 
 (defun eieio--generic-subclass-specializers (tag &rest _)
-  (when (eieio--class-p tag)
-    (mapcar (lambda (class)
-              `(subclass ,(eieio--class-name class)))
-            (eieio--class-precedence-list tag))))
+  (when (cl--class-p tag)
+    (mapcar (lambda (class) `(subclass ,class))
+            (cl--class-allparents tag))))
 
 (cl-generic-define-generalizer eieio--generic-subclass-generalizer
   60 (lambda (name &rest _) `(and (symbolp ,name) (cl--find-class ,name)))
index 26648a4d7bbfcf2728b9bac794734f6a5f722337..8fdcebbd1c4226323eeb5473caa6d3223953b8fe 100644 (file)
@@ -150,10 +150,9 @@ Summary:
   (lambda (tag &rest _)
     (and (symbolp tag) (setq tag (cl--find-class tag))
          (eieio--class-p tag)
-         (let ((superclasses (eieio--class-precedence-list tag))
+         (let ((superclasses (cl--class-allparents tag))
                (specializers ()))
            (dolist (superclass superclasses)
-             (setq superclass (eieio--class-name superclass))
              (push superclass specializers)
              (push `(eieio--static ,superclass) specializers))
            (nreverse specializers)))))
@@ -240,7 +239,7 @@ Summary:
   (declare (obsolete cl-no-applicable-method "25.1"))
   (apply #'cl-no-applicable-method method object args))
 
-(define-obsolete-function-alias 'call-next-method 'cl-call-next-method "25.1")
+(define-obsolete-function-alias 'call-next-method #'cl-call-next-method "25.1")
 (defun next-method-p ()
   (declare (obsolete cl-next-method-p "25.1"))
   ;; EIEIO's `next-method-p' just returned nil when called in an
index b244a56779a9d269fb2b5425df10892cd4f05ba3..fb2c6ea3b68778d5892ad34bdc8935fbf3321a48 100644 (file)
        (ans '(
               (:PRIMARY D)
               (:PRIMARY D-base1)
-              ;; (:PRIMARY D-base2)
+              (:PRIMARY D-base2)
               (:PRIMARY D-base0)
               )))
     (eitest-F (D nil))