diff options
author | Eric Abrahamsen <eric@ericabrahamsen.net> | 2017-12-28 18:14:47 -0800 |
---|---|---|
committer | Eric Abrahamsen <eric@ericabrahamsen.net> | 2018-03-22 10:46:08 +0800 |
commit | f0cf4dc62918a5acd2c6bbade78909cfa73ca9c8 (patch) | |
tree | bf38688abd9a56e8acc6e6eb3d19e9d77ab3951d /lisp/emacs-lisp | |
parent | 40ad1ff327616721ce060ea774631b54e3ba26ca (diff) | |
download | emacs-f0cf4dc62918a5acd2c6bbade78909cfa73ca9c8.tar.gz emacs-f0cf4dc62918a5acd2c6bbade78909cfa73ca9c8.tar.bz2 emacs-f0cf4dc62918a5acd2c6bbade78909cfa73ca9c8.zip |
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.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/eieio-base.el | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index af240794e38..5ff8574d9a9 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el @@ -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) |