GNU bug report logs -
#23947
Regression in EIEIO
Previous Next
Reported by: Stefan Monnier <monnier <at> iro.umontreal.ca>
Date: Mon, 11 Jul 2016 17:29:02 UTC
Severity: normal
Found in version 25.0.95
Fixed in version 25.1
Done: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#23947: Regression in EIEIO
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 23947 <at> debbugs.gnu.org.
--
23947: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23947
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Version: 25.1
Installed, thanks,
Stefan
[Message part 3 (message/rfc822, inline)]
Package: Emacs
Version: 25.0.95
I finally tracked down why GNU ELPA's "rudel" package wasn't working
with Emacs-25, and it turns out to be a combination of two bugs
in the new EIEIO code.
Rudel seems to be the heaviest user of EIEIO so far (e.g. the only user
of the :c3 method invocation order, since the eieio-core code had
a plain bug which made it signal an error whenever that was used).
The patch below lets Rudel setup a shared buffer, so at least the core
functionality now works. To my eyes, this is a very safe patch which
just fixes an incompatibility and an error I introduced in the new EIEIO
code when moving to cl-generic, so I think it should go to emacs-25.
Any objection?
Stefan
2016-07-11 Stefan Monnier <monnier <at> iro.umontreal.ca>
* lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Better obey
EIEIO's `no-applicable-method' calling convention.
* lisp/emacs-lisp/eieio-core.el (eieio--class-precedence-c3): `class'
is not a symbol but a class object.
diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el
index 6d4798b..6aba8a3 100644
--- a/lisp/emacs-lisp/eieio-compat.el
+++ b/lisp/emacs-lisp/eieio-compat.el
@@ -188,7 +188,8 @@ eieio--defmethod
(`no-applicable-method
(setq method 'cl-no-applicable-method)
(setq specializers `(generic ,@specializers))
- (lambda (generic arg &rest args) (apply code arg generic args)))
+ (lambda (generic arg &rest args)
+ (apply code arg (cl--generic-name generic) (cons arg args))))
(_ code))))
(cl-generic-define-method
method (unless (memq kind '(nil :primary)) (list kind))
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 631e4a4..223c2a6 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -976,7 +976,7 @@ eieio--class/struct-parents
(defun eieio--class-precedence-c3 (class)
"Return all parents of CLASS in c3 order."
- (let ((parents (eieio--class-parents (cl--find-class class))))
+ (let ((parents (eieio--class-parents class)))
(eieio--c3-merge-lists
(list class)
(append
@@ -1101,7 +1101,7 @@ eieio--generic-subclass-specializers
(list eieio--generic-subclass-generalizer))
-;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "6aca3c1b5f751a01331761da45fc4f5c")
+;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "dba4205b1a0d7133f1311d975b4d0ebe")
;;; Generated autoloads from eieio-compat.el
(autoload 'eieio--defalias "eieio-compat" "\
This bug report was last modified 9 years and 3 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.