Fix incorrect cloning of eieio-instance-inheritor objects (Bug#34840)
* lisp/emacs-lisp/eieio-base.el (clone): Unbound slots of eieio-instance-inheritor objects as documented in the docs string and implemented in the original eieio implementation.
This commit is contained in:
parent
37436fe6d3
commit
1c6484e975
2 changed files with 51 additions and 2 deletions
|
@ -64,10 +64,18 @@ SLOT-NAME is the offending slot. FN is the function signaling the error."
|
|||
;; Throw the regular signal.
|
||||
(cl-call-next-method)))
|
||||
|
||||
(cl-defmethod clone ((obj eieio-instance-inheritor) &rest _params)
|
||||
(cl-defmethod clone ((obj eieio-instance-inheritor) &rest params)
|
||||
"Clone OBJ, initializing `:parent' to OBJ.
|
||||
All slots are unbound, except those initialized with PARAMS."
|
||||
(let ((nobj (cl-call-next-method)))
|
||||
;; call next method without params as we makeunbound slots anyhow
|
||||
(let ((nobj (if (stringp (car params))
|
||||
(cl-call-next-method obj (pop params))
|
||||
(cl-call-next-method obj))))
|
||||
(dolist (descriptor (eieio-class-slots (class-of nobj)))
|
||||
(let ((slot (eieio-slot-descriptor-name descriptor)))
|
||||
(slot-makeunbound nobj slot)))
|
||||
(when params
|
||||
(shared-initialize nobj params))
|
||||
(oset nobj parent-instance obj)
|
||||
nobj))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue