Function: oclosure--define-functions
oclosure--define-functions is a macro defined in oclosure.el.gz.
Signature
(oclosure--define-functions NAME COPIERS)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/oclosure.el.gz
(defmacro oclosure--define-functions (name copiers)
(let* ((class (cl--find-class name))
(slotdescs (oclosure--class-slots class)))
`(progn
,@(let ((i -1))
(mapcar (lambda (desc)
(let* ((slot (cl--slot-descriptor-name desc))
(mutable (oclosure--slot-mutable-p desc))
;; Always use a double hyphen: if users wants to
;; make it public, they can do so with an alias.
(aname (intern (format "%S--%S" name slot))))
(cl-incf i)
(if (not mutable)
`(defalias ',aname
;; We use `oclosure--copy' instead of
;; `oclosure--accessor-copy' here to circumvent
;; bootstrapping problems.
(oclosure--copy
oclosure--accessor-prototype
nil ',name ',slot ,i))
(require 'gv) ;For `gv-setter'.
`(progn
(defalias ',aname
(oclosure--accessor-copy
oclosure--mut-getter-prototype
',name ',slot ,i))
(defalias ',(gv-setter aname)
(oclosure--accessor-copy
oclosure--mut-setter-prototype
',name ',slot ,i))))))
slotdescs))
,@(oclosure--defstruct-make-copiers
copiers slotdescs name))))