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))))