mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Handle hash tables and vectors when reading/writing EIEIO objects
* lisp/emacs-lisp/eieio.el (eieio-override-prin1): EIEIO objects printed with `prin1' can no longer be read with `read'. Make sure they are printed with object-write instead, even when they're inside hash tables and vectors. * lisp/emacs-lisp/eieio-base.el (eieio-persistent-validate/fix-slot-value): Check for written representations of objects inside hash tables and vectors, and reconstruct them.
This commit is contained in:
parent
cda219c3df
commit
e1cc2037a9
2 changed files with 39 additions and 0 deletions
|
|
@ -913,6 +913,25 @@ this object."
|
|||
(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))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue