[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object.
From: |
Stefan Monnier |
Subject: |
bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object. |
Date: |
Tue, 05 Dec 2017 17:14:00 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
> Okay, the attached appears to work just fine. Pierre's recipe passes,
> as do all the tests in eieio-test-persist. Pierre, maybe you could eval
> this quickly and make sure that pcache works correctly again?
Looks good to me.
[ While looking at this code, I notice that with cl-defmethod (which can
dispatch not only on EIEIO objects, but other object types as well)
we can now fold eieio-override-prin1 into object-write (i.e. make one
into an alias for the other). ]
> If this is okay, it's going into emacs-26, right?
I think so, but we're pretty late in the pretest, so better ask Eli&John
if they think it's OK for emacs-26.
Stefan
> diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
> index 58dcd09d7e..0241f27395 100644
> --- a/lisp/emacs-lisp/eieio-base.el
> +++ b/lisp/emacs-lisp/eieio-base.el
> @@ -354,6 +354,26 @@ eieio-persistent-validate/fix-slot-value
> proposed-value))
> (t
> proposed-value))))
> + ;; For hash-tables and vectors, the top-level `read' will not
> + ;; "look inside" member values, so we need to do that
> + ;; explicitly.
> + ((hash-table-p proposed-value)
> + (maphash
> + (lambda (key value)
> + (when (class-p (car-safe value))
> + (setf (gethash key proposed-value)
> + (eieio-persistent-convert-list-to-object
> + value))))
> + proposed-value)
> + proposed-value)
> +
> + ((vectorp proposed-value)
> + (dotimes (i (length proposed-value))
> + (when (class-p (car-safe (aref proposed-value i)))
> + (aset proposed-value i
> + (eieio-persistent-convert-list-to-object
> + (aref proposed-value i)))))
> + proposed-value)
> ((stringp proposed-value)
> ;; Else, check for strings, remove properties.
> diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
> index d0d2ff5145..ab96547f93 100644
> --- a/lisp/emacs-lisp/eieio.el
> +++ b/lisp/emacs-lisp/eieio.el
> @@ -926,6 +926,25 @@ eieio-override-prin1
> (object-write thing))
> ((consp thing)
> (eieio-list-prin1 thing))
> + ((hash-table-p thing)
> + (let ((copy (copy-hash-table thing)))
> + (maphash
> + (lambda (key val)
> + (setf (gethash key copy)
> + (read
> + (with-output-to-string
> + (eieio-override-prin1 val)))))
> + copy)
> + (prin1 copy)))
> + ((vectorp thing)
> + (let ((copy (copy-sequence thing)))
> + (dotimes (i (length copy))
> + (aset copy i
> + (read
> + (with-output-to-string
> + (eieio-override-prin1
> + (aref copy i))))))
> + (prin1 copy)))
> ((eieio--class-p thing)
> (princ (eieio--class-print-name thing)))
> (t (prin1 thing))))
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/01
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Stefan Monnier, 2017/12/01
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/02
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Pierre Téchoueyres, 2017/12/03
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/04
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Stefan Monnier, 2017/12/04
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/05
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Stefan Monnier, 2017/12/05
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/05
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object.,
Stefan Monnier <=
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/05
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eli Zaretskii, 2017/12/08
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/09
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Noam Postavsky, 2017/12/12
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Pierre Téchoueyres, 2017/12/15
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Pierre Téchoueyres, 2017/12/15
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/16
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/18
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Stefan Monnier, 2017/12/18
- bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object., Eric Abrahamsen, 2017/12/20