]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix cloning of eieio-named objects (Bug#22840)
authorVitalie Spinu <spinuvit@gmail.com>
Tue, 7 May 2019 11:15:43 +0000 (13:15 +0200)
committerVitalie Spinu <spinuvit@gmail.com>
Tue, 7 May 2019 11:45:00 +0000 (13:45 +0200)
* lisp/emacs-lisp/eieio-base.el (clone): Correctly set the name of the
  cloned objects from eieio-named instances.

lisp/emacs-lisp/eieio-base.el
test/lisp/emacs-lisp/eieio-tests/eieio-tests.el

index 7a9f905c6fe3483db9ee8afc43e16b9932351e63..3aeda92db12bb7d8d3dc71ec145ff53b53805b75 100644 (file)
@@ -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)
index 09ee123efaa39308abfb98f6b6f478ec0d48281c..0c7b6b71c311e3e161d7f93d6a003c86d6e7b354 100644 (file)
@@ -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)