]> git.eshelyaron.com Git - emacs.git/commitdiff
(copy-list): Moved to cl.el.
authorRichard M. Stallman <rms@gnu.org>
Mon, 10 Jun 2002 09:01:08 +0000 (09:01 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 10 Jun 2002 09:01:08 +0000 (09:01 +0000)
(copy-tree): Don't use copy-list or cl-pop.

lisp/subr.el

index 7b613b42e639bee161196ead83d6871f1ad1ab29..b565d8ef7c9914fc3fa1f8e0270d3c129a2154bb 100644 (file)
@@ -191,32 +191,26 @@ The comparison is done with `eq'."
       (delq elt (copy-sequence list))
     list))
 
-(defun copy-list (list)
-  "Return a copy of a list, which may be a dotted list.
-The elements of the list are not copied, just the list structure itself."
-  (if (consp list)
-      (let ((res nil))
-       (while (consp list) (push (pop list) res))
-       (prog1 (nreverse res) (setcdr res list)))
-    (car list)))
-
 (defun copy-tree (tree &optional vecp)
   "Make a copy of TREE.
 If TREE is a cons cell, this recursively copies both its car and its cdr.
-Contrast to copy-sequence, which copies only along the cdrs.  With second
+Contrast to `copy-sequence', which copies only along the cdrs.  With second
 argument VECP, this copies vectors as well as conses."
   (if (consp tree)
-      (let ((p (setq tree (copy-list tree))))
-       (while (consp p)
-         (if (or (consp (car p)) (and vecp (vectorp (car p))))
-             (setcar p (copy-tree (car p) vecp)))
-         (or (listp (cdr p)) (setcdr p (copy-tree (cdr p) vecp)))
-         (cl-pop p)))
+      (let (result)
+       (while (consp tree)
+         (let ((newcar (car tree)))
+           (if (or (consp (car tree)) (and vecp (vectorp (car tree))))
+               (setq newcar (copy-tree (car tree) vecp)))
+           (push newcar result))
+         (setq tree (cdr tree)))
+       (nreconc result tree))
     (if (and vecp (vectorp tree))
        (let ((i (length (setq tree (copy-sequence tree)))))
          (while (>= (setq i (1- i)) 0)
-           (aset tree i (copy-tree (aref tree i) vecp))))))
-  tree)
+           (aset tree i (copy-tree (aref tree i) vecp)))
+         tree)
+      tree)))
 
 (defun assoc-default (key alist &optional test default)
   "Find object KEY in a pseudo-alist ALIST.