Let eieio-persistent-read read what object-write has written

* lisp/emacs-lisp/eieio-base.el (eieio-persistent-validate/fix-slot-value):
  `object-write' may quote lists inside hash tables and vectors, so
  unquote those lists here.

This patch allows the eieio-persistent write/restore process to
perform a clean round trip. It only handles a very specific and
limited range of object structures, but at least the write and read
procedures match.
This commit is contained in:
Eric Abrahamsen 2017-12-28 18:14:47 -08:00
parent 40ad1ff327
commit f0cf4dc629

View file

@ -360,19 +360,28 @@ Second, any text properties will be stripped from strings."
((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))))
(cond ((class-p (car-safe value))
(setf (gethash key proposed-value)
(eieio-persistent-convert-list-to-object
value)))
((and (consp value)
(eq (car value) 'quote))
(setf (gethash key proposed-value)
(cadr 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)))))
(let ((val (aref proposed-value i)))
(cond ((class-p (car-safe val))
(aset proposed-value i
(eieio-persistent-convert-list-to-object
(aref proposed-value i))))
((and (consp val)
(eq (car val) 'quote))
(aset proposed-value i
(cadr val))))))
proposed-value)
((stringp proposed-value)