From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#29220: 26.0.90; eieio-persistent-read fail to restore saved object. Date: Mon, 04 Dec 2017 21:08:40 -0500 Message-ID: References: <87y3nga0lv.fsf@killashandra.ballybran.fr> <87zi7udorn.fsf@killashandra.ballybran.fr> <8760aim2a5.fsf@ericabrahamsen.net> <87375j2tzd.fsf@users.sourceforge.net> <87inecwl1v.fsf@killashandra.ballybran.fr> <87y3n81eq7.fsf@users.sourceforge.net> <87h8ts1cfp.fsf@users.sourceforge.net> <87zi7kyzcf.fsf@ericabrahamsen.net> <87efov1zzn.fsf@users.sourceforge.net> <87h8trzc6e.fsf@ericabrahamsen.net> <87bmjz0xez.fsf@users.sourceforge.net> <87zi7cpooo.fsf@killashandra.ballybran.fr> <87h8tkzgef.fsf@users.sourceforge.net> <87zi76f5hj.fsf@killashandra.ballybran.fr> <87shcycavk.fsf@ericabrahamsen.net> <87lgimpdhp.fsf@ericabrahamsen.net> <87h8t8is1u.fsf@ericabrahamsen.net> <87zi6zmzh7.fsf@killashandra.ballybran.fr> <87h8t69d7b.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1512439756 27652 195.159.176.226 (5 Dec 2017 02:09:16 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 5 Dec 2017 02:09:16 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: 29220@debbugs.gnu.org, Pierre =?UTF-8?Q?T=C3=A9choueyres?= , Noam Postavsky To: Eric Abrahamsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Dec 05 03:09:12 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eM2fS-0006ou-IR for geb-bug-gnu-emacs@m.gmane.org; Tue, 05 Dec 2017 03:09:06 +0100 Original-Received: from localhost ([::1]:46018 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eM2fZ-0002eH-MD for geb-bug-gnu-emacs@m.gmane.org; Mon, 04 Dec 2017 21:09:13 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36903) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eM2fR-0002Yo-U0 for bug-gnu-emacs@gnu.org; Mon, 04 Dec 2017 21:09:06 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eM2fO-00013B-OH for bug-gnu-emacs@gnu.org; Mon, 04 Dec 2017 21:09:05 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:37514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eM2fO-00012s-KI for bug-gnu-emacs@gnu.org; Mon, 04 Dec 2017 21:09:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eM2fO-00030G-CQ for bug-gnu-emacs@gnu.org; Mon, 04 Dec 2017 21:09:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Dec 2017 02:09:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 29220 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 29220-submit@debbugs.gnu.org id=B29220.151243973711532 (code B ref 29220); Tue, 05 Dec 2017 02:09:02 +0000 Original-Received: (at 29220) by debbugs.gnu.org; 5 Dec 2017 02:08:57 +0000 Original-Received: from localhost ([127.0.0.1]:46195 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eM2fI-0002zw-Rm for submit@debbugs.gnu.org; Mon, 04 Dec 2017 21:08:57 -0500 Original-Received: from chene.dit.umontreal.ca ([132.204.246.20]:56993) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eM2fG-0002zn-1Y for 29220@debbugs.gnu.org; Mon, 04 Dec 2017 21:08:55 -0500 Original-Received: from fmsmemgm.homelinux.net (lechon.iro.umontreal.ca [132.204.27.242]) by chene.dit.umontreal.ca (8.14.7/8.14.1) with ESMTP id vB528hFS010294; Mon, 4 Dec 2017 21:08:47 -0500 Original-Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id 1095BAE0E9; Mon, 4 Dec 2017 21:08:41 -0500 (EST) In-Reply-To: <87h8t69d7b.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Mon, 04 Dec 2017 17:27:04 -0800") X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 2 Rules triggered EDT_SA_DN_PASS=0, RV6172=0 X-NAI-Spam-Version: 2.3.0.9418 : core <6172> : inlines <6208> : streams <1772202> : uri <2545315> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:140711 Archived-At: > --- a/lisp/emacs-lisp/eieio-base.el > +++ b/lisp/emacs-lisp/eieio-base.el > @@ -354,15 +354,34 @@ eieio-persistent-validate/fix-slot-value > proposed-value)) > (t > proposed-value)))) > + ((stringp proposed-value) > + ;; Remove string properties. > + (substring-no-properties proposed-value)) > + > + ;; For hash-tables and vectors, the top-level `read' will not > + ;; "look inside" member values, so we need to do that > + ;; explicitly. > + ((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)))) > + 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))))) > + proposed-value) > - ((stringp proposed-value) > - ;; Else, check for strings, remove properties. > - (substring-no-properties proposed-value)) > - > - (t > - ;; Else, just return whatever the constant was. > - proposed-value)) > - ) > + (t > + ;; Else, just return whatever the constant was. > + proposed-value))) Not sure why the `stringp` part was reindented, and an empty line was lost (which de-synchronized the diff), but other than that, it looks fine. > + ((hash-table-p thing) > + (maphash > + (lambda (key val) > + (setf (gethash key thing) > + (read > + (with-output-to-string > + (temp-eieio-override-prin1 val))))) > + thing) > + (prin1 thing)) > + ((vectorp thing) > + (dotimes (i (length thing)) > + (aset thing i > + (read > + (with-output-to-string > + (temp-eieio-override-prin1 > + (aref thing i)))))) > + (prin1 thing)) This looks wrong, OTOH: - temp-eieio-override-prin1 does not exist in my copy of Emacs `master`. - you modify the object you received, so while the print part will presumably work OK, the object left after that is unusable. Maybe a better option is to print something of the form (vector ...) i.e. not something that looks like a vector. Or otherwise, print the "standard" syntax of a vector/hash-table, but do it by hand rather than rely on prin1 to do it for us. Stefan