emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 f0cf4dc 3/5: Let eieio-persistent-read read what


From: Eric Abrahamsen
Subject: [Emacs-diffs] emacs-26 f0cf4dc 3/5: Let eieio-persistent-read read what object-write has written
Date: Thu, 22 Mar 2018 00:57:45 -0400 (EDT)

branch: emacs-26
commit f0cf4dc62918a5acd2c6bbade78909cfa73ca9c8
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>

    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.
---
 lisp/emacs-lisp/eieio-base.el | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index af24079..5ff8574 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]