From 03e18e4eec518660e8dae6ae66ef21d4946f6220 Mon Sep 17 00:00:00 2001 From: Vitalie Spinu Date: Wed, 13 Mar 2019 13:32:22 +0100 Subject: [PATCH] Don't initialize slots of eieio-instance-inheritor objects on clone --- lisp/emacs-lisp/eieio-base.el | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index 3a0109877e..b2007a7476 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el @@ -64,10 +64,15 @@ eieio-instance-inheritor ;; 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))) + (let ((nobj (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)) -- 2.17.1