]> git.eshelyaron.com Git - emacs.git/commit
Use plain symbols for eieio type descriptors (Bug#29220)
authorNoam Postavsky <npostavs@gmail.com>
Mon, 27 May 2019 23:05:56 +0000 (19:05 -0400)
committerNoam Postavsky <npostavs@gmail.com>
Thu, 30 May 2019 22:46:07 +0000 (18:46 -0400)
commit5f01af6c8e0f7355f7a99a80ff32369071f65eda
treef65280a7140425f0db5ad19782c699a0def2bed5
parent4b24b0185d910d756e85ecdc30f49c414577050e
Use plain symbols for eieio type descriptors (Bug#29220)

Since Emacs 26, eieio objects use a class record (with circular
references) as the type descriptor of the object record.  This causes
problems when reading back an object from a string, because the class
record is not `eq' to the canonical one (which means that read objects
don't satisfy the foo-p predicate).
* lisp/emacs-lisp/eieio.el (make-instance): As a (partial) fix, set
the record's type descriptor to a plain symbol for the type descriptor
when eieio-backward-compatibility is non-nil (the default).
* lisp/emacs-lisp/eieio-core.el (eieio--object-class): Call
eieio--class-object on the type tag when eieio-backward-compatibility
is non-nil.
(eieio-object-p): Use eieio--object-class instead of
eieio--object-class-tag.
* test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
(eieio-test-persist-hash-and-vector)
(eieio-test-persist-interior-lists): Make into functions.
(eieio-persist-hash-and-vector-backward-compatibility)
(eieio-persist-hash-and-vector-no-backward-compatibility)
(eieio-test-persist-interior-lists-backward-compatibility)
(eieio-test-persist-interior-lists-no-backward-compatibility): New
tests which call them, eieio-backward-compatibility let-bound.
lisp/emacs-lisp/eieio-core.el
lisp/emacs-lisp/eieio.el
test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el