Commit 37436fe6 authored by Vitalie Spinu's avatar Vitalie Spinu

Fix cloning of eieio-named objects (Bug#22840)

* lisp/emacs-lisp/eieio-base.el (clone): Correctly set the name of the
  cloned objects from eieio-named instances.
parent fb65a36f
Pipeline #1596 passed with stage
in 25 minutes and 26 seconds
......@@ -510,16 +510,18 @@ instance."
All slots are unbound, except those initialized with PARAMS."
(let* ((newname (and (stringp (car params)) (pop params)))
(nobj (apply #'cl-call-next-method obj params))
(nm (slot-value obj 'object-name)))
(eieio-oset obj 'object-name
(nm (slot-value nobj 'object-name)))
(eieio-oset nobj 'object-name
(or newname
(save-match-data
(if (and nm (string-match "-\\([0-9]+\\)" nm))
(let ((num (1+ (string-to-number
(match-string 1 nm)))))
(concat (substring nm 0 (match-beginning 0))
"-" (int-to-string num)))
(concat nm "-1")))))
(if (equal nm (slot-value obj 'object-name))
(save-match-data
(if (and nm (string-match "-\\([0-9]+\\)" nm))
(let ((num (1+ (string-to-number
(match-string 1 nm)))))
(concat (substring nm 0 (match-beginning 0))
"-" (int-to-string num)))
(concat nm "-1")))
nm)))
nobj))
(cl-defmethod make-instance ((class (subclass eieio-named)) &rest args)
......
......@@ -862,8 +862,7 @@ Subclasses to override slot attributes.")
(should (oref obj1 a-slot))))
(defclass NAMED (eieio-named)
((some-slot :initform nil)
)
((some-slot :initform nil))
"A class inheriting from eieio-named.")
(ert-deftest eieio-test-35-named-object ()
......@@ -902,6 +901,18 @@ Subclasses to override slot attributes.")
(should
(fboundp 'eieio--defalias)))
(ert-deftest eieio-test-38-clone-named-object ()
(let* ((A (NAMED :object-name "aa"))
(B (clone A :object-name "bb"))
(C (clone A "cc"))
(D (clone A))
(E (clone D)))
(should (string= "aa" (oref A object-name)))
(should (string= "bb" (oref B object-name)))
(should (string= "cc" (oref C object-name)))
(should (string= "aa-1" (oref D object-name)))
(should (string= "aa-2" (oref E object-name)))))
(provide 'eieio-tests)
......
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