mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-03 10:31:37 -08:00
Fix slot typecheck in eieio-persistent
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-slot-type-is-class-p): An `or' form can specify multiple potential classes (or null) as valid types for a slot, but previously only the final element of the `or' was actually checked. Now returns all valid classes in the `or' form. (eieio-persistent-validate/fix-slot-value): Check if proposed value matches any of the valid classes. * test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el (eieio-test-multiple-class-slot): Test this behavior.
This commit is contained in:
parent
8b2ab5014b
commit
c59ddb2120
2 changed files with 36 additions and 15 deletions
|
|
@ -195,6 +195,28 @@ persistent class.")
|
|||
(persist-test-save-and-compare persist-woss)
|
||||
(delete-file (oref persist-woss file))))
|
||||
|
||||
;; A slot that can contain one of two different classes, to exercise
|
||||
;; the `or' slot type.
|
||||
|
||||
(defclass persistent-random-class ()
|
||||
())
|
||||
|
||||
(defclass persistent-multiclass-slot (eieio-persistent)
|
||||
((slot1 :initarg :slot1
|
||||
:type (or persistent-random-class null persist-not-persistent))
|
||||
(slot2 :initarg :slot2
|
||||
:type (or persist-not-persistent persist-random-class null))))
|
||||
|
||||
(ert-deftest eieio-test-multiple-class-slot ()
|
||||
(let ((persist
|
||||
(persistent-multiclass-slot "random string"
|
||||
:slot1 (persistent-random-class)
|
||||
:slot2 (persist-not-persistent)
|
||||
:file (concat default-directory "test-ps5.pt"))))
|
||||
(unwind-protect
|
||||
(persist-test-save-and-compare persist)
|
||||
(ignore-errors (delete-file (oref persist file))))))
|
||||
|
||||
;;; Slot with a list of Objects
|
||||
;;
|
||||
;; A slot that contains another object that isn't persistent
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue