Function: eieio-oref

eieio-oref is a byte-compiled function defined in eieio-core.el.gz.

Signature

(eieio-oref OBJ SLOT)

Documentation

Return the value in OBJ at SLOT in the object vector.

Aliases

slot-value

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/eieio-core.el.gz
;;; Get/Set slots in an object.

(defun eieio-oref (obj slot)
  "Return the value in OBJ at SLOT in the object vector."
  (declare (compiler-macro
            (lambda (exp)
              (ignore obj)
              (pcase slot
                ((and (or `',name (and name (pred keywordp)))
                      (guard (not (memq name eieio--known-slot-names))))
                 (macroexp-warn-and-return
                  (format-message "Unknown slot `%S'" name)
                  exp nil 'compile-only))
                (_ exp))))
           (gv-setter eieio-oset))
  (cl-check-type slot symbol)
  (cl-check-type obj (or eieio-object class))
  (let* ((class (cond ((symbolp obj)
                       (error "eieio-oref called on a class: %s" obj)
                       (eieio--full-class-object obj))
                      (t (eieio--object-class obj))))
	 (c (eieio--slot-name-index class 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 class slot))
	    ;; Oref that slot.
	    (aref (eieio--class-class-allocation-values class) c)
	  ;; The slot-missing method is a cool way of allowing an object author
	  ;; to intercept missing slot definitions.  Since it is also the LAST
	  ;; thing called in this fn, its return value would be retrieved.
	  (slot-missing obj slot 'oref))
      (cl-check-type obj eieio-object)
      (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))