* lisp/emacs-lisp/eieio.el: Add some default implementations
(standard-class): Mark it obsolete. (slot-missing): Give it a default implementation. (destructor): Simplify and mark it obsolete. (object-print): Give it a default implementation. (eieio-change-class): Rename from change-class. (change-class): Redefine as obsolete alias.
This commit is contained in:
parent
c334674695
commit
82a8ad2049
2 changed files with 19 additions and 29 deletions
|
@ -756,9 +756,7 @@ Argument FN is the function calling this verifier."
|
|||
;; 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)
|
||||
;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
|
||||
)
|
||||
(slot-missing obj slot 'oref))
|
||||
(cl-check-type obj eieio-object)
|
||||
(eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
|
||||
|
||||
|
@ -780,9 +778,7 @@ Fills in OBJ's SLOT with its default value."
|
|||
;; Oref that slot.
|
||||
(aref (eieio--class-class-allocation-values cl)
|
||||
c)
|
||||
(slot-missing obj slot 'oref-default)
|
||||
;;(signal 'invalid-slot-name (list (class-name cl) slot))
|
||||
)
|
||||
(slot-missing obj slot 'oref-default))
|
||||
(eieio-barf-if-slot-unbound
|
||||
(let ((val (cl--slot-descriptor-initform
|
||||
(aref (eieio--class-slots cl)
|
||||
|
@ -822,9 +818,7 @@ Fills in OBJ's SLOT with VALUE."
|
|||
(aset (eieio--class-class-allocation-values class)
|
||||
c value))
|
||||
;; See oref for comment on `slot-missing'
|
||||
(slot-missing obj slot 'oset value)
|
||||
;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
|
||||
)
|
||||
(slot-missing obj slot 'oset value))
|
||||
(eieio--validate-slot-value class c value slot)
|
||||
(aset obj c value))))
|
||||
|
||||
|
|
|
@ -678,7 +678,8 @@ This class is not stored in the `parent' slot of a class vector."
|
|||
|
||||
(setq eieio-default-superclass (cl--find-class 'eieio-default-superclass))
|
||||
|
||||
(defalias 'standard-class 'eieio-default-superclass)
|
||||
(define-obsolete-function-alias 'standard-class
|
||||
'eieio-default-superclass "25.2")
|
||||
|
||||
(cl-defgeneric make-instance (class &rest initargs)
|
||||
"Make a new instance of CLASS based on INITARGS.
|
||||
|
@ -765,11 +766,7 @@ dynamically set from SLOTS."
|
|||
;; Shared initialize will parse our slots for us.
|
||||
(shared-initialize this slots))
|
||||
|
||||
(cl-defgeneric slot-missing (object slot-name operation &optional new-value)
|
||||
"Method invoked when an attempt to access a slot in OBJECT fails.")
|
||||
|
||||
(cl-defmethod slot-missing ((object eieio-default-superclass) slot-name
|
||||
_operation &optional _new-value)
|
||||
(cl-defgeneric slot-missing (object slot-name _operation &optional _new-value)
|
||||
"Method invoked when an attempt to access a slot in OBJECT fails.
|
||||
SLOT-NAME is the name of the failed slot, OPERATION is the type of access
|
||||
that was requested, and optional NEW-VALUE is the value that was desired
|
||||
|
@ -777,8 +774,9 @@ to be set.
|
|||
|
||||
This method is called from `oref', `oset', and other functions which
|
||||
directly reference slots in EIEIO objects."
|
||||
(signal 'invalid-slot-name (list (eieio-object-name object)
|
||||
slot-name)))
|
||||
(signal 'invalid-slot-name
|
||||
(list (if (eieio-object-p object) (eieio-object-name object) object)
|
||||
slot-name)))
|
||||
|
||||
(cl-defgeneric slot-unbound (object class slot-name fn)
|
||||
"Slot unbound is invoked during an attempt to reference an unbound slot.")
|
||||
|
@ -815,22 +813,19 @@ first and modify the returned object.")
|
|||
(if params (shared-initialize nobj params))
|
||||
nobj))
|
||||
|
||||
(cl-defgeneric destructor (this &rest params)
|
||||
"Destructor for cleaning up any dynamic links to our object.")
|
||||
|
||||
(cl-defmethod destructor ((_this eieio-default-superclass) &rest _params)
|
||||
"Destructor for cleaning up any dynamic links to our object.
|
||||
Argument THIS is the object being destroyed. PARAMS are additional
|
||||
ignored parameters."
|
||||
(cl-defgeneric destructor (_this &rest _params)
|
||||
"Destructor for cleaning up any dynamic links to our object."
|
||||
(declare (obsolete nil "25.2"))
|
||||
;; No cleanup... yet.
|
||||
)
|
||||
nil)
|
||||
|
||||
(cl-defgeneric object-print (this &rest strings)
|
||||
"Pretty printer for object THIS. Call function `object-name' with STRINGS.
|
||||
(cl-defgeneric object-print (this &rest _strings)
|
||||
"Pretty printer for object THIS.
|
||||
|
||||
It is sometimes useful to put a summary of the object into the
|
||||
default #<notation> string when using EIEIO browsing tools.
|
||||
Implement this method to customize the summary.")
|
||||
Implement this method to customize the summary."
|
||||
(format "%S" this))
|
||||
|
||||
(cl-defmethod object-print ((this eieio-default-superclass) &rest strings)
|
||||
"Pretty printer for object THIS. Call function `object-name' with STRINGS.
|
||||
|
@ -938,11 +933,12 @@ this object."
|
|||
|
||||
;;; Unimplemented functions from CLOS
|
||||
;;
|
||||
(defun change-class (_obj _class)
|
||||
(defun eieio-change-class (_obj _class)
|
||||
"Change the class of OBJ to type CLASS.
|
||||
This may create or delete slots, but does not affect the return value
|
||||
of `eq'."
|
||||
(error "EIEIO: `change-class' is unimplemented"))
|
||||
(define-obsolete-function-alias 'change-class 'eieio-change-class "25.2")
|
||||
|
||||
;; Hook ourselves into help system for describing classes and methods.
|
||||
;; FIXME: This is not actually needed any more since we can click on the
|
||||
|
|
Loading…
Add table
Reference in a new issue