Commit 72229f17 authored by Stefan Monnier's avatar Stefan Monnier

* lisp/emacs-lisp/eieio*.el: Use (:documentation ...) feature

* lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Use new
special (:documentation ...) feature.
* lisp/emacs-lisp/eieio-core.el (eieio-make-class-predicate)
(eieio-make-child-predicate): Same.
(eieio-copy-parents-into-subclass): Remove unused arg.
(eieio-defclass-internal): Adjust call accordingly and remove redundant
`pname' var.
(eieio--slot-name-index): Remove unused arg `obj' and adjust all
callers accordingly.
parent ad5a7c86
2015-02-05 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eieio-compat.el (eieio--defmethod): Use new
special (:documentation ...) feature.
* emacs-lisp/eieio-core.el (eieio-make-class-predicate)
(eieio-make-child-predicate): Same.
(eieio-copy-parents-into-subclass): Remove unused arg.
(eieio-defclass-internal): Adjust call accordingly and remove redundant
`pname' var.
(eieio--slot-name-index): Remove unused arg `obj' and adjust all
callers accordingly.
* emacs-lisp/cconv.el (cconv--convert-function):
Add `docstring' argument.
(cconv-convert): Use it to handle the new (:documentation ...) form.
......
......@@ -290,8 +290,7 @@ constructor functions are considered valid.
Second, any text properties will be stripped from strings."
(cond ((consp proposed-value)
;; Lists with something in them need special treatment.
(let ((slot-idx (eieio--slot-name-index class
nil slot))
(let ((slot-idx (eieio--slot-name-index class slot))
(type nil)
(classtype nil))
(setq slot-idx (- slot-idx
......
......@@ -188,11 +188,10 @@ Summary:
(args (help-function-arglist code 'preserve-names))
(doc-only (if docstring
(let ((split (help-split-fundoc docstring nil)))
(if split (cdr split) docstring))))
(new-docstring (help-add-fundoc-usage doc-only
(cons 'cl-cnm args))))
;; FIXME: ¡Add new-docstring to those closures!
(if split (cdr split) docstring)))))
(lambda (cnm &rest args)
(:documentation
(help-add-fundoc-usage doc-only (cons 'cl-cnm args)))
(cl-letf (((symbol-function 'call-next-method) cnm)
((symbol-function 'next-method-p)
(lambda () (cl--generic-isnot-nnm-p cnm))))
......
......@@ -288,16 +288,17 @@ It creates an autoload function for CNAME's constructor."
(defun eieio-make-class-predicate (class)
(lambda (obj)
;; (:docstring (format "Test OBJ to see if it's an object of type %S."
;; class))
(:documentation
(format "Return non-nil if OBJ is an object of type `%S'.\n\n(fn OBJ)"
class))
(and (eieio-object-p obj)
(same-class-p obj class))))
(defun eieio-make-child-predicate (class)
(lambda (obj)
;; (:docstring (format
;; "Test OBJ to see if it's an object is a child of type %S."
;; class))
(:documentation
(format "Return non-nil if OBJ is an object of type `%S' or a subclass.
\n(fn OBJ)" class))
(and (eieio-object-p obj)
(object-of-class-p obj class))))
......@@ -312,8 +313,7 @@ See `defclass' for more information."
(run-hooks 'eieio-hook)
(setq eieio-hook nil)
(let* ((pname superclasses)
(oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c)))
(let* ((oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c)))
(newc (if (and oldc (not (eieio--class-default-object-cache oldc)))
;; The oldc class is a stub setup by eieio-defclass-autoload.
;; Reuse it instead of creating a new one, so that existing
......@@ -338,9 +338,9 @@ See `defclass' for more information."
(setf (eieio--class-children newc) children)
(remhash cname eieio-defclass-autoload-map))))
(if pname
(if superclasses
(progn
(dolist (p pname)
(dolist (p superclasses)
(if (not (and p (symbolp p)))
(error "Invalid parent class %S" p)
(let ((c (eieio--class-v p)))
......@@ -396,7 +396,7 @@ See `defclass' for more information."
;; Before adding new slots, let's add all the methods and classes
;; in from the parent class.
(eieio-copy-parents-into-subclass newc superclasses)
(eieio-copy-parents-into-subclass newc)
;; Store the new class vector definition into the symbol. We need to
;; do this first so that we can call defmethod for the accessor.
......@@ -784,7 +784,7 @@ if default value is nil."
))
))
(defun eieio-copy-parents-into-subclass (newc _parents)
(defun eieio-copy-parents-into-subclass (newc)
"Copy into NEWC the slots of PARENTS.
Follow the rules of not overwriting early parents when applying to
the new child class."
......@@ -911,7 +911,7 @@ Argument FN is the function calling this verifier."
(if (eieio--class-p c) (eieio-class-un-autoload obj))
c))
(t (eieio--object-class-object obj))))
(c (eieio--slot-name-index class obj slot)))
(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.
......@@ -935,7 +935,7 @@ Fills in OBJ's SLOT with its default value."
(cl-check-type slot symbol)
(let* ((cl (cond ((symbolp obj) (eieio--class-v obj))
(t (eieio--object-class-object obj))))
(c (eieio--slot-name-index cl obj slot)))
(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.
......@@ -973,7 +973,7 @@ Fills in OBJ's SLOT with VALUE."
(cl-check-type obj eieio-object)
(cl-check-type slot symbol)
(let* ((class (eieio--object-class-object obj))
(c (eieio--slot-name-index class obj slot)))
(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.
......@@ -997,7 +997,7 @@ Fills in the default value in CLASS' in SLOT with VALUE."
(setq class (eieio--class-object class))
(cl-check-type class eieio--class)
(cl-check-type slot symbol)
(let* ((c (eieio--slot-name-index class nil slot)))
(let* ((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.
......@@ -1021,12 +1021,9 @@ Fills in the default value in CLASS' in SLOT with VALUE."
;;; EIEIO internal search functions
;;
(defun eieio--slot-name-index (class obj slot)
"In CLASS for OBJ find the index of the named SLOT.
The slot is a symbol which is installed in CLASS by the `defclass'
call. OBJ can be nil, but if it is an object, and the slot in question
is protected, access will be allowed if OBJ is a child of the currently
scoped class.
(defun eieio--slot-name-index (class slot)
"In CLASS find the index of the named SLOT.
The slot is a symbol which is installed in CLASS by the `defclass' call.
If SLOT is the value created with :initarg instead,
reverse-lookup that name, and recurse with the associated slot value."
;; Removed checks to outside this call
......@@ -1035,7 +1032,7 @@ reverse-lookup that name, and recurse with the associated slot value."
(if (integerp fsi)
(+ (eval-when-compile eieio--object-num-slots) fsi)
(let ((fn (eieio--initarg-to-attribute class slot)))
(if fn (eieio--slot-name-index class obj fn) nil)))))
(if fn (eieio--slot-name-index class fn) nil)))))
(defun eieio--class-slot-name-index (class slot)
"In CLASS find the index of the named SLOT.
......@@ -1255,7 +1252,7 @@ method invocation orders of the involved classes."
(eieio--class-precedence-list tag))))
;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b568ffb3c90ed5d0ae673f0051d608ee")
;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "5b04c9a8fff2bd3f3d3ac54aba0f65b7")
;;; Generated autoloads from eieio-compat.el
(autoload 'eieio--defalias "eieio-compat" "\
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment