From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: pierre.techoueyres@free.fr (Pierre Téchoueyres)
Cc: jwiegley@gmail.com, 29220@debbugs.gnu.org,
monnier@iro.umontreal.ca,
Noam Postavsky <npostavs@users.sourceforge.net>
Subject: bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object.
Date: Mon, 18 Dec 2017 11:52:07 -0800 [thread overview]
Message-ID: <87k1xjke54.fsf@ericabrahamsen.net> (raw)
In-Reply-To: <87y3nga0lv.fsf@killashandra.ballybran.fr>
On 12/15/17 23:26 PM, Pierre Téchoueyres wrote:
> Of course with the good example and patch this will be more obvious.
And there's another problem here, manifesting in the Gnus registry.
Here's the issue:
(setq test-hash (make-hash-table :test #'equal))
(puthash "<msg@id>" '((sender "me")) test-hash)
(gethash "<msg@id>" test-hash)
(let (eval-expression-print-length)
(prin1 test-hash))
=> Data is correct: ("<msg@id>" ((sender "me")))
(let (eval-expression-print-length)
(eieio-override-prin1 test-hash))
=> Data is incorrect: ("<msg@id>" (quote ((sender "me"))))
The basic problem is that the code is really only set up to do
single-layer reading/writing, and nesting the process runs into
difficulties.
Hash table values are re-written with:
(maphash
(lambda (key val)
(setf (gethash key copy)
(read
(with-output-to-string
(eieio-override-prin1 val)))))
copy)
If VAL is a list, it ends up in `eieio-list-prin1', which wraps it in a
call to `quote'.
The read process looks for these calls to `quote' and removes them, but
it only does it for top-level slot values. If the data is inside
something else (hash table values, in this case), the `quote' calls
remain in the code.
I'd really like to simplify this whole process (it should just walk the
whole tree and convert objects, nothing else -- why write quotes only to
delete them on read?) but in the meantime, I hope we can get a minimum
viable fix in for 26.
My feeling is that we could just remove the addition of the quote
character in `eieio-list-prin1'. The eieio-persistent load process only
`read's, doesn't `eval', so in theory the quote is superfluous. The
check for its presence would stay in.
Any thoughts on this? Obviously I will test better than I have been...
Eric
next prev parent reply other threads:[~2017-12-18 19:52 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-08 22:04 bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object Pierre Téchoueyres
2017-11-08 22:48 ` Eric Abrahamsen
2017-11-10 17:31 ` Pierre Téchoueyres
2017-11-10 18:12 ` Eric Abrahamsen
2017-11-10 18:32 ` Pierre Téchoueyres
2017-11-12 19:10 ` Noam Postavsky
2017-11-14 22:30 ` Pierre Téchoueyres
2017-11-15 2:02 ` Noam Postavsky
2017-11-15 15:29 ` Stefan Monnier
2017-11-17 19:56 ` Pierre Téchoueyres
2017-11-18 3:40 ` Noam Postavsky
2017-11-18 4:39 ` Eric Abrahamsen
2017-11-18 13:24 ` Noam Postavsky
2017-11-18 18:14 ` Eric Abrahamsen
2017-11-19 3:17 ` Noam Postavsky
2017-11-19 5:57 ` Eric Abrahamsen
2017-11-23 23:20 ` Pierre Téchoueyres
2017-11-24 0:09 ` Noam Postavsky
2017-11-28 21:39 ` Pierre Téchoueyres
2017-11-28 21:52 ` Noam Postavsky
2017-11-28 22:18 ` Pierre Téchoueyres
2017-11-29 1:09 ` Noam Postavsky
2017-11-29 15:18 ` Stefan Monnier
2017-11-28 22:10 ` Eric Abrahamsen
2017-11-29 15:15 ` Stefan Monnier
2017-12-01 17:25 ` Eric Abrahamsen
2017-12-01 17:55 ` Stefan Monnier
2017-12-03 0:17 ` Eric Abrahamsen
2017-12-03 18:35 ` Pierre Téchoueyres
2017-12-05 1:27 ` Eric Abrahamsen
2017-12-05 2:08 ` Stefan Monnier
2017-12-05 17:47 ` Eric Abrahamsen
2017-12-05 19:02 ` Stefan Monnier
2017-12-05 20:56 ` Eric Abrahamsen
2017-12-05 22:14 ` Stefan Monnier
2017-12-05 22:58 ` Eric Abrahamsen
2017-12-08 10:41 ` Eli Zaretskii
2017-12-09 16:59 ` Eric Abrahamsen
2017-12-12 23:21 ` Noam Postavsky
2017-12-15 20:26 ` Pierre Téchoueyres
2017-12-15 22:26 ` Pierre Téchoueyres
2017-12-16 23:42 ` Eric Abrahamsen
2018-02-20 19:50 ` Pierre Téchoueyres
2018-02-24 21:23 ` Eric Abrahamsen
2018-02-24 23:21 ` Pierre Téchoueyres
2018-02-24 23:40 ` Eric Abrahamsen
2018-02-25 0:34 ` Pierre Téchoueyres
2018-02-25 18:59 ` Eric Abrahamsen
2019-05-27 23:36 ` Noam Postavsky
2019-05-28 21:17 ` Eric Abrahamsen
2019-05-30 22:50 ` Noam Postavsky
2017-12-18 19:52 ` Eric Abrahamsen [this message]
2017-12-18 21:38 ` Stefan Monnier
2017-12-20 18:29 ` Eric Abrahamsen
2017-12-20 20:54 ` Stefan Monnier
2017-12-21 2:21 ` Eric Abrahamsen
2017-12-24 2:18 ` Eric Ludlam
2017-12-28 18:44 ` Eric Abrahamsen
2017-12-05 22:20 ` Pierre Téchoueyres
2018-01-24 19:17 ` Pierre Téchoueyres
2018-01-25 3:09 ` Eric Abrahamsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k1xjke54.fsf@ericabrahamsen.net \
--to=eric@ericabrahamsen.net \
--cc=29220@debbugs.gnu.org \
--cc=jwiegley@gmail.com \
--cc=monnier@iro.umontreal.ca \
--cc=npostavs@users.sourceforge.net \
--cc=pierre.techoueyres@free.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).