Function: eieio-oref-default
eieio-oref-default is a byte-compiled function defined in
eieio-core.el.gz.
Signature
(eieio-oref-default CLASS SLOT)
Documentation
Do the work for the macro oref-default with similar parameters.
Fills in CLASS's SLOT with its default value.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/eieio-core.el.gz
(defun eieio-oref-default (class slot)
"Do the work for the macro `oref-default' with similar parameters.
Fills in CLASS's SLOT with its default value."
(declare (gv-setter eieio-oset-default)
(compiler-macro
(lambda (exp)
(ignore class)
(pcase slot
((and (or `',name (and name (pred keywordp)))
(guard (not (eieio--known-slot-name-p name))))
(macroexp-warn-and-return
(format-message "Unknown slot `%S'" name)
exp nil 'compile-only name))
((and (or `',name (and name (pred keywordp)))
(guard (not (memq name eieio--known-class-slot-names))))
(macroexp-warn-and-return
(format-message "Slot `%S' is not class-allocated" name)
exp nil 'compile-only name))
(_ exp)))))
(cl-check-type class (or eieio-object class))
(cl-check-type slot symbol)
(let* ((cl (cond ((symbolp class) (cl--find-class class))
((eieio-object-p class) (eieio--object-class class))
(t class)))
(c (eieio--slot-name-index cl slot)))
(if (not c)
;; It might be missing because it is a :class allocated slot.
;; Let's check that info out.
(if (setq c
(eieio--class-slot-name-index cl slot))
;; Oref that slot.
(aref (eieio--class-class-allocation-values cl)
c)
(slot-missing class slot 'oref-default))
(eieio-barf-if-slot-unbound
(let ((val (cl--slot-descriptor-initform
(aref (eieio--class-slots cl)
(- c (eval-when-compile eieio--object-num-slots))))))
(eval val t))
class (eieio--class-name cl) 'oref-default))))