Function: eieio-persistent-read
eieio-persistent-read is a byte-compiled function defined in
eieio-base.el.gz.
Signature
(eieio-persistent-read FILENAME &optional CLASS ALLOW-SUBCLASS)
Documentation
Read a persistent object from FILENAME, and return it.
Signal an error if the object in FILENAME is not a constructor
for CLASS. Optional ALLOW-SUBCLASS says that it is ok for
eieio-persistent-read to load in subclasses of class instead of
being pedantic.
Probably introduced at or before Emacs version 24.3.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/eieio-base.el.gz
(defun eieio-persistent-read (filename &optional class allow-subclass)
"Read a persistent object from FILENAME, and return it.
Signal an error if the object in FILENAME is not a constructor
for CLASS. Optional ALLOW-SUBCLASS says that it is ok for
`eieio-persistent-read' to load in subclasses of class instead of
being pedantic."
(unless class
(warn "`eieio-persistent-read' called without specifying a class"))
(when class (cl-check-type class class))
(let* ((buffstr (with-temp-buffer
(insert-file-contents filename)
(buffer-string)))
;; Do the read in the buffer the read was initialized from
;; so that any initialize-instance calls that depend on
;; the current buffer will work.
(ret (read buffstr)))
(when (not (child-of-class-p (car ret) 'eieio-persistent))
(error
"Invalid object: %s is not a subclass of `eieio-persistent'"
(car ret)))
(when (and class
(not (or (eq (car ret) class) ; same class
(and allow-subclass ; subclass
(child-of-class-p (car ret) class)))))
(error
"Invalid object: %s is not an object of class %s nor a subclass"
(car ret) class))
(setq ret (eieio-persistent-make-instance (car ret) (cdr ret)))
(oset ret file filename)
ret))